Как осуществлять SOAP технологии

Как ОТДЫХА, реализации SOAP включает как генерации запросов и обработки ответа. Если обработки SOAP ответ похож на ОТДЫХА результате генерации SOAP запрос совершенно иная.

Генерация просит

В отличие ОТДЫХА, это довольно редко видеть запросы в вручную, хотя это еще можно сделать. В целом, SOAP запросы как в в общий инструмент (например NuSOAP или груш: SOAP), или с применением конкретных класс или модуль. Руководство поколение описывается (хорошее понимание, как это работает, будет полезным), а также NuSOAP.

Применение конкретных инструментов будут игнорироваться, за несколько причин. По определению они являются конкретные применения, и поэтому не очень полезно в этой общей статье. Во-вторых, инструменты, различные интерфейсы и функциональность уровнях, и для того, чтобы сделать тему справедливости потребуется углубленный взгляд. Наконец, я твердо придерживается мнения, что если вы можете понять, как заставить ее работать с NuSOAP (или сырье, для этого вопроса), вы можете получить применение конкретных инструментов для работы тоже.

Руководство поколения

Генерация запросов SOAP вручную, не слишком отличается от генерации ОТДЫХА просьбы. Процесс получения запроса и передаче фактически разделено на две отдельные функции, для демонстрации целей.

  

Для получения просьбе самой, я решил использовать pregenerated строки, и просто заполнить необходимые значения во время выполнения. Есть более сложные варианты (такие, как создание документа в SimpleXML или создать его с нуля каждого запуска), но они не являются действительно необходимо:

functioncreateRequest ($ devkey, $ действий, типа $, $ ключевое слово)
(
$ просьбе = "<? xmlversion = \ "1,0 \" кодировка = \ "UTF - 8 \" автономную = \ "нет \"? >
<SOAP - ENV: Конверт
xmlns: SOAP - ENV = \ "http://schemas.xmlsoap.org/soap/envelope/ \"
xmlns: xsd = \ "http://www.w3.org/2001/XMLSchema \"
xmlns: xsi = \ "http://www.w3.org/2001/XMLSchema-instance \">
<SOAP - ENV: Кузов>
<devkey xsi: тип = \ "xsd: int \"> $ devkey </ devkey>
<действия xsi: тип = \ "xsd: строка \"> $ действий </ действия>
<тип xsi: тип = \ "xsd: строка \"> $ типу </ типа>
<ключевое слово xsi: тип = \ "xsd: строка \"> $ ключевых </ ключевые слова>
</ SOAP - ENV: Кузов>
</ SOAP - ENV: Конверт> ";
$ возвращения просьбе;
)

Как вы можете говорить, то функция просто так прост, как он может получить. Заметим, что переменные не были кодирование; Потому, что они не направили в адрес (звуки очевидна, но она также легко пропустить).

Вообще-то, называть API передать просьбу предполагает заимствование некоторых код из первого ОТДЫХА Например, так как запрос будет отправлен сырья на этот раз.

functioncallSOAPAPI ($ данные)
(
$ сайта = "http://library.example.com/api/soap/search";
$ url_info = parse_url ($ сайта);
$ принимающей = $ url_info [ 'пребывания'];
путь $ = $ url_info [ 'путь'];

Я мог только населенные долл. пребывания и $ путь переменных в начале, но это должно быть четким. В производственной системы, можно сэкономить несколько циклов процессора на hardcoding этих элементов.

$ fp = fsockopen ($ пребывания, 80);
fputs ($ fp, "Получите". $ путь. "HTTP/1.1 \ р \ н");
fputs ($ fp, "Host:". $ пребывания. "\ р \ н");
fputs ($ fp, "Примите: * / * \ р \ н");
fputs ($ fp, "Принять - Charset: ISO - 8859 - 1, utf - 8; q = 0,7 *; q = 0,7 \ р \ н ");
fputs ($ fp, "Connection: закрыть \ р \ н");
fputs ($ fp, "Тип содержания: применение / мыло + xml \ р \ н");
fputs ($ fp, "Содержание - Длина:". strlen ($ данные). "\ р \ н \ р \ н");
fputs ($ fp, "$ данных");

Этот блок практически идентичен и в предыдущем примере. В предыдущем примере был POST запрос, то это Получите просьбе, изменения, что будет диктоваться любыми API вы работаете с. Содержание - тип заголовка отличается точно отражает то, что Вы отправляете, и на этот раз, конечно, надо $ данные отправлять, так Содержание - длина не будет 0.

$ ответ = "";
а (! feof ($ fp))
(
$ ответ .= fgets ($ fp, 128);
)
fclose ($ fp);
список ($ http_headers, $ http_content) = взорваться ( "\ р \ н \ р \ н", $ ответа);
вернуться $ http_content;
)

Этот раздел также совпадает со ОТДЫХА пример. Сплошной обеих этих функций получить ответ только едва стоит упомянуть:

