Что делают интерфейсы V2 и WSI Magento SOAP? - PullRequest
1 голос
/ 04 ноября 2011

Magento имеет " API веб-сервисов ", доступный через SOAP и RPC.

Терминология здесь не в порядке, так как сам API-интерфейс SOAP (или RPC) предоставляет только 8 методов. Чтобы получить доступ к методу в API Magento, вы вызываете метод API SOAP call, а затем передаете строку, которая указывает метод, который вы действительно хотите вызвать (что-то вроде catalog_product.info)

За прошедшие годы команда Magento представила два дополнительных API-интерфейса, SOAP V2 и SOAP WSI. Эти бэкэнды были представлены «Для повышения совместимости с .NET и Java»

Что это значит, точно? С точки зрения кода эти API-интерфейсы изменяют предоставляемый WSDL, и при использовании PHP-клиента SOAP вся вещь call исчезает. Вы вызываете реальные методы на самом клиенте уходит

$client->call($session, 'catalog_product.info',...);

vs.

$client->catalogProductInfo($sessionId, ...

Мне никогда не было ясно, как это улучшает совместимость .NET или Java (потому что я не знаком с этими цепочками инструментов).

Является ли это просто удобством / культурой генерации кода или пользователям .NET и Java в буквальном смысле невозможно использовать оригинальный SOAP API?

Ответы [ 3 ]

3 голосов
/ 05 ноября 2011

Что было улучшением в целом?

Стандартные блоки службы 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-сервис, независимо от того, на каком языке вы их называете.

1 голос
/ 31 декабря 2011

Существует 105 API функций Magento SOAP v2, о которых вы должны знать, как их использовать и применять.Сначала перейдите к Magento SOAP , чтобы узнать, как создать клиент SOAP и войти в систему.Ознакомьтесь с довольно кратким описанием SOAP API v2 .Затем запустите следующий код из PHP CLI (через командную строку) или PHP CGI (через веб-браузер) соответствующего механизма сценариев.

$client = new SoapClient('http://mymagentohost/soap/api/?wsdl');
// If some SOAP APIs require API authentication, then get a session token
$session = $client->login('apiUser', 'apiKey');
foreach($client->__getFunctions() as $function)
    echo "function: $function".PHP_EOL;   // or .<br> if running the PHP from your Web browser

Вырежьте и вставьте список функций SOAP v2 API в текстовый файл и сохранитеЭто.Вы найдете, что список API будет иметь неоценимое значение, поэтому вам захочется иметь под рукой.

1 голос
/ 05 ноября 2011

Из того, что я знаю, по крайней мере в .NET с оригинальными, вы должны делать все вручную (так как нет WSDL-спецификации доступных методов), а с V2 вы можете использовать различные "мастера" и "импортеры WSDL", которыесоздаст прокси-классы с правильными типами данных и именами.Делает это намного проще для кода.Также существует проблема со сложными типами данных с оригинальными методами - с ними трудно работать напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...