Что было улучшением в целом?
Стандартные блоки службы SOAP, описанные WSDL, примерно такие:
Контракт: указан в wsdl: portType, wsdl: message и wsdl: type, описывающие операции, а также сообщения и типы, с которыми они работают.Итак, это говорит: Что может делать служба?
Привязка: Привязка wsdl: привязывает wsdl: portType к конкретному транспорту, стилю документа, политикам,и т.д. Это говорит: Как разговаривать с сервисом?
Адрес: wsdl: раздел сервиса связывает wsdl: привязку к конкретному адресу конечной точки сервиса.Это отвечает: Где находится служба?
Вышеупомянутые пункты являются более или менее основополагающим принципом Windows Communication Foundation (WCF).
Таким образом, первый подход RPC к magento был просто злоупотреблением протоколом SOAP.Каждый запрос, проходящий через замочную скважину нескольких функций ввода, имеет в качестве полезной нагрузки сообщения другой обернутый протокол RPC.Таким образом, SOAP просто использовался в качестве транспорта сообщений, как, например, SOAP.HTTP-POST.Чтобы контракт был действительным, он должен быть либо очень сложным (огромное количество возможных сообщений), либо очень общим (просто строка).Контракт становится намного проще, если у каждого метода / операции есть собственное объявление.Это то, что делает API V2.
Но почему это также большое улучшение для статически типизированных языков, таких как Java или C #?
Как упоминалось в macki, есть инструменты (генераторы прокси и т. Д.)и фреймворки (такие как WCF или JAX-WS) для этих языков.Они генерируются в зависимости от вышеупомянутых объектов передачи данных контракта (DTO) для типов сообщений и прокси для вызова метода (они делают намного больше, но это не важно здесь).Как вы видите в Magento Wiki на C # magento soap v2 api , создается объект-фильтр и прокси-метод salesOrderList.Хорошая часть контракта основана на статической типизации метода и его параметров.Если бы вы использовали методы замочной скважины V1, вам пришлось бы самостоятельно создавать сообщения для удовлетворения контракта в более произвольной структуре данных, такой как строка, массив строк или словарь строк.
Так что, конечно, возможно использовать старый API из статически типизированных языков, это не правильно.Гораздо лучше иметь тип для каждого типа сообщения и статически типизированную подпись прокси операций.Кроме того, V2 также лучше SOAP-сервис, независимо от того, на каком языке вы их называете.