$ просьбе = createRequest ('123 ',' поиск ',' книга ',' стиль);
$ ответ = callSOAPAPI ($ запросу);

Не слишком сложно!

В отличие ОТДЫХА, вы не можете просто использовать file_get_contents () для достижения API, так нужно направить XML орган с просьбой. file_put_contents () обыкновение работать либо из-за Вам нужен ответ (file_put_contents () возвращает int), но есть и другие варианты. Груша (http://pear.php.net), например, кучу HTTP конкретных функций, которые могут принять некоторые из головной вручную создать просьбой покинуть свои руки, но все же позволяют все гибкость вы получите при руководство создания.

Поколения с NuSOAP

Для чего-то иного, чем на один выстрел программа, я бы определенно рекомендовать происходит с определенной в SOAP модуль сделать Вашу жизнь проще кодирования. Хотя, если вы столкнетесь с проблемами, отслеживание их может быть немного боли. Я хотел с помощью местного развития урну развития, поэтому следует начать вещей происходит наперекосяк я могу использовать пакет sniffer взглянуть на запрос / ответ в сыром виде.

Теоретически, с помощью NuSOAP не слишком отличается от завершения этой задачи вручную. Объект создается, полезной нагрузки был создан, и запрос отправлен. Основное различие заключается в том, что NuSOAP делает все грязные работы.

требуют ('../ lib / nusoap.php ');
= $ client- новых soapclient ( "http://library.example.com/api/soap/wsdl/", верно);

Здесь $ клиентский объект создан. Два варианта при создании новых soapclient: Вы можете указать wsdl файл за услугу (и установить второй параметр верно), или указать пункт назначения на слово (и установить второй параметр ложной). Когда это возможно, я хотел использовать wsdl файл; В NuSOAP модуль может улова некоторые ваши ошибки, что путь, и она гарантирует, что различные виды просьбы всех перейти на правильный пункт назначения.

$ = массив параметров (
"devkey '=>'123',
"действия" => "поиск",
"типа" => "Книга",
"ключевое слово" => "стиль"
);

Подготовка параметров для передачи немного легче, чем прежние методы.

$ имен = 'http://library.example.com';
$ действий = 'http://library.example.com/api/soap/search';
$ методу = "SearchRequest";
$ result- = $ client-> слово ($ метод,
массив ( "SearchRequest '=> $ параметров),
$ имен, $ действий);

Наконец, в последние несколько параметры установлены, и называть себя делается.

Обработка Отзыв

Обработка ответа от SOAP запрос опять не слишком отличается от ОТДЫХА ответ - оба представлены в аналогичных форматов XML. В ответ SOAP несет дополнительные конверт и элементы органа, но зачастую представления данных таким же образом, в этих элементов. Существует, конечно некоторые различия между обработки ответа от руководства просьбе и с NuSOAP просьбу. Оба метода представлены здесь.

Ручная Разбор ответ

Mimicking выводе, создаваемом с просьбой ОТДЫХА использует аналогичный код, с некоторыми изменениями для инкапсуляции используются схемы с SOAP.

повторить "Вы искали: ($ xml -> орган -> LibrarySearchResponse -> RequestInfo ->
ключевое слово) <br> ";

повторить "Вот ваши ($ xml -> орган -> LibrarySearchResponse -> ResponseInfo -> ResultCount)
Результаты <br> ";
foreach ($ xml -> орган -> LibrarySearchResponse -> ResponseInfo -> Пункт AS и $ пункта)
(
повторить "($ пункт -> Название) на ($ пункт -> Автор) <br>";
)

Это будет генерировать идентичные результаты, как ОТДЫХА просьбе показали ранее. Примечание различных синтаксиса используются для приобретения поиска ключевое слово. Это не атрибут этого времени, поэтому доступ отличается.

Разбор Ответ с NuSOAP

Доступ к объекту, представленной NuSOAP это мало отличается от методов, используемых с SimpleXML, но внутренние структуры данных очень похожа. Изменение кода для работы с NuSOAP объекта занимает всего несколько минут.

повторить "Вы искали:".
$ xml [ 'орган'] [ 'LibrarySearchResponse'] [ 'RequestInfo "] [" ключевое слово "]. "<br>";
повторить "Вот ваши
($ xml [ 'орган'] [ 'LibrarySearchResponse'] [ 'ResponseInfo'] [ 'ResultCount'])
Результаты <br> ";
foreach ($ xml [ 'орган'] [ 'LibrarySearchResponse'] [ 'ResponseInfo'] [ 'Пункт'] AS $ и дня)
(
повторить "($ пункт [ 'Название']) ($ к пункту [ 'Автор']) <br>";
)

В NuSOAP, внутренние данные обращались так же, как ассоциативный массив, так, а не OO метод использования -> для доступа к детской элементов, далее массив включена информация. Этот элемент выведет идентично с предыдущим примером.

SOAP является эффективным методом опроса API, когда дополнительные накладные допускается. В инкапсуляции всех элементов позволяет легко читать, и переменной сферы в рамках запроса. Создание SOAP запросов можно также легко, как и написания им раз, то только замены ключевых переменных. Кроме того, она также может быть выполнена с помощью инструментов, таких, как NuSOAP. Доступ к SOAP ответ может быть достигнуто во многом таким же образом как ОТДЫХА ответ, когда запрос был завершен вручную. В случае запросов завершена NuSOAP, доступ метод структурно идентичны, и лишь незначительные изменения в синтаксисе используются.

это статья добавлена Emanuela Хедрик
Опровержение: Наш сайт не несет ответственности за информацию, содержащуюся в этой статье. Эта статья никоим образом не отражает взгляды, мнения, мысли или веры каталог статей сотрудников.

Перевод уведомления: В статье "Как осуществлять SOAP технологии" была переведена с использованием автоматизированной службы перевода. Мы приносим извинения за любые ошибки перевода, что произошло. Спасибо за понимание.

Online: 541 users browsing the articles directory