Как ОТДЫХА, реализации 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 конкретных функций, которые могут принять некоторые из головной вручную создать просьбой покинуть свои руки, но все же позволяют все гибкость вы получите при руководство создания.
Для чего-то иного, чем на один выстрел программа, я бы определенно рекомендовать происходит с определенной в 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 это мало отличается от методов, используемых с 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, доступ метод структурно идентичны, и лишь незначительные изменения в синтаксисе используются.
Online: 541 users browsing the articles directory
|
|