Сервис для
сео - оптимизаторов

Найди ошибки на сайте
Ошибки мешают продвижению сайта
Исправь ошибки на сайте
Сайт без ошибок продвигать легче
Получи новых клиентов
Новые клиенты принесут больше прибыль

Создание веб-сервисов с помощью PHP и SOAP, часть 1

  1. Структура SOAP-сообщения
  2. Создание SOAP-сервера
  3. Создание SOAP-клиента
  4. Резюме

Как разработчики приложений, способность разрабатывать программное обеспечение и сервисы для широкого спектра платформ является необходимым навыком, но не все используют один и тот же язык или платформу, и написание кода для их поддержки неосуществимо. Если бы существовал стандарт, который позволял нам писать код один раз и позволял другим легко взаимодействовать с ним из своего программного обеспечения. Ну, к счастью, есть ... и его зовут SOAP. (Раньше SOAP был аббревиатурой, обозначающей Simple Object Access Protocol, но с версии 1.2 протокол называется просто SOAP.)

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

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

Структура SOAP-сообщения

SOAP основан на XML, поэтому считается, что он предназначен для чтения человеком, но есть особая схема, которую необходимо соблюдать. Давайте сначала разберем сообщение SOAP, удалив все его данные, и просто посмотрим на конкретные элементы, составляющие сообщение SOAP.

&lt;? xml version = "1.0&quot;?> <soap: Envelope xmlns: soap = "http://www.w3.org/2001/12/soap-envelope" soap: encodingStyle = "http: //www.w3. org / 2001/12 / soap-encoding "> <soap: Header> ... </ soap: Header> <soap: Body> ... <soap: Fault> ... </ soap: Fault> </ soap : Тело> </ мыло: конверт>

Это может выглядеть как обычный XML-файл, но что делает его SOAP-сообщением, так это корневой элемент Envelope с мылом пространства имен, например http://www.w3.org/2001/12/soap-envelope. Атрибут soap: encodingStyle определяет типы данных, используемые в файле, но сама SOAP не имеет кодировки по умолчанию.

soap: Envelope является обязательным, но следующий элемент, soap: Header, является необязательным и обычно содержит информацию, относящуюся к аутентификации и обработке сеанса. Протокол SOAP не предлагает никакой встроенной аутентификации, но позволяет разработчикам включать ее в этот тег заголовка.

Далее есть обязательный элемент soap: Body, который содержит фактическое RPC-сообщение, включая имена методов и, в случае ответа, возвращаемые значения метода. Элемент soap: Fault является необязательным; если он присутствует, он содержит любые сообщения об ошибках или информацию о состоянии для сообщения SOAP и должен быть дочерним элементом soap: Body.

Теперь, когда вы понимаете основы того, что составляет сообщение SOAP, давайте посмотрим, как могут выглядеть сообщения запросов и ответов SOAP. Начнем с запроса.

&lt;? xml version = "1.0&quot;?> <soap: Envelope xmlns: soap = "http://www.w3.org/2001/12/soap-envelope" soap: encodingStyle = "http: //www.w3. org / 2001/12 / soap-encoding "> <soap: Body xmlns: m =" http://www.yourwebroot.com/stock "> <m: GetStockPrice> <m: StockName> IBM </ m: StockName> </ m: GetStockPrice> </ soap: Body> </ soap: Envelope>

Выше приведен пример сообщения запроса SOAP для получения цены акций конкретной компании. Внутри мыла: в теле вы заметите элемент GetStockPrice, специфичный для приложения. Это не элемент SOAP, и он берет свое имя от функции на сервере, которая будет вызываться для этого запроса. StockName также специфичен для приложения и является аргументом для функции.

Ответное сообщение похоже на запрос:

