PHP+XML против web-сервисов

Aptem

Новичок
PHP+XML против web-сервисов

Привет, всем.

У меня такой вопрос. Не могу понять разницу вот в чем. Есть web-сервисы, написанные на asp, которые, например, берут курсы валют из базы данных и отдают в виде xml-пакета клиенту. И есть php-скрипт, который также берет курсы валют из базы данных и тупо вместо html формирует xml (тупо через print (<currency name="usd"></currency>) и т.д.). Скажите, а в чем тогда преимущество asp и web-сервисов, когда я могу просто через php генерить xml?

Мож я че не понимаю? Объясните.

Спасибо за внимание.
 

Подрыв мозга

Новичок
Если имеются ввиду SOAP-сервисы, то в ASP.NET вообще генерить XML не надо, достаточно вернуть массив decimal[] (в конкретном случае) из веб-метода, остальное сделает визард. Он же сгенерирует тестовую форму для отправки запросов сервису и просмотра результатов в читабельной форме. Если же имеются ввиду REST-сервисы, то готовой их поддержки пока нет, поэтому остаются только стандартные возможности сериализации.

PHP:
Пример

[Serializable]
public class MyClass
{
    [XmlAttribute]
    public int MyInteger { get; set; }

    [XmlElement("Numbers")]
    public int[] MyNumbers { get; set; }

    public string Name { get; set; }
}

[Test]
public void SerializeMe()
{
    var myObject = new MyClass
    {
         Name = "MyName",
         MyNumbers = new[] { 1, 2, 3 },
         MyInteger = 7
    };

    using (var writer = new StringWriter())
    {
        new XmlSerializer(typeof(MyClass)).Serialize(writer, myObject);
        Console.WriteLine(writer.ToString());
    }
}

Результат

<?xml version="1.0" encoding="utf-16"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" MyInteger="0">
  <Numbers>1</Numbers>
  <Numbers>2</Numbers>
  <Numbers>3</Numbers>
  <Name>MyName</Name>
</MyClass>
Разница между декларативной сериализацией и print, становится заметна, когда надо передать объеты нескольких типов, в каждом из которых полей по 10-20.
 

Aptem

Новичок
Грубо говоря, сериализация это в неком роде упрощение, или автоматизация передачи данных. Правильно? Она нужна для того, чтобы не писать кучу кода на php для формирования xml-пакета. Так?

А разница между REST и SOAP только в протоколе передачи данных. В первом случае это http, а во втором soap. Правильно ли я понял?

А WSDL это просто набор правил как нужно обзывать xml-теги, чтобы их смогли читать другие сервисы.
 

Подрыв мозга

Новичок
>>> Грубо говоря, сериализация это в неком роде упрощение, или автоматизация передачи данных. Правильно?
Не только передачи, но и например сохранения в базу данных или на диск. Предположим, у вас есть здоровенный объект, который содержит себе массив других объектов, которые в свою очередь содержат другие объекты, и вдобавок они еще и рекурсивно ссылаются друг на друга. И вот вам жуть как захотелось сохранить все это дерево на диск. Вот тут и приходит на помощь сериализация, бо руками это очень скучно и ошибкоопасно писать. В ASP.NET серилизовать можно в бинарный формат, XML и SOAP. В PHP есть функции serialize и unserialize, но сериализуют они в свой собственный формат. Хотя и в PHP есть библиотеки для сериализации в XML и передачи по SOAP.

>>> Она нужна для того, чтобы не писать кучу кода на php для формирования xml-пакета. Так?

Да, но в принципе, она вообще не нужна. Это просто один из способов, уже готовый, но можно построить DOM-дерево вручную или просто записать в виде echo.

>>> А разница между REST и SOAP только в протоколе передачи данных. В первом случае это http, а во втором soap. Правильно ли я понял?

И REST и SOAP это специально сформированые XML-данные, передающиеся по протоколу HTTP. REST появлся позднне и является более простым и понятным способом передачи обмена данными, что привлекло к себе внимание разработчиков, и способствовало развитию моды на него.

>>> А WSDL это просто набор правил как нужно обзывать xml-теги, чтобы их смогли читать другие сервисы.

WDSL - язык для описания сервиса. Предназначен, в основном, для автоматического создания клиентов, пользующихся данным сервисом. В ASP.NET достаточно в проекте сослаться на сервис по URI и автоматически будет сгенерирован прокси-класс для работы с данным сервисом, вам нужно будет только вызывать методы этого класса - все остальное уже готово. Но это работет только в случае SOAP-сервисов. Нечто подобное есть и для PHP - модуль SOAP, например.

В целом, что касается ИМЕННО ПРЕОБРАЗОВАНИЯ данных в ХМL и обратно, то у ASP.NEТ заметных преимуществ перед PHP я не вижу.
 

Alexandre

PHPПенсионер
Скажите, а в чем тогда преимущество asp и web-сервисов, когда я могу просто через php генерить xml?
в стандартизации протокола.
а ASP.NET часть кода за дебя делает кодогенератор.
 

Magz

Новичок
ИМХО, это вопрос из серии "чем asp лучше php" :) Есть одна идея, которая реализуется двумя разными средствами. Так же и здесь - есть идея разделения функциональности на отдельные сервисы и есть две разных реализации данной идеи. А дальше начинается сравнение и выбор реализации, которая лучше подходит для тебя, под твой проект, под цвет твоей мышки - вобщем, под любые факторы. :)

P.S. Такому вопросу место в "теории программирования", ИМХО
 

Aptem

Новичок
Вообщем, как я понял web-сервисы можно писать как на php, так и на asp. Но asp лучше заточен под это.

Всем спасибо за ответы.
 

Alexandre

PHPПенсионер
и какое отношение сабж имеет к mysql?
offtop
это как в бородатом анегдоте...
- что потерял?
- часы.
-где?
- вон там...
- почему ищешь здесь?
- а здесь светлее...

PS. перенес там, где светлее..
 
Сверху