Стрімер
Документ "Стрімер" відповідає за роботу з http
запитами, які містять файли. Він визначає шляхи (маршрути) для обробки різних типів запитів і відповідних їм дій. Кожен маршрут описується в форматі
REST API
, що дозволяє чітко визначити структуру та тип запиту, а також обробник (контролер), який буде виконувати логіку
для цього маршруту.
Архітектура
При необхідності опису маршрутів з отриманням файлів, в предметній області необхідно створити документ "Стрімер" з переліком необхідних маршрутів.
Документ "Стрімер" повинен бути зареєстрований в документі "Реєстр" предметної області, який в свою чергу, має бути зареєстрований в відповідному сервісі, включеному до бізнес-схеми. Це гарантує, що при запуск у ядра обчислень будуть завантажені всі маршрути маршрутизатора. При виклику та виконанні конкретного обробника запиту ядро обчислень надасть актуальний знімок структури бізнес-схеми, де вже наявний опис кінцевого маршруту разом з його обробником.
Структура URL
Загальна маска url:
Метод: HTTP метод.
Шлях: {protocol}://${host}:${port}/{baseUrl}/:{service}/:${domain}/:${version}/:${endpoint}/:${dynamic-parameter-n}?{query-parameter-n}
Заголовки: Обʼєкт з переліком заголовків.
де:
protocol
- тип протоколу (обовʼязково).host
- назва хосту (обовʼязково).port
- номер порту (обовʼязково).baseUrl
- базовий маршрут, який описується в конфігурації сервера. За замовчуванням/v1/call/stream/
(обовʼязково).service
- назва сервісу (обовʼязково).domain
- предметна область (обовʼязково).version
- версія кінцевого маршруту (обовʼязково).endpoint
- назва кінцевого маршруту (обовʼязково).dynamic-parameter-n
- динамічні параметри (опціонально).query-parameter-n
- query параметри (опціонально).
- Приклад запиту користувача по його унікальному ідентифікатору:
GET
http://0.0.0.0:11001/v1/call/stream/BusinessAdmin/BusUsers/v1/get-one/f47ac10b-58cc-4372-a567-0e02b2c3d479
- Приклад запиту користувачів з сортуванням по даті створення записів та з лімітом в 5 записів.
Метод: GET
http://0.0.0.0:11001/v1/call/stream/BusinessAdmin/BusUsers/v1/find-many?order=desc&limit=5
Склад
Маршрут стрімера складається з опису деталей маршруту, лімітів попередньої обробки файлів та кінцевого обробника цього
маршруту. X-Fiber
фокусується на явному описі контролю над маршрутом надаючи можливість описувати схему валідації
вхідних параметрів маршруту. Такими елементами маршруту є динамічні параметри, query параметри та заголовки.
Загальна структура маршрутизатора
type HttpMethod =
| "GET"
| "POST"
| "PUT"
| "PATCH"
| "DELETE"
| "OPTIONS"
| "HEAD"
| "TRACE";
type AuthScope = 'public:route' | 'private:user' | 'private:system'
type Version = "v1" | "v2" | "v3" | "v4" | "v5" | string;
type RouteParams = {
name: string;
scope: "required" | "optional";
};
type HeaderParams = {
name: string;
scope: "required" | "optional";
};
type QueryParameter =
| "string"
| "string[]"
| "number"
| "number[]"
| "boolean"
| "boolean[]";
type QueryParams = {
name: string;
format: QueryParameter[];
scope: "required" | "optional";
};
type StreamLimits = {
fieldNameSize?: number;
fieldSize?: number;
fields?: number;
fileSize?: number;
parts?: number;
};
type StreamResponse = {
// ... response structure
}
type StreamHandler = (
...args // arguments
) => Promise<StreamResponse | void>
export type StreamStructure<S extends string = string> = {
[key in S]: {
scope?: AuthScope;
version?: Version;
method?: Pick<HttpMethod, 'GET' | 'POST' | 'PUT' | 'DELETE'>
params?: RouteParams[];
headers?: HeaderParams[];
queries?: QueryParams[];
limits?: StreamLimits
handler: StreamHandler;
};
};
де:
- Типи:
AuthScope
- перелік типів приватизації.Version
- тип версії.RouteParams
- тип динамічного параметра кінцевого маршруту.HeaderParams
- тип заголовка кінцевого маршруту.QueryParameter
- тип query параметра кінцевого маршруту.StreamHandler
- структура обробника запиту.StreamStructure
- структура документа "Стрімер".
- Структури обʼєкта маршруту:
key
- строкове представлення назви кінцевого маршруту.scope
- тип приватизації кінцевого маршруту.version
- версія кінцевого маршруту.method
- спрощений перелік можливихhttp
методів.params
- динамічні параметри, які передаються вurl
.headers
- заголовки, які передаються разом з запитом.queries
- query параметри, які передаються вurl
.limits
- опис лімітів на приймання файлів.handler
- обробник запиту.
X-Fiber
перевіряє назви кінцевих маршрутів, які не повинні мати слеш або крапку, а при потребі створення назви
кінцевого маршруту використовуйте slug або на худий кінець - camelCase
.
В разі наявності в кінцевому маршруті слешу або крапки ядро обчислень при завантаженні схеми видасть помилку з вказанням
на місце розташування кінцевого маршруту в бізнес-схемі.
Опис кінцевого маршруту складається з опису динамічних параметрів маршруту, query параметрів, заголовків, типу приватизації
та версії маршруту. X-Fiber
надає можливість валідації деталей маршрутизації, завдяки яким на етапі отримання запиту,
адаптер http
протоколу ядра обчислень проведене необхідні перевірки. Ліміти обробки файлів відносяться до логіки
попередньої обробки та входять до опису обробки запиту.
Деталі маршруту
Деталі маршруту складаються з:
http
метод обробки файлів (за замовчуваннямPOST
).- Версії кінцевого маршруту (за замовчуванням
v1
), - Типу приватизації (за замовчуванням
public:route
), - Динамічних параметрів (за замовчуванням пустий масив),
- Query параметрів (за замовчування пустий масив),
- Заголовки (за замовчуванням пустий масив).