Документація API
Кожен REST-вхід публікує два документи для кожної версії API. Вони містять лише методи групи й версії цього входу і його URL.
| Запит | Відповідь |
|---|---|
GET /rest |
Документ OpenAPI 3.1 |
GET /rest/postman |
Колекція Postman |
GET /rest/v2, GET /rest/v2/postman |
Те саме для версії API v2 |
GET /internal, … |
Те саме для входу групи API |
Якщо в налаштуваннях JsonRpcBundle protected_doc: true, ці запити потребують токена групи — див. Безпека.
Що потрапляє в OpenAPI
| Елемент | Джерело |
|---|---|
info.title, info.description |
ufo_json_rpc.docs.project_name, project_description |
info.version |
запитана версія API |
info.x-versions |
усі версії групи |
servers[0].url |
URL документа з поточного запиту |
servers[0].x-ufo |
envelope REST (RFC 9110, 9457)/UFO-REST-<версія пакета>, оточення, посилання на специфікації |
paths.<шлях>.<метод> |
одна операція на REST-маршрут |
operationId |
назва RPC-методу (catalog.item) |
summary, description |
назва й опис методу (див. нижче) |
tags |
псевдонім RPC-процедури |
deprecated |
@deprecated або #[\Deprecated] на методі |
parameters |
змінні шляху (in: path, обов'язкові) зі схемою параметра методу |
requestBody |
решта параметрів як JSON-об'єкт: обов'язковість, значення за замовчуванням, описи, типи, enum і посилання на DTO |
responses.200 |
схема типу результату |
responses.<статус> |
статуси помилок з @throws |
components.schemas |
DTO і enum, які використовують операції |
/**
* Returns an item by id
* @param int $id Item identifier
* @throws RpcDataNotFoundException
*/
#[Route('/items/{id}', name: 'item', methods: ['GET'])]
public function item(int $id): ItemDto
Тут @throws RpcDataNotFoundException дає відповідь 404 в операції: кожен виняток з @throws перетворюється за таблицею помилок, на кожен статус — одна відповідь. @throws \Throwable документується як RestApplicationException (400).
Змінні шляху документуються схемою свого параметра з 1.3; раніше — як string.
Колекція Postman
- Назва колекції —
REST: <project_name>, для групи, відмінної відgeneral, — з суфіксом[група](з 1.2). - Змінні
base_url(хост поточного запиту) іapiToken. - Запити згруповані в теки за RPC-процедурою; кожен названо його шляхом.
- Кожен запит має HTTP-метод маршруту, URL зі змінними шляху у форматі Postman (
/items/:id), заголовкиContent-Typeі токена та raw JSON-тіло з прикладами значень параметрів, крім змінних шляху.
Переклад назв і описів
З версії 1.3, потрібен JsonRpcBundle 10.4.
Назви й описи методів беруться з перекладів JsonRpcBundle — так само, як для документації RPC:
translations/rpc.<locale>.yaml # база, для всіх груп
translations/rpc/<group>.<locale>.yaml # перевизначення для групи API
# translations/rpc.uk.yaml
catalog.item:
title: Товар
description: Повертає товар за ідентифікатором
Теки розширень підключаються через ufo_json_rpc.translations.paths. Мова вибирається з Accept-Language серед мов, для яких є переклади (uk-UA дає uk); відповідь отримує Content-Language і Vary: Accept-Language.
| Поле OpenAPI | Значення |
|---|---|
summary |
перекладена назва; без назви — опис; без обох — назва RPC-методу |
description |
перекладений опис, якщо є назва |
Запити колекції Postman отримують перекладений опис.
Обмеження
- Документи генеруються на кожен запит; кешування з
ETag, як у документації RPC, немає. - Для
GET-методів параметри документуються як тіло запиту (requestBodyв OpenAPI, raw JSON у Postman), хоча бандл приймає їх і з query. - Для маршруту з кількома HTTP-методами документується лише перший.
Див. Актуальні помилки.