Приемы описания документации API используя нотацию RAML

24.06.20

Интеграция - WEB-интеграция

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

Вводные

Нужно описать документацию на HTTP API, опубликовать в понятном заказчику и исполнителю виде.

 

Реализация

Для описания использую нотацию RAML (https://raml.org/), в результате получаю набор текстовых файлов которые удобно версионизировать в git. Для публикации использую формат HTML, .raml конвертирую в .hrml c помощью утилиты raml2html (https://github.com/raml2html/raml2html). С исходным текстом работаю используя Atom (https://atom.io/) и плагин API Workbench (https://atom.io/packages/api-workbench), в нем нормально работает автодополнение.

 

В средах разработки используется монофайл описания, что для меня не удобно (Обсуждение вопроса), проект из нескольких файлов можно собрать в один с помощью oas-raml-converter-cli (Ссылка на статью) более современный вариант webapi-parser (https://github.com/raml-org/webapi-parser).

 

Структура проекта

1. файл api.raml - корневой файл описания

2. папка dataTypes с описанием типов данных

3. папка resourceTypes с описанием типов ресурсов

4. папка securitySchemes - с схемами безопасности

 

Корневой файл

Обычно работаю с JSON форматом, поэтому в шапке описываю "mediaType: application/json", чтобы после в каждом ресурсе не уточнять.

Для всего API устанавливаю схему безопасности через "securedBy: token" (документация)

 
 Шапка api.raml

 

Ресурс по работе со справочниками описываю так:

 
 Ресурс product

Далее опишу из чего он компонуется и как на выходе получается CRUD описание

 

Типы данных

Все типы данных (схемы данных) организую в виде библиотеки и подключаю её в корневой файл

 
 Библиотека /dataTypes/library.raml
 
 Описание типа dataTypes/ProductType.raml

По умолчанию все реквизиты объектов "required: true", что отражается в публикации документации.

 

Если используются guid то добавляю тип, чтобы регулярные выражения заработали через параметр "pattern" не получилось, поэтому разместил в описании.

 
 Тип GUID

При размещении типа в корневом файле в файлах типов данных он может использоваться так:

 
 ProductType c parent тип GUID

 

При работе с объектом по API отправляю данные без идентификатора, получаю ответ с ним, для решения описания вопроса использую наследование объектов, добавляя нужные реквизиты к базовому типу

 
 Описание типа dataTypes/ProductResponseType.raml

 

Примеры типов данных

Обычно при разработке программисты запрашивают примеры. Их можно добавить в описание к типу, при публикации тип будет 

 
 Описание типа остатков
 
 Описание типа табличной части остатков
 
 Пример типа остатков

 

Типы ресурсов

Стандартный набор операций включает

  1. получение списка элементов, GET /
  2. получение элемента GET /{id}
  3. добавление элемента POST
  4. обновление элемента PUT /{id}
  5. удаление элемента DELETE /{id}

Описывать весь набор для каждого типа данных неудобно поэтому использую описание типов ресурсов (документация)

Использую описание для коллекции

 
 /resourceTypes/collection-item.type.raml

и для элемента

 
 /resourceTypes/item.type.raml

Подключаю в корневом файле

 
 подключение в api.raml

 

При ошибке поиска выдаю ответ 406, чтобы он не пересекался с 404, который может выдать сервер перед API и будет ложное срабатывание при схеме

Если GET /{id}=200 Тогда PUT /{id} Иначе POST / 

Формат ответа об ошибке один и тот же поэтому использую для этого отдельный тип

 
 /dataTypes/ResponseType.raml

 

Для использования имени url для получения типа данных использую "<<resourcePathName" (документация)

В результате состыковки будет подключен тип

properties:
   result:
   type: array
   items: DataLib.productResponse

 

Особенности

Для некоторых ресурсов нужна пагинация или фильтрация, её можно организовать в traits (особенности) (документация)

 
 Особенность фильтрации и пагинаци

и подключить её в ресурсе

get:
    is:  [filtered]

 

Итог

В результате компоновки инструментов можно быстро и качественно писать документацию на HTTP API и опубликовать

 
 Внешний вид опубликованного API
 
 Внешний вид описания ресурса

 

Благодарю за внимание.

RAML API

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16220    14    18    

14

Интеграция 1С и Битрикс 24 — модуль синхронизации для обмена задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18378    10    15    

16

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    13068    34    8    

13

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

25200 руб.

28.05.2015    85669    26    51    

50

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16708    43    49    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Steelvan 303 24.06.20 13:14 Сейчас в теме
Все эти технические форматы далеки от обычного человекочитаемого восприятия.

Вот например два похожих продукта (компонента для веб-гнезд) от разных разработчиков.

Бесплатная libwebsockets
https://libwebsockets.org/lws-api-doc-v4.0-stable/html/modules.html

Платная
https://cdn.nsoftware.com/help/IWF/bcb/

---

Да я лучше 30 000 заплачу сверху, но зато получу нормальную человекочитаемую доку.
Разбираться в бесплатном варианте буду дольше, чем эту 30-ку заработаю => время деньги.
2. malikov_pro 1302 24.06.20 13:24 Сейчас в теме
(1) В итогах показал внешний вид для "обычного человекочитаемого восприятия", конвертация делается утилитой через командную строку (у меня в проектах bat файлы для этого).
Примеры
https://www.sima-land.ru/api/v3/help
https://api.samsonopt.ru/v1/doc/index.html#api-v1-0-0
сформированы из OpenAPI (swagger).

Подобное можно формировать и из RAML https://docs.api-console.io/

У вас в примере WebSocket, у меня HTTP, разные протоколы и инструменты описания.
Оставьте свое сообщение