Adding REST API module
Prerequisites
Говоримо про практику? - Не забуваєм про теорію.
А також пасувало би почитати про тулзи, які ми використовуватимемо:
- Axios
- Наша обгортка над axios: api/axios
- Набір вже готових, дефолтних клієнтів-модулів для певних ендпоінтів: api/clients
- Дефолтні, реюзабельні штуки для роботи з апі: api/defaults
- axios interceptors: api/interceptors
- Трансформери для даних: api/transformers
REST API Module Interface
Обовʼязково, подивіться у секцію Interface api/clients.
Як додати Webitel SDK Endpoint модуль?
TLDR;
Піддивіться у souce code якогось з api/clients 🙂
Довгий та розумний шлях
Спершу, нам треба створити service з ApiFactory, наприклад
import { SomeEntityApiFactory } from 'webitel-sdk';
const service = new SomeEntityApiFactory(instance, '', openAPIConfig);Далі, у нас є вхідні параметри, які ми передаємо у метод апі модуля.
Це може бути params, itemInstance, changes, чи ше шось (знов таки, дивіться у інтерфейси)
Нам треба ці параметри якось "обробити", підготувати до відправки.
Для цього у нас є трансформери, в api/transformers. Вони, як пайплайн, обробляють вхідні параметри, і повертають оброблені.
Що нам зазвичай треба обробити?
(1) Як правило, перевести дані з того, що піде як body у snake_case з camelCase.
(2) Почистити непотрібні поля, адже бекенд їх не прийме і викине помилку.
(3) Зробити якісь кастомні трансформації з даними, специфічні саме для цього ендпоінта.
Як це виглядає?
const addItem = ({ itemInstance }) => {
const body = applyTransform(itemInstance, [
camelToSnake, // (1)
sanitize(fieldsToSend), // (2)
({ id, ...rest }) => ({
itemId: id,
...rest,
}), // (3)
]);
};Далі, ми викликаємо наш api метод
const addItem = async ({ itemInstance }) => {
// ...
const response = await service.add(body);
};Обробляємо відповідь, наприклад, дописуючи counter: 0
() => {
// ...
const item = applyTransform(response, [(item) => ({ ...item, counter: 0 })]);
};Ну і, обробляєм потенційну помилку
() => {
// ...
try {
// ...
} catch (err) {
throw applyTransform(err, [log]);
}
};Тонкощі
Як знайти необхідну мені ApiFactory, та її методи?
Щодо назви, ApiFactory - вона має бути така сама, як і у Webitel Swagger.
Щодо методів, Webitel SDK на TypeScript, тож IDE має підказати вам, які там є методи.
Зазвичай це:
getListцеsearch...,getцеread...,addцеcreate...,updateцеupdate...,patchцеpatch...,deleteцеdelete....
Де замість ... - назва сутності, з якою ми працюємо.
Як додати Raw Endpoint модуль?
Та в принципі, те саме що і з Webitel SDK ендпоінтом, тільки тут нам треба сформувати url, щоби зробити на нього запит, як
const baseUrl = '/entity';
async (id) => {
// ...
const url = `${baseUrl}/${id}`;
const response = await instance.get(url);
};TLDR;
Піддивіться у souce code якогось з api/clients 🙂
Довгий та розумний шлях
Тонкощі
Тут - немає. Берете, формуєте url'ку, викликаєте http метод, обробляєте відповідь.