Version: next
Валидации ответов сервера
Вы можете использовать валидации ответов сервера на основе трех типов проверок.
- Формат протокола (JSONRPCRequest)
 - Формат требований о возращаемом формате данных (RestRequest)
 - Клиентская валидация по - joi схемам или ваш кастомный коллбек для валидации ответа
 
Все проверки работают совместно и это делает ваше приложение чрезвычайно устойчивым к неправильным ответам и данным!
Если одна из этих проверок не удалась - весь ответ не будет выполнен со структурой ошибок по умолчанию.
JSON-RPC
Ваш ответ должен содержать эти поля в формате JSON по стандарту Поля result и error являются взаимоисключающими.
{
  jsonrpc, result, error, id;
}
RestRequest
{
  data, error, errorText, additionalErrors;
}
Ответ будет представлять из себя объект с полями:
- data - данные ответа (объект, если запрос прошёл успешно, если не успешно - null)
 - error - флаг состояния ошибки (всегда имеет тип boolean)
 - errorText - текст ошибки (пустая строка если запрос успешный)
 - additionalErrors - любые дополнительные данные с бекенда (для PureRestRequest это весь объект с данными об ошибке, для JSONRPCRequest это поле "errors.data" исходного ответа)
 - code - код состояния ошибки, всегда строка
 
Если код состояния ответа от сервера больше чем 500 - то данные ответа не будут парситься, а будет просто отдан на клиент код ошибки 500 и дефолтный объект данных ошибки Если ваш клиент находится в оффлайн - вы получите код 600 и можете обработать его как вам нужно (может быть полезно для оффлайн-режимов работы приложения)
RestRequest - не накладывает никаких ограничений на возращаемый формат данных
Валидации по схеме
import Joi from "joi";
import { RestRequest, IResponse } from "@mihanizm56/fetch-api";
const responseSchema = Joi.object({
  username: Joi.string().required(),
});
export const getWhateverRequest = (): Promise<IResponse> =>
  new PureRestRequest().getRequest({
    endpoint: "http://localhost:3000",
    responseSchema,
  });
Кастомная валидация
import Joi from "joi";
import i18next from "i18next";
import { RestRequest, IResponse } from "@mihanizm56/fetch-api";
const schema = Joi.object({
    username: Joi.string().required(),
})
export const getWhateverRequest = (): Promise<IResponse> =>
  new PureRestRequest().getRequest({
    endpoint: "http://localhost:3000",
    extraValidationCallback: (data: YourDataType) => {
      // здесь вы можете проверить ответ и вернуть boolean
      // проверка по схеме joi будет отключена
  });