&lt;? xml version = "1.0&quot;?> <soap: Envelope xmlns: soap = "http://www.w3.org/2001/12/soap-envelope" soap: encodingStyle = "http: //www.w3. org / 2001/12 / soap-encoding "> <soap: Body xmlns: m =" http://www.yourwebroot.com/stock "> <m: GetStockPriceResponse> <m: цена> 183.08 </ m: цена> </ m: GetStockPriceResponse> </ soap: Body> </ soap: Envelope>

Внутри элемента soap: Body есть элемент GetStockPriceResponse с дочерним элементом Price, который содержит возвращаемые данные. Как вы могли догадаться, оба GetStockPriceResponse и Price являются специфическими для этого приложения.

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

Создание SOAP-сервера

Не может быть проще установить и запустить NuSOAP на вашем сервере; просто посетить sourceforge.net/projects/nusoap , скачайте и распакуйте пакет в вашей корневой веб-директории, и все готово. Чтобы использовать библиотеку, просто включите файл nusoap.php в свой код.

Для сервера, скажем, нам дали задачу создать сервис для предоставления списка продуктов с учетом категории продукта. Сервер должен прочитать в категории из запроса, найти все продукты, которые соответствуют категории, и вернуть список пользователю в формате CSV.

Создайте файл в вашем корне сети с именем productlist.php со следующим кодом:

