API - это запросы к серверу, обычно, по принципу REST для получения данных и выполнения операций с ними.
Функции API используются в экшенах состояния (store). Из контейнеров и других мест они не вызываются.
HTTP запросы выполняются библиотекой axios
.
Все запросы к API описываются соответствующими функциями в директории /api
. Они используются в экшенах.
Функции API сгруппированы в поддиректории (файлы) по названиям ресурсов (моделей данных).
Используются классы, чтобы наследовать типовые наборы функций API. Например, типовой набор представляет CRUD операции к ресурсу через методы HTTP — POST, GET, PUT, DELETE (иногда PATCH и HEAD). Могут быть другие типовые API.
Для интеграции с несколькими API (разных серверов) нужно создавать соответствующее количество отдельных директорий /api*
.
import params from '@src/utils/query-params';
import Common from '@src/api/common';
/**
* API пользователей с наследованием CRUD методов и добавлением кастомных
*/
export default class Users extends Common {
/**
* @param api {AxiosInstance} Экземпляр библиотеки axios
* @param path {String} Путь в url по умолчанию
*/
constructor(api, path = 'users') {
super(api, path);
}
/**
* Авторизация
* @param login
* @param password
* @param remember
* @param fields
* @param other
* @returns {Promise}
*/
login({ login, password, remember = false, fields = '*', ...other }) {
return this.http.post(
`/api/v1/users/sign`,
{ login, password, remember },
{ params: params({ fields, ...other }) },
);
}
/**
* Выход
* @returns {Promise}
*/
logout() {
return this.http.delete(`/api/v1/users/sign`);
}
}
Вызов API
import * as api from '@src/api';
//...
const response = await api.users.login(data);