Какой должен быть хml для Soap в PHP и как его обработать?
Добрый день!
Разбираюсь с SOAP сервисом и что то совсем запутался. У меня возник ряд вопросов. Буду признателен за разъязнения.
1. В каком формате отправляются запросы - xml или в виде конвертов soap? То есть самому ли надо формировать конверт или SoapClient в php из xml делает конверт.
2. Как делать валидацию xml документа. Знаю про xml schema, но не могу понять как она валидирует данные в xml и возвращает ошибку в случае некорректных данных.
3. Как происходит разбор SoapServer-ом данных из xml. Предположим мне нужно вызвать функцию func($id), где $id это в xml. Мне надо в ручную парсить файл и вставлять параметр в функцию или же SoapServer обладает какими то встроенными инструментами?
Ты делаешь сервер или клиент?
1) отправляется xml. Для отладки хорошо использовать прогу soapUI
2) сервер сам проанализирует что-то, что-то самосу нужно
3) соап сервер сам разберет и вызовет функцию с переданным id
Сергей, делаю и клиент и сервер. Нужно организовать обмен данными посредством Soap.
я для теста сделал так, что сервер разбирает xml функцией xml_to_obj. Хотя потом подумал какой смысл тогда Soap и навело на мысли, что делаю не правильно.
А как он преобразует данные xml в переменные? Обязательно надо описывать структуру данных в wsdl?
svisch, класс soapServer сам разбирает входящий xml и передаёт данные в пхп функцию (или метод). Как он это делает - не знаю, там в нем это всё зашито в ядре.
Wsdl обязателен. Но его можно и автоматически делать таким пакетом https://packagist.org/packages/piotrooo/wsdl-creator
Если ты подключаешься к кому-то, попроси у них готовый wsdl для твоей стороны, возможно они уже делали его сами
Сергей, в свое время делал конструктор wsdl на php через рефлектор: fragster.ru/wsfor1c проверено на в пхп 5.6, писалось когда 1с не умел нормально в REST :)
Вызывать результат из php с помощью SoapClient можно, а с SoapServer я не совсем разобрался, но за давностью лет уже не помню, в чем там именно было дело.
svisch, Плюс сказал Антон, только я не понял что такое "контракт", наверное строгость формата данных.
Рест намного проще, легко делается, не нужно всяких wsdl генерировать. Не нужно слать кучу лишней информации.