Перейти к основному содержимому
Version: 3.9.x

Валидации ответов сервера

Вы можете использовать валидации ответов сервера на основе трех типов проверок.

  • Формат протокола (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 будет отключена
  });