Генерация объектов в PHP с использованием REST - PullRequest
4 голосов
/ 20 мая 2009

Я пытаюсь принять решение, использовать ли мне службу REST или службу SOAP для некоторых веб-функций, которые я создаю. Это решение основано на том, могу ли я легко использовать службу REST при реализации. Я бы предпочел использовать REST, хотя я не хочу тратить дни на программирование объектной модели в PHP.

Сервисы разрабатываются в .NET, но в основном будут использоваться PHP.

По сути, это сводится к одному моменту: простота интеграции. Используя SOAP в PHP, я могу использовать библиотеку NuSOAP, которая будет генерировать объектную модель.

Однако с REST я не могу найти способ легко сгенерировать эту модель, если бы это было возможно, я бы использовал REST-сервисы, так как они легче документируют и расширяют, а также имеют возможности JSON.

Могу ли я сгенерировать объектную модель в PHP из файла / схемы XML, которую затем можно сериализовать с помощью службы REST?

Ответы [ 7 ]

6 голосов
/ 26 мая 2009

Возможно, вам даже не придется идти по маршруту класса. Просто загрузите данные, используя simplexml, а затем обойдите их, как если бы это был объект. Или, если у вас есть json, json_decode($data, TRUE) сделает то же самое (без атрибутов в скобках).

$ch = curl_init("http://example.com/some/rest/endpoint");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$data = curl_exec($ch);

$obj = simplexml_load_string($data);
print $obj->some->data->you['need'];

Это напечатало бы here, если бы ваш XML был чем-то вроде

<_>
 <some>
  <data>
   <you need="here" />
  </data>
 </some>
</_>
0 голосов
/ 25 мая 2009

Так что я думаю, что это может быть то, что я ищу. но я хотел бы знать, есть ли какая-то система автоматизации для этого

нашел его в http://devzone.zend.com/article/1713#Heading11

Расширение классов

Хотя все приведенные выше примеры были выполнимо с PHP 4 и domxml расширение (только API было немного немного по-другому), возможность расширить Классы DOM с вашим собственным кодом новая особенность PHP 5. Это делает его можно написать более читаемый код. Вот снова весь пример, переписан для использования DomDocument Класс:

 class Articles extends DomDocument {
     function __construct() {
         //has to be called!
         parent::__construct();
     }

     function addArticle($title) {
         $item = $this->createElement("item");
         $titlespace = $this->createElement("title");
         $titletext = $this->createTextNode($title);
         $titlespace->appendChild($titletext);
         $item->appendChild($titlespace);
         $this->documentElement->appendChild($item);
     } } $dom = new Articles(); $dom->load("articles.xml");
 $dom->addArticle("XML in PHP5"); print
 $dom->save("newfile.xml");
0 голосов
/ 23 мая 2009

Для простоты интеграции я бы использовал REST API. Поскольку существует такое строгое соглашение, интеграция должна быть относительно простой для тех, кто раньше работал с REST.

0 голосов
/ 23 мая 2009

Вся идея отдыха заключается в том, что вы не используете его с хакерскими «объектными моделями», как в SOAP. Проблема в том, что вы пытаетесь использовать систему неправильно:)

Если вам нужны объектные модели, используйте SOAP.

Если вы хотите использовать дружественные веб-интерфейсы API, используйте REST.

0 голосов
/ 21 мая 2009

На вашем месте я бы:

  • выяснить, можно ли использовать инструменты NuSOAP только на XSD. В мире .NET у вас есть svcutil (или в дни ASMX, wsdl.exe), чтобы переваривать файлы .wsdl для создания прокси-классов. Но если у вас есть только файлы .xsd, вы можете использовать инструмент xsd.exe или «aftermarket» XsdObjectGen , который похож на xsd.exe с наддувом. Есть ли в NuSOAP аналогичные инструменты для того же? Может быть, это очевидно, и вы уже сделали это.
  • если это не сработает, создайте фиктивный WSDL и вставьте в него свой XSD. Затем обработайте файл .wsdl с помощью инструментов NuSOAP. Возьмите сгенерированный код и удалите мыльный конверт и средства связи, но сохраните материал сериализации объекта. Не уверен, если это возможно, то, как код PHP (или это C?) Генерируется инструментами NuSOAP. В .NET легко разбить разные части.
0 голосов
/ 20 мая 2009

Исходя из ваших описанных требований, вы должны придерживаться мира SOAP. Помните, REST - это просто стиль архитектуры распределенного интерфейса. Это ничего не говорит о том, как реализована функциональность этого интерфейса. Разумеется, нет необходимости отображать схемы на объекты.

Сказав, что, если вы посмотрите на клиентские инструменты в стартовом наборе WCF REST, вы найдете функциональность для вставки XML в качестве типа CLR. Это будет лучшим предположением при создании сериализуемого класса на основе документа экземпляра XML.

Кроме того, из того, что вы описываете, ADO.NET Data Services предоставит вам быстрый способ предоставления RESTful-служб данных вашему сайту PHP.

....

Вот к вам вопрос? Если сервисы .Net будут использоваться сайтом PHP, то почему вы описываете сервисы .Net как «веб-ориентированные». Из вашего описания эти сервисы больше похожи на частную реализацию вашего веб-сайта.

0 голосов
/ 20 мая 2009

У меня возникли проблемы с настройкой SOAP для работы на разных языках (PHP <> JAVA и PHP <> .NET)

Если вы собираетесь использовать SOAP, вы можете проверить WS-I (совместимость веб-служб)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...