SOAP, генерация прокси класса

    Преамбула:

    SOAP — протокол обмена структурированными сообщениями в распределённой вычислительной среде. Первоначально SOAP предназначался, в основном, для реализации удалённого вызова процедур (RPC), а название было аббревиатурой: Simple Object Access Protocol — простой протокол доступа к объектам. Сейчас протокол используется для обмена произвольными сообщениями в формате XML, а не только для вызова процедур. Официальная спецификация последней версии 1.2 протокола никак не расшифровывает название SOAP. SOAP является расширением протокола XML-RPC.


    Итак, делаем proxy-class


    Так вот, столкнулся с задачей, где нужно использовать вебсервис.
    Вообще говоря разработчики рнр5 максимально упростили работу с сервисом.
    Ввели SoapClient и использовать проще простого.
    <?
    $cl = new SoapClient("wsdl");
    $cl->functionname();
    ...

    Все ничего, но надо знать имена функции это раз.
    Второе, программируя в какой-нить IDE есть автокомлит, который показывает функции класса
    Я начал копать в сторону этого, потому как на память помнить функции глупо.

    Но к сожалению ничего не нашел.
    Порылся в pear но там по сути нет ничего чтобы мне помогло.

    В итоге решил написать скрипт, который бы на основании заданного WSDL создает класс с методами, параметрами и phpDoc для удобства.

    Для примера задаем простейший WSDL файл и посмотри как бы делали просто и через генератор класса.

    Обычно мы пишем (пример взят отсюда):
    <?
    $cl = new SoapClient("http://www.freewebs.com/jimmy_cheng/CurrencyExchangeService.wsdl");
    echo $cl->getRate("us", "russian");
    ?>


    Удобно, не вопрос. Но узнать ВСЕ функции WSDL тяжко.

    А теперь прогоним этот же wsdl и получим класс.
    В итоге получили:

    Удобно? Да. Причем эта фича есть давно в VS.

    А вот для примера задаем WSDL для проверки валидности email
    $WSDL = "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx?wsdl";

    а в IDE получился вот такой комплит


    Не знаю как вам, а мне этой фичи нехватает.

    Уважаемый ALL, подскажите, возможно я создаю велосипед, но я не встречал создания прокси-класса на РНР? Есть ли такой инструмент?
    Потому что на данный момент приходится доделывать скрипт и придумывать костыли чтобы все работало хорошо.

    Спасибо за внимание, жду ответов — Имеет ли смысл двигаться в этом направлении? или уже есть такое?
    Кросспост

    UPD WSDL ws.cdyne.com/emailverify/Emailvernotestemail.asmx?wsdl содержит больше функций, я знаю, но в силу того, что РНР не поддерживает перегрузку функций, то в данный момент я игнорирую повторы. В дальнейшем введу fucn1, func2, func3 которые будут по сути func но с разными параметрами. Спасибо за понимание
    Share post

    Comments 17

      +4
      Как это не поддерживает? php.net/__call
        0
        Это да, но я генерирую класс и там пишится
        public function(param, param, ...)

        я насчет этого говорю.

        + разное количество параметров соответственно разное описание получается
          0
          sorry, ночь
          public function name(param, param,...)
        0
        RPC побыстрей будет
          +2
          Ассемблер вообще самый быстрый.
          0
          Я чет не понял.

            +2
            zs_soap.JPG - Picamatic - upload your images
            +1
            велосипед: wsdl2php, WSDLInterpreter. причем они генерируют не только методы и доки, а еще и классы описанные в WSDL
              0
              а разве wsdl2php занимается не тем же самым?
              wsdl2php.sf.net
                0
                Во! Спасибо!

                то что надо!!!
                0
                Как то мне так кажется, что наоборот, на основе php-класса обычно генерят wsdl, а не наоборот…
                  0
                  в пхп еще не юзал, но в яве именно так. Сначала генеришь wdsl из классов для сервера. Когда пишешь клиента генеришь классы(proxy) из wdsl и используешь. Так что думаю тут тоже самое.
                    0
                    Совершенно верно. Вторая операция wsdl->php опциональна и выполняется исключительно ради удобства.
                  0
                  Наверное глупый вопрос, но подскажите, что за IDE на скриншотах?
                    0
                    автор упоминал VS, скорее всего это оно и есть
                    MS Visual Studio
                      0
                      нет, на скриншотах netbeans 6.5
                        0
                        Спасибо за ответ.

                  Only users with full accounts can post comments. Log in, please.