Подходы к REST API (rest / v1)
Схема API запроса к REST
/rest/v1/<CHAPTER>/<RESOURCE_PATH>
-
v1
– версия обратной совместимости раздела API; -
<CHAPTER>
– название раздела; -
<RESOURCE_PATH>
– путь в дереве ресурсов до endpoint’а, например/selectors/<SELECTOR_ID>/participants/<PARTICIPANT_ID>
.
-
Имена коллекций в множественной форме (анг. plural);
-
Коллекции всегда содержат элементы одного типа;
-
Использование HTTP Verbs для операций создания/чтения/обновления/удаления (CRUD).
POST коллекции
Создает новый ресурс в коллекции и возвращает его в ответ на запрос.
В качестве тела запроса передается новый создаваемый ресурс в формате JSON (Content-Type: application/json
) или JSON в параметре data (Content-Type: appication/x-www-form-urlencoded
).
Состав полей должен включать все обязательные поля и может включать идентификатор.
В качестве ответа возвращается созданный ресурс, включающий значения автоматически сгенерированных полей.
POST /rest/v1/<CHAPTER>/.../<COLLECTION> HTTP/1.1
Content-Type: application/json; charset=utf-8
<resource>
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
<resource>
GET коллекции
Возвращает список ресурсов из коллекции с ограниченным набором полей.
Может с помощью параметров быть дополнительно отфильтрован (filter
), отсортирован (order
), разделен на страницы (offset
, limit
), сужен состав возвращаемых полей (mask
), преобразован формат выдачи (flat
).
GET /rest/v1/<CHAPTER>/.../<COLLECTION> HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
[
<resource>,
<resource>,
...
]
Название | Тип значения | Описание |
---|---|---|
|
|
Фильтр элементов по значениям полей. Задается в виде json структуры. Примеры:
Поддерживает поисковые условия для строк:
Поддерживает поисковые условия для чисел:
Поддерживает поисковые условия для значений типа Для списочных полей использует критерий включения списка из фильтра в список из значения: Для объектных полей использует критерий соответствия указанных в фильтре значений полей значениям соответствующих полей объекта, допуская использование настоящих условий для указания строк, чисел, bool, списков и дочерних объектов. Альтернативно может использоваться формат фильтра, аналогичный /rest/v1/model.
|
|
|
Сортировка ресурсов в указанном порядке. Применяет последовательность полей, где по каждому определено направление сортировки, при совпадении значений применяет следующее поле. Примеры:
|
|
|
Список полей ресурса, подлежащих выдаче. По умолчанию выводятся все поля. Примеры:
|
|
|
Смещение при выдаче. Порядковый номер с нуля в отфильтрованном ( Пример:
|
|
|
Максимальное количество ресурсов, подлежащее выдаче из отфильтрованного ( Пример:
|
|
|
Преобразование в плоский вид: значения в виде набора опций раскрываются в вид ключей первого уровня: "opts":{"a":true,"b":10} => "opts.a":true,"opts.b":10 Пример:
|
|
|
При установке значения Пример возвращаемого значения:
{ "count": 5 } Пример: |
|
|
При установке значения Пример возвращаемого значения:
{ "id": "e7adf0aa-05b7-8163-948c-3392a9660db9", "name": "Administrator", "login": "admin", "pwd": "ha_v=1;0307030703070309BFB39B099674A...", "timezone": "default", "opts":{ "allow_script_crud": true, "roles":["admin", "crud", "scripteditor", "monitor"] } } Пример: |
GET ресурса
Возвращает конкретный ресурс. С помощью параметров может быть сужен состав возвращаемых полей (mask
) и преобразован формат выдачи (flat
).
GET /rest/v1/<CHAPTER>/.../<COLLECTION>/<ENTITY_ID> HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
<resource>
Название | Тип значения | Описание |
---|---|---|
|
|
список полей для вывода. Задается перечисление полей. Если параметр не указан будут выведены все поля. |
|
|
преобразование в плоский вид. |
PUT ресурса
Изменяет ресурс с указанным идентификатором в коллекции полной заменой. Идентификатор заменить невозможно.
В качестве тела запроса целиком передается новый ресурс.
Применяется в основном для размещения файлов с указанным именем.
PUT /rest/v1/<CHAPTER>/.../<COLLECTION>/<ENTITY_ID> HTTP/1.1
Content-Type: application/json; charset=utf-8
<resource>
POST /rest/v1/<CHAPTER>/.../<COLLECTION>/<ENTITY_ID>!put HTTP/1.1
Content-Type: application/json; charset=utf-8
<resource>
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
<resource>
PATCH ресурса
Изменяет ресурс с указанным идентификатором в коллекции частичным наложением. Идентификатор заменить невозможно.
В качестве тела запроса передается ресурс в формате JSON, содержащий только поля, которые нужно изменить.
В качестве содержания ответа возвращается новый ресурс со всеми полями.
PATCH /rest/v1/<CHAPTER>/.../<COLLECTION>/<ENTITY_ID> HTTP/1.1
Content-Type: application/json; charset=utf-8
<resource>
POST /rest/v1/<CHAPTER>/.../<COLLECTION>/<ENTITY_ID>!patch HTTP/1.1
Content-Type: application/json; charset=utf-8
<resource>
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
<resource>
DELETE ресурса
Удаляет ресурс с указанным идентификатором из коллекции. В содержании ответа ничего не возвращается.
DELETE /rest/v1/<CHAPTER>/.../<COLLECTION>/<ENTITY_ID> HTTP/1.1
POST /rest/v1/<CHAPTER>/.../<COLLECTION>/<ENTITY_ID>!delete HTTP/1.1
HTTP/1.1 204 No Content
Специфические методы
Выполняет указанный специфический метод над указанным ресурсом. Целевой ответ в формате JSON: значение, ресурс или коллекция. Параметры также специфические для каждого метода.
<CUSTOM_METHOD> /rest/v1/<CHAPTER>/.../<COLLECTION>/<ENTITY_ID> HTTP/1.1
Например, LOOKUP /rest/v1/iam/users HTTP/1.1
.
POST /rest/v1/<CHAPTER>/.../<COLLECTION>/<ENTITY_ID>!<CUSTOM_METHOD> HTTP/1.1
Например, POST /rest/v1/iam/users!lookup HTTP/1.1
.
-
lookup
– производит поиск ресурса в коллекции по ключевым (уникальным) указанным параметрам, возвращает идентификатор подходящего ресурса. Идентификатор используется в EndPoint ресурса.
Fallback запросы
Могут применяться в качестве дублеров при невозможности выполнения HTTP-методов PUT, PATCH, DELETE, HEAD.
Fallback url строится на основе endpoint’a с добавлением символа “!” после идентификатора ресурса или коллекции. Метод запроса – POST.
POST /rest/v1/<CHAPTER>/.../<COLLECTION>!<FALLBACK_SUFFIX> HTTP/1.1
POST /rest/v1/<CHAPTER>/.../<COLLECTION>/<ENTITY_ID>!<FALLBACK_SUFFIX> HTTP/1.1
-
FALLBACK_SUFFIX - целевой метод в нижнем регистре. Возможные значения:
-
put
– дляPUT
-
patch
– дляPATCH
-
delete
– дляDELETE
-
head
– дляHEAD
-
по аналогии для любых специфических методов (например,
SWITCH <EndPoint>
→POST <Endpoint>!switch
)
-
Content-type в запросах
-
multipart/form-data
иapplication/octet-stream
для файлов; -
application/json
для ресурсов; -
application/x-www-form-urlencoded
для ресурсов, предполагает наличие параметраdata
, содержащего целевой ресурс.
HTTP Verb | Content-Types |
---|---|
|
|
|
|
|
|
|
|
|
|
Схема API ответа REST
Формат ошибочного ответа
{
"error_code" : <INTERNAL_CODE>,
"error_message" : <INTERNAL_MESSAGE>,
"error_details" : <INTERNAL_DETAILS>
}
-
<INTERNAL_CODE>
- внутренний(системный) код ошибки (int). -
<INTERNAL_MESSAGE>
- описание ошибки (str). -
<INTERNAL_DETAILS>
- опциональный атрибут, содержащий дополнительные параметры ошибки (object), например{"field": "name"}
HTTP code | error_code | Описание |
---|---|---|
|
Ошибка в параметрах запроса |
|
|
|
Требуется аутентификация |
|
|
Доступ к ресурсу/endpoint запрещен |
|
|
Ресурс/endpoint не найден |
|
|
Ресурс уже существует |
|
|
Указанные параметры ресурса не могут быть применены |
|
|
Ошибка сервера при обработке запроса |
Content-type в ответах
-
application/json
для выдачи ресурсов, в том числе ошибки, и файлов.json
с соответствующим типом содержимого); -
application/octet-stream
для выдачи файлов в ответ на запрос на скачивание (с параметром GET-запроса attachment=1); -
прочие mime-types для выдачи файлов в соответствии с их расширениями.
HTTP Verb | Content-Types |
---|---|
|
|
|
|
|
|
|
|