Статьи

Настройка JBoss apiman через плагины политики

Это вторая из серии статей, посвященных управлению API с помощью JBoss apiman. Первая статья ( http://java.dzone.com/articles/impatient-new-users ) была общим введением в apiman для нетерпеливых пользователей, где всего за 10 минут мы установили apiman, создали пользователей и организации, а также службы, политики, контракты и заявки. В этой статье мы сделаем первый шаг к настройке apiman, создав новые плагины для реализации политик обслуживания.

Важной новой функцией, добавленной в выпуске 1.0.2 apiman ( http://www.apiman.io/ ), является возможность расширять его возможности с помощью пользовательской инфраструктуры плагинов. Поскольку политики выполняют наиболее важные операции времени выполнения apiman, плагины, позволяющие создавать новые политики, являются первым типом поддерживаемых плагинов.

В этой статье мы рассмотрим все шаги, которые необходимо выполнить, чтобы создать новый плагин политики, а затем импортировать его в apiman и настроить службу для его использования.

Предпосылки

В этой статье мы предполагаем, что вы выполнили все шаги, описанные в первой статье этой серии. Первая статья поможет даже самому нетерпеливому пользователю установить и использовать apiman.

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

Как и все программное обеспечение JBoss, apiman предоставляет работающий пример кода, который вы можете использовать в качестве отправной точки для своих собственных плагинов. Самый простой способ создать и упаковать apiman — это стандартный проект maven, упакованный в файл .war.

Чтобы загрузить копию примеров плагинов, выполните команду git:

git clone https://github.com/apiman/apiman-plugins

Когда операция git clone завершится, у вас будет исходный код для нескольких примеров плагинов. Точный набор плагинов, которые вы скачали, может меняться в зависимости от того, когда вы их загружаете, так как всегда добавляются новые примеры. Для целей этой статьи мы сосредоточимся на примере плагина «config-policy». Этот плагин демонстрирует, как можно использовать плагин для установки значения свойств в сообщении, обрабатываемом службой. В частности, этот плагин определяет свойства в заголовках запроса и ответа и позволяет устанавливать их значения в «true».

Требования к реализации плагина

Самый простой способ сборки и упаковки плагина политики apiman — это стандартный проект maven, упакованный в файл .war. Для преобразования .war в плагин требуется всего несколько модификаций.

Давайте внимательнее посмотрим на файлы и каталоги, которые составляют плагин apiman config-policy, и изменения, необходимые для реализации плагина:

├---pom.xml
└---src
└---main
├---apiman
│  ├---plugin.json
│  └---policyDefs
│    ├---config-policyDef.json
│    └---schemas
│  └---config-policyDef.schema
└---java
└---io
└---apiman
└---plugins
└---config_policy
├---ConfigBean.java
└---ConfigPolicy.java

Самым очевидным отличием является добавление каталога «apiman». Этот каталог используется, чтобы содержать файлы конфигурации для плагина. (Другими словами, файлы, которые делают проект плагином.) Единственное изменение конфигурации всего проекта, которое вам нужно сделать, — это изменить файл maven pom.xml плагина, включив в него каталог apiman при сборке проекта. Следующие строки добавляются в файл плагина pom.xml:

<resource>  
    <directory>src/main/apiman</directory>  
    <targetPath>META-INF/apiman</targetPath>  
    <filtering>true</filtering>  
</resource>  

Результатом этих операторов в файле pom.xml является то, что содержимое каталога apiman включено в каталог META-INF сборки проекта. (Мы рассмотрим это позже, когда создадим проект плагина.) Если для фильтра задано значение true, расширение свойств maven будет включено во время создания файла войны плагина.

Файлы конфигурации для плагина находятся в каталоге apiman. Основной файл конфигурации — это файл «plugin.json». Этот файл необходим для всех плагинов apiman, независимо от типа плагина. Метаданные, содержащиеся в этом файле, описывают плагин и отображаются в интерфейсе API Manager.

Поскольку наш пример представляет собой политику, он должен содержать файл JSON, который определяет политику. Этот файл JSON содержится в каталоге apiman / policyDefs и называется «config-policyDef.json». Этот файл определяет следующие поля для политики:

  • id — уникальный идентификатор для политики
  • name — понятное для пользователя (другими словами, удобочитаемое) имя для политики. Это имя политики отображается в интерфейсе API Manager.
  • описание — описание политики
  • policyImpl — это полное имя класса Java-класса, которое фактически реализует политику. Это значение должно быть правильно отформатировано, чтобы включать информацию о плагине, включая заполнители для свойств maven, например, версию проекта.
  • icon — это имя значка Font Awesome ( http://fortawesome.github.io/Font-Awesome/ ), который отображается для политики в пользовательском интерфейсе API Manager.
  • formType — Тип формы пользовательского интерфейса конфигурации политики. В нашем примере используется JsonSchema.
  • Форма — это относительный путь к форме пользовательского интерфейса конфигурации политики, содержащейся в плагине. В наших примерах используется схема JSON, которая определяет формат данных конфигурации. (Подробнее об этом файле через минуту.

В нашем примере config-policyDef.json выглядит так:

{  
  "id" : "config-policy",  
  "name" : "Config Policy",  
  "description" : "A policy used to showcase policy configuration.",  
  "policyImpl" : "plugin:${project.groupId}:${project.artifactId}:${project.version}:${project.packaging}/io.apiman.plugins.config_policy.ConfigPolicy",  
  "icon" : "sliders",  
  "formType" : "JsonSchema",  
  "form" : "schemas/config-policyDef.schema"  
}  

Мы упоминали, что, поскольку в нашем примере используется схема JSON ( http://json-schema.org/documentation.html ), мы также должны определить формат данных конфигурации. Это делается в файле policyDefs / schemas / config-policyDef.schema. Этот файл определяет формат, используемый в данных файла конфигурации политики, и используется пользовательским интерфейсом API Manager для создания формы, которая используется для заполнения значений, которые будут использоваться для настройки политики. В нашем примере схема JSON политики определяет два свойства: requestHeader и responseHeader.

{  
  "title" : "Configure HTTP Headers",  
  "description" : "Set the HTTP request header to populate with the value 'true' when the request is made. Also set the HTTP response header to populate with the value 'true' after the response is received from the back-end service.",  
  "type" : "object",  
  "properties": {  
   "requestHeader": {  
    "title" : "Request Header",  
    "type" : "string",  
    "minLength" : 1,  
    "maxLength" : 64  
   },  
   "responseHeader": {  
    "title" : "Response Header",  
    "type" : "string",  
    "minLength" : 1,  
    "maxLength" : 64  
   }  
  }  
}  

На этом описание файлов конфигурации политики заканчивается. Чтобы завершить плагин политики, в примере также требуется реализация Java для самой политики. Реализация политики содержится в файле src / main / java / io / apiman / plugins / config_policy / ConfigPolicy.java. Политика очень проста, поскольку она просто добавляет заголовок к http-запросу и ответу.

Классы Java-политики должны реализовывать интерфейс API-интерфейса apiman. Этот пример продвигает этот шаг дальше, фактически расширяя класс io.apiman.gateway.engine.policies.AbstractMappedPolicy. Таким образом, код Java политики может использовать преимущества класса AbstractMappedPolicy, используемого JSON-анализатором Джексона ( https://github.com/FasterXML/jackson ) для анализа данных конфигурации политики в компонент Java. (В этом примере bean-компонент реализован в src / main / java / io / apiman / plugins / config_policy / ConfigBean.java.) Если политика реализует интерфейс IPolicy, вместо расширения AbstractMappedPolicy, то класс Java политики должен реализовать свой собственный парсер.

Сборка плагина и его установка в репозиторий Maven

Создать плагин с Maven легко. Просто выполните эту команду из каталога, содержащего файл плагина pom.xml.

mvn install

Если вам интересно, почему, мы устанавливаем плагин в репозиторий Maven. Ответ прост: в текущем выпуске apiman единственный поддерживаемый путь установки — из репозитория maven. Будущие выпуски apiman, вероятно, будут поддерживать дополнительные пути установки.

Установка плагина в apiman

В apiman плагин политики, после его установки, доступен для всей системы. Соответственно, плагины могут быть установлены только администратором. После того, как вы войдете в систему как администратор, вы увидите это в интерфейсе администратора:

apiman-1.png

После выбора «Управление плагинами» вы увидите экран, который выглядит следующим образом:

apiman-2.png

И если вы затем выберите «Добавить плагин», вы увидите этот экран:

apiman-3.png

Информация о GroupId, ArtifactId и Version доступна в файле pom.xml примера плагина:

  • GroupId: io.apiman.plugins
  • ArtifactId: apiman-plugins-config-policy
  • Версия: 1.0.3-SNAPSHOT

После того, как вы введете эту информацию для плагина и нажмете «Добавить плагин», вы увидите это в пользовательском интерфейсе:

apiman-4.png

Поздравляем! Плагин установлен и готов к использованию! Давайте добавим его в сервис и посмотрим в действии.

Использование установленного плагина

Сначала мы должны выйти из учетной записи администратора в интерфейсе администратора, а затем снова войти в систему как поставщик услуг «serprov». Затем выберите наш сервис «echo» и создайте новую версию сервиса, основанную на оригинальной версии сервиса:

apiman-6.png

И когда вы добавите новую политику в службу, вы увидите пример службы конфигурации, которую мы только что установили:

apiman-5.png

При выборе политики конфигурации вы увидите диалоговое окно, в котором вы можете указать значения для двух свойств, определенных в политике:

apiman-7.png

Давайте заполним некоторые легко запоминающиеся значения:

apiman-8.png

После добавления политики вы увидите ее в политиках, определенных для службы:

apiman-9.png

Тогда опубликуйте сервис. Чтобы использовать службу, войдите в интерфейс API Manager в качестве разработчика приложения «appdev» и создайте новое приложение, которое использует новую службу. (Мы подробно рассмотрели создание новых приложений в первой статье этой серии — http://java.dzone.com/articles/impatient-new-users )

И когда служба вызывается, вы увидите что-то вроде этого:

apiman99.png

И это:

apiman100.png

В заключении

Хорошо, давайте подведем итоги. apiman — быстро развивающийся и развивающийся проект. Каждый новый выпуск приносит новые функции. В версии 1.0.2 стало возможным добавлять пользовательские политики в свои установки apiman через интерфейс API Manager.

Подтверждения

Как всегда, автор хотел бы поблагодарить Эрика Виттманна за его (никогда не терпеливый) обзор комментариев и предложений по написанию этого поста, а также за добавление новых функций в apiman!

Рекомендации

Первая статья в этой серии — http://java.dzone.com/articles/impatient-new-users