Как уже неоднократно говорилось, нужно изучать актуальный материал — getjump.github.io/ru-php-the-right-way А все эти допотопные рускоязычные видеокурсы только запутают и все равно придется после них переучиваться.
Если вы про курс Борисова, то у него есть и более новый вроде за 2013 год. И да WSDL еще актуален. Вообще советую внимательно посмотреть все. Из курсов «программирования» по PHP в русскоязычной среде этот наиболее полный и правильный в отличии от всяких поповых. Ну и как он там говорит, надо штудировать мануал.
Нужно понимать, что такое SOAP сервер и клиент. В общем случае их реализации абсолютно независимы. Может быть, например, сервер на PHP и клиент на браузерном JavaScript, может быть клиент на PHP и сервер на Java.
PHP класс SoapServer лишь обеспечивает преобразование тела SOAP-запроса в вызовы зарегистрированных в нём функций и методов, которое можно делать вручную. Приложение (или фреймворк) должны сами определить, что пришёл SOAP-вызов (например, по URL), осуществить его предварительную обработку, создать экземляр SoapServer и дернуть его метод handle(), чтобы вызвать нужную функцию или не создавать, а сделать всё самостоятельно.
PHP класс SoapClient прежде всего обеспечивает сам вызов, ответ может вернуть как нераспарсенный XML, так и как скаляр или массив скаляров.
1. Класс SoapClient это просто удобная обвертка над работой со сторонним соап сервисом. Путь к wsdl что ты передаешь в конструкторе даёт твоему клиенту описание методов АПИ этого сервиса и задаёт типизацию параметров этих методов. Если в метод getStock отдать что-то заведомо невалидное, то запрос даже не уйдёт. А если все нормально, то уходит обычный хттп запрос с правильным XML в теле. 2. В переменной $result уже распарсенный ответ сервиса. Но у соап клиента есть методы для вытаскивания последнего запроса и ответа в чистом виде.
Да, у этого протокола недостаток в жёсткой типизации параметров. Но его часто можно встретить в платежных системах.
1. Как сервер понимает, что к нему пришел запрос и вызывает метод SOAP-сервера? Может там есть какая-то глобальная переменная, которую он проверяет по достижению $server->handle();
сервер привязан к урлу , можно повесить на какой нить /lala/la/la/pu и будет там
2. Как клиент достает ответ? Он парсит XML ответа, который прилетает в ответ на вызов метода (процедуры удаленного веб-сервиса) и просто вытягивает данные из него?
18 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівА REST в PHP это не модно? :-)
Как уже неоднократно говорилось, нужно изучать актуальный материал — getjump.github.io/ru-php-the-right-way
А все эти допотопные рускоязычные видеокурсы только запутают и все равно придется после них переучиваться.
Не в тему но все же:
soap да на xml да еще под wsdl, это такое древнее о громоздкое творение что скорое всего пустая трата времени. imo конечно.
Если вы про курс Борисова, то у него есть и более новый вроде за 2013 год. И да WSDL еще актуален. Вообще советую внимательно посмотреть все. Из курсов «программирования» по PHP в русскоязычной среде этот наиболее полный и правильный в отличии от всяких поповых. Ну и как он там говорит, надо штудировать мануал.
Превратим dou в stackoverflow
Нужно понимать, что такое SOAP сервер и клиент. В общем случае их реализации абсолютно независимы. Может быть, например, сервер на PHP и клиент на браузерном JavaScript, может быть клиент на PHP и сервер на Java.
PHP класс SoapServer лишь обеспечивает преобразование тела SOAP-запроса в вызовы зарегистрированных в нём функций и методов, которое можно делать вручную. Приложение (или фреймворк) должны сами определить, что пришёл SOAP-вызов (например, по URL), осуществить его предварительную обработку, создать экземляр SoapServer и дернуть его метод handle(), чтобы вызвать нужную функцию или не создавать, а сделать всё самостоятельно.
PHP класс SoapClient прежде всего обеспечивает сам вызов, ответ может вернуть как нераспарсенный XML, так и как скаляр или массив скаляров.
примитивное значение: число, строка.
Литерал — текстовое представление значения. Например, [1, 2, 3] — полностью литерал массива из скаляров.
1. Класс SoapClient это просто удобная обвертка над работой со сторонним соап сервисом. Путь к wsdl что ты передаешь в конструкторе даёт твоему клиенту описание методов АПИ этого сервиса и задаёт типизацию параметров этих методов. Если в метод getStock отдать что-то заведомо невалидное, то запрос даже не уйдёт. А если все нормально, то уходит обычный хттп запрос с правильным XML в теле.
2. В переменной $result уже распарсенный ответ сервиса. Но у соап клиента есть методы для вытаскивания последнего запроса и ответа в чистом виде.
Да, у этого протокола недостаток в жёсткой типизации параметров. Но его часто можно встретить в платежных системах.
-