- PVSM.RU - https://www.pvsm.ru -

Swagger в Magento 2

Тенденция перехода от сборки HTML-страниц на стороне сервера к их сборке на стороне клиента уже даже не тенденция, а тренд. Magento 2, шагая в ногу со временем в меру своих возможностей, также пытается быть в тренде [1], разнося обработку данных и их представление. Как простому разработчику заглянуть в "чистые" данные, если их представление вынесено достаточно далеко? Есть множество других хороших решений (начиная c tcpdump [2]), и есть swagger [3].

image

Swagger достаточно хорошо интегрирован в Magento 2 (если только вам в голову не пришла дурацкая затея изменить код для "default" витрины). Все, что нужно для того, чтобы начать разглядывать "чистые" данные в Magento 2 с точки зрения удаленного приложения — использовать интегрированный в нее Swagger. В данном материале я не рассматриваю особенности использования самого Swagger'а, а просто привожу пример того, как использовать Swagger, интегрированный в Magneto 2, в режиме анонимного пользователя и в режиме аутентифицированного пользователя.

Доступ к сервисам

Я развернул простой Magento-модуль [4] по адресу http://module.sample.flancer32.com/ [5]. Чтобы начать использовать Swagger в режиме анонимного пользователя нужно перейти по адресу http://module.sample.flancer32.com/swagger [6] Сначала загружается само Swagger-приложение (быстро), а затем идет загрузка описания web-сервисов, реализованных в Magento (медленно):

image

JSON-схему сервисов Magento можно вытянуть и самому по ссылке: http://module.sample.flancer32.com/rest/default/schema?services=all [7]

Анонимные запросы

После разбора схемы Swagger формирует список сервисов, доступных анонимному клиенту:

image

и позволяет не только изучать в человекочитаемом виде сами сервисы:

image

… но и формировать запросы:

image

… и анализировать ответы:

image

Доступ к ограниченным сервисам

Для начала нужно сделать в Magento отдельного пользователя (использовать административную учетку для доступа к сервисам — не самая хорошая идея):

image

и назначить ей права доступа (User Roles):

image
Вернее, сначала делается роль, а потом, при создании, она назначается новому пользователю. Предоставлять все права через роль — тоже не самая хорошая идея, но ведь и я не идеален. Поэтому в нашем примере пользователю "swagger" назначена роль "Swagger", которой предоставлены права на доступ к любым ресурсам.

Аутентификация через web-интерфейс не предусмотрена, может быть когда-нибудь кто-нибудь и допилит этот момент в Magento 2, но пока что аутентифицироваться приходится вручную: через свой любимый универсальный REST API клиент, через программный код или через "curl":

curl -X POST "http://module.sample.flancer32.com/rest/V1/integration/admin/token" 
     -H "Content-Type:application/json" 
     -d '{"username":"swagger", "password":"0jul4san0lRLKjYQpCqx"}'

Все, что нужно сделать — отправить определенный JSON-текст с параметрами аутентификации на определенный адрес (не забыв про заголовок с типом содержимого запроса). В ответ придет сессионный код для доступа к ограниченным сервисам:

"f6j0arlp29vx8i3av9l3eu5sag2pb5qy"

Код придет в кавычках, но использовать его нужно без.

Ну вот, теперь, имея код, мы вводим его в соответствующее поле:

image

… и получаем доступ к уже более широкому списку сервисов. Например, к такому:

image

Дальнейшая работа с сервисами ничем не отличается от работы в режиме анонимного пользователя. Сессионный ключ для авторизации добавляется Swagger'ом автоматически:

image

Заключение

Swagger — замечательный инструмент, замечательно интегрированный в замечательную платформу Magento 2. Разрабатывать web-сервисы с таким инструментарием — одно удовольствие.

Автор: flancer

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/json/221825

Ссылки в тексте:

[1] быть в тренде: https://www.google.lv/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=headless%20magento%202

[2] tcpdump: https://ru.wikipedia.org/wiki/Tcpdump

[3] swagger: http://swagger.io/

[4] простой Magento-модуль: https://github.com/flancer32/sample_mage2_module

[5] http://module.sample.flancer32.com/: http://module.sample.flancer32.com/

[6] http://module.sample.flancer32.com/swagger: http://module.sample.flancer32.com/swagger

[7] http://module.sample.flancer32.com/rest/default/schema?services=all: http://module.sample.flancer32.com/rest/default/schema?services=all

[8] Источник: https://habrahabr.ru/post/317770/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best