0.0.4 • Published 12 months ago

pyrobyte-api-manager v0.0.4

Weekly downloads
-
License
ISC
Repository
-
Last release
12 months ago

Это миниатюрная библиотека для внутренних нужд построенная поверх ky

Установка

npm install pyrobyte-api-manager

или

yarn add

Использование

import { ApiManager, ErrorFactory } from "pyrobyte-api-manager";

type ErrorResponse = {
  message: string;
  errors: Array<string>;
};

const errorFactory = async (response) => {
  const result = (await response.json()) as ErrorResponse;

  return {
    message: "Some error message",
    errors: result.errors,
  };
};

// Должен быть в единственном экземпляре т.е. singleton
const apiManager = new ApiManager<ErrorResponse>(
  "https://jsonplaceholder.typicode.com/",
  errorFactory
);

type Post = {
  userId: number;
  id: number;
  title: string;
  body: string;
};

async function getPosts() {
  return apiManager.request<Array<Post>>("posts", {
    method: "get",
  });
}

//...

try {
  const response = await getPosts();

  setPosts(response.data);
} catch(async (e) => {
  if(e instanceof HTTPError) {
    const errorJson = await e.response.json();

    console.log(errorJson.error.message)
  }
})

Использование с кастомным storage

Например, может потребоваться в среде react-native. По умолчанию используется localStorage.

import { Storage } from "pyrobyte-api-manager";
import AsyncStorage from '@react-native-async-storage/async-storage';

const customStorage: Storage = {
  async getItem(key) {
    return await AsyncStorage.getItem('@storage_Key');
  },
  async setItem(key, value) {
    await AsyncStorage.setItem('@storage_Key', value);
  },
  async removeItem(key) {
    await AsyncStorage.removeItem(key);
  }
}
// Пример выше
const errorFactory = () => {}

const apiManager = new ApiManager<ErrorResponse>(
  "https://jsonplaceholder.typicode.com/",
  errorFactory,
  {storage: customStorage}
);