0.0.4 • Published 12 months ago
pyrobyte-api-manager v0.0.4
Это миниатюрная библиотека для внутренних нужд построенная поверх 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}
);