&lt;? php require_once "nusoap.php"; function getProd ($ category) {if ($ category == "books") {return join (",", array ("Антология WordPress", "PHP Master: написать передовой код", "Создайте свой собственный сайт правильно") Путь")); } else {return "Нет товаров, перечисленных в этой категории"; }} $ server = new soap_server (); $ Server-> регистр ( "getProd"); $ Server-> сервис ($ HTTP_RAW_POST_DATA);

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

Это действительно все, что нужно для создания собственного SOAP-сервера - просто, не правда ли? В реальном сценарии вы, вероятно, искали бы список книг из базы данных, но, поскольку я хочу сосредоточиться на SOAP, я издевался над getProd (), чтобы получить жестко закодированный список названий.

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

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

Создание SOAP-клиента

Создайте файл с именем productlistclient.php и используйте код ниже:

&lt;? php require_once "nusoap.php"; $ client = new nusoap_client ("http: //localhost/nusoap/productlist.php"); $ error = $ client-> getError (); if ($ error) {echo "<h2> Ошибка конструктора </ h2> <pre>". ошибка "</ Пред>"; } $ result = $ client-> call ("getProd", array ("category" => "books")); if ($ client-> fault) {echo "<h2> Fault </ h2> <pre>"; print_r ($ результат); echo "</ pre>"; } else {$ error = $ client-> getError (); if ($ error) {echo "<h2> Error </ h2> <pre>". ошибка "</ Пред>"; } else {echo "<h2> Книги </ h2> <pre>"; echo $ result; echo "</ pre>"; }}

Мы снова включаем nusoap.php в require_once, а затем создаем новый экземпляр nusoap_client. Конструктор принимает местоположение вновь созданного сервера SOAP для подключения. Метод getError () проверяет, был ли клиент создан правильно, и код отображает сообщение об ошибке, если это не так.

Метод call () генерирует и отправляет запрос SOAP для вызова метода или функции, определенной первым аргументом. Второй аргумент для вызова () является ассоциированным массивом аргументов для RPC. Свойство fault и метод getError () используются для проверки и отображения любых ошибок. Если нет, то ошибок нет, выводится результат функции.

Теперь, когда оба файла находятся в корневом веб-каталоге, запустите клиентский скрипт (в моем случае http: //localhost/nusoap/productlistclient.php) в браузере. Вы должны увидеть следующее:

Если вы хотите проверять сообщения запросов и ответов SOAP для целей отладки или просто разбирать их на части для развлечения, добавьте эти строки в конец productlistclient.php:

echo "<h2> Request </ h2>"; echo "<pre>". htmlspecialchars ($ client-> request, ENT_QUOTES). "</ Пред>"; echo "<h2> Response </ h2>"; echo "<pre>". htmlspecialchars ($ client-> response, ENT_QUOTES). "</ Пред>";

Заголовки HTTP и содержимое XML теперь будут добавлены к выводу.

Резюме

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

В следующей части я подробно расскажу о кроличьей норе SOAP и объясню, что такое файл WSDL и как он может помочь вам с документацией и структурой вашего веб-сервиса.

Комментарии к этой статье закрыты. Есть вопрос по PHP? Почему бы не спросить это на нашем форумы ?

Изображение через Лиляна Виноградова / Shutterstock

Похожие

[How-To] Веб-сервер FreeBSD 11 с Nginx, MySQL, PHP 7.0
Пользователь показывает нам, как настроить веб-сервер FreeBSD 11 с Nginx, MySQL и PHP. Перейдите по ссылке ниже для полного набора инструкций. Мы работали со стеком LEMP, то есть Nginx, MySQL и PHP, в операционной системе на основе Linux, но сегодня мы будем устанавливать стек FEMP на FreeBSD 11. FreeBSD - это бесплатная
Разработка гаджета для боковой панели Windows. Часть 1. Основы
[Платформа / боковая панель гаджетов Windows доступна для использования в следующих версиях Windows: Windows 7, Windows Vista и Windows Server 2008. Она может быть изменена или недоступна в последующих версиях. ] Первый из трех обзоров, в которых описано, как создать базовый гаджет для боковой панели Windows. В этом обзоре мы демонстрируем простой гаджет «Hello World» и шаги, необходимые для его установки и отображения на боковой панели. Вступление Гаджеты - это
Как заблокировать / разблокировать телефон Android с помощью голоса, используя Google Assistant
Реклама Голосовая разблокировка телефона с помощью Google Assistant - это просто! И он может многое сделать - на самом деле некоторые его функции удивительны. От проверки трафика до воспроизведения музыки и видео, помощник может сделать вашу жизнь более удобной. Еще один полезный трюк, который вы можете добавить в свой арсенал Google Assistant, - использовать его для разблокировки и блокировки телефона Android с помощью голоса. Вот как это сделать.
Модульное тестирование и TDD в Node.js - Часть 1
Тестирование является важной практикой в ​​разработке программного обеспечения для улучшения качества программного обеспечения. Есть много форм тестирования; ручное тестирование, приемочные испытания, модульное тестирование и некоторые другие. В этом посте мы рассмотрим модульное тестирование в Node с использованием кофе мокко тестовые рамки. Модульные тесты обычно составляют большинство тестовых пакетов. Они тестируют небольшие блоки кода, как правило,
Как сделать игру похожей на переключатель цвета с помощью SpriteKit и Swift
Общим препятствием при запуске игрового проекта является отсутствие искусства для использования игровых спрайтов. Один из способов сделать это проще - выбрать художественный стиль, который использует очень простую или стилизованную графику. Например, популярная игра Цветовой переключатель (более 125 миллионов загрузок по всему миру) создает забавные и привлекательные визуальные эффекты, используя только простые формы,
Как подключиться к вашей работе VPN с помощью планшета Android
Реклама Вам не нужно идти в офис, чтобы быть продуктивным. Вам даже не нужен этот громоздкий ноутбук с Windows! С вашим планшетом Android, стабильным интернет-соединением и частным VPN-подключением вы можете работать удаленно практически из любой точки мира. Например, моя учетная запись VPN в университете предоставляет мне доступ к цифровым подпискам университетской библиотеки на дорогостоящие научные публикации. Это позволяет мне проводить исследования и чтения из дома
Домашнее облако: стоит ли ваше собственное облачное хранилище?
Насколько ценны ваши собственные облачные хранилища? Облаков так много: из Microsoft , Амазонка , раздаточная и, возможно, также от интернет-провайдеров, таких как
Word Online против Google Docs
Оглавление Введение Первое, что нужно понять об онлайн-редакторах, это то, что они функционально далеки от своих старших братьев. Было бы еще честнее сказать их «брат», я имею в виду MS Word. ;) Однако все основные функции реализованы хорошо, и вы можете легко выполнять большинство рутинных задач, почти как если бы это была обычная настольная версия. Более того, ребята из Microsoft и Google изо всех сил старались сохранить привычную интерактивность, комбинации горячих клавиш
Как системный администратор , вы можете проверить и контролировать состояние ваших систем Linux, когда они находятся под на...
Как системный администратор , вы можете проверить и контролировать состояние ваших систем Linux, когда они находятся под нагрузкой высокой нагрузки. Это может быть хорошим способом для системных администраторов и программистов: тонко настроить деятельность в системе. контролировать интерфейсы ядра операционной системы. проверить свой Аппаратные компоненты
Должностная инструкция работника
До сих пор не разработали должностных инструкций? Имейте в виду - их отсутствие может быть квалифицировано как нарушение законодательства о труде. Поэтому уделите должное внимание этому направлению работы. Наши рекомендации пригодятся и тем предприятиям, на которых права, обязанности и ответственность работников четко регламентировано. Из статьи узнаете о следующем: Образцы должностных инструкций: Разрабатываем, регистрируем, знакомим с должностной инструкцией
Бесплатное сетевое картографическое программное обеспечение PRTG
Сетевой сканер и картографические инструменты чистый сетевые сканеры обнаружить сеть со всеми ее компонентами и доставить результаты в виде списка. Затем эту информацию можно использовать для создания сетевых карт и карт с использованием программного обеспечения для картирования сети. Но это требует значительных затрат времени, ручной работы. Кроме того, таким образом могут быть созданы только статические

Комментарии

Php?
php?id=100001472280966 где идентификатор профиля Facebook в нашем случае номер 100001472280966.
Вы можете сказать себе: ну, если проблема PHP в обоих этих веб-серверах и в обслуживании статических файлов, nginx работает быстрее, почему бы мне не использовать nginx?
Вы можете сказать себе: ну, если проблема PHP в обоих этих веб-серверах и в обслуживании статических файлов, nginx работает быстрее, почему бы мне не использовать nginx? Апач имеет свои преимущества. Это зрелая и способная платформа, и в целом она имеет универсальную поддержку в мире Linux. Вещи, которые «работают» из коробки с Apache, могут потребовать дополнительных исследований и настройки под nginx. Панели управления и инструменты автоматической настройки могут быть недоступны для nginx.
Ваша машина не используется большую часть года?
Ваша машина не используется большую часть года? И поэтому вы должны нести стоимость полной политики ответственности. Вполне возможно, что это скоро изменится из-за временного изъятия легковых автомобилей и мотоциклов. Это не означает, однако, что вам не придется платить за OC. К сожалению, этот вариант может повлиять на дальнейшее повышение страховых цен для всех водителей. Временный вывод легкового автомобиля или мотоцикла был ликвидирован 20 лет назад - в 1997 году. С тех пор, независимо
Немногие генерируют большую часть трафика или оно распределено более равномерно?
Антивирусная программа говорила что-то о подозрительной загрузке (то есть неправильно понимает файл патча как вредоносный, потому что часть его кода выглядит как кусок вируса)?
Антивирусная программа говорила что-то о подозрительной загрузке (то есть неправильно понимает файл патча как вредоносный, потому что часть его кода выглядит как кусок вируса)? Или он настроен на то, чтобы вообще ничего не говорить и просто удалять то, что он считает опасным, сам по себе (настройка, которая является бессмысленной чепухой)? Привет, Полимахос

Lt;?
Quot;?
Lt;?
Quot;?
Quot;?
Есть вопрос по PHP?
Насколько ценны ваши собственные облачные хранилища?
Php?
Вы можете сказать себе: ну, если проблема PHP в обоих этих веб-серверах и в обслуживании статических файлов, nginx работает быстрее, почему бы мне не использовать nginx?
Ваша машина не используется большую часть года?