UNPKG

rest-api-handler

Version:
174 lines (173 loc) 5.55 kB
import { ProcessorAdapter } from './resolveProcessors'; import * as FORMATS from './data-formats'; declare type MethodType = 'GET' | 'POST' | 'DELETE' | 'HEAD' | 'OPTIONS' | 'PUT' | 'PATCH' | 'TRACE'; interface HeadersParameters { [key: string]: string | number; } /** * Class for handling responses and requests. */ export default class Api<ProcessedResponse = any> { /** * Base api url */ private apiUrl; /** * Base http headers */ private defaultHeaders; /** * Base settings for Fetch Request */ private defaultOptions; /** * List of processors that parse response from server. */ private processors; /** * List of formatter you can use to process content of body request. */ static FORMATS: typeof FORMATS; /** * Constructor. * * @param apiUrl - Base api url * @param processors - List of processors that parse response from server. * @param defaultHeaders - Base settings for Fetch Request * @param defaultOptions - List of processors that parse response from server. */ constructor(apiUrl: string, processors?: ProcessorAdapter[], defaultHeaders?: HeadersParameters, defaultOptions?: RequestInit); /** * Convert data in object to format of Fetch body. * * @param data - Data to convert * @param to - Format to which convert the data. Default is JSON. * @returns Converted data * * @example * const body = Api.convertData({ a: 'b' }, Api.FORMATS.JSON); * // output is {"a":"b"} */ static convertData(data: { [key: string]: any; }, to?: FORMATS.Format): string | FormData; /** * Convert object to url parameters string. * * @param parameters - List of parameters * @returns Encoded string with ? prefix and variables separated by & * * @example * const parameters = Api.convertData({ a: '%b%' }); * // output is ?a=%25b%25 */ static convertParametersToUrl(parameters: { [key: string]: any; }): string; /** * Set default headers. * * @param headers - HTTP headers */ setDefaultHeaders(headers: HeadersParameters): void; /** * Add default HTTP header. * * @param name - Name of header * @param value - Value for header * @example * api.setDefaultHeader('content-type', 'application/json'); */ setDefaultHeader(name: string, value: string): void; /** * Remove default header. * * @param name - Name of header */ removeDefaultHeader(name: string): void; /** * Get default headers. * * @returns Get Default headers */ getDefaultHeaders(): HeadersParameters; /** * Fetch API url. * * @protected * @param request - Fetch request * @returns Fetch response */ protected fetchRequest(request: Request): Promise<Response>; /** * Request given API endpoint. * * @param namespace - Api endpoint or full url * @param method - Request method eg. POST or GET * @param options - Fetch options * @param headers - Custom headers * @returns processed response * @example * const { data } = await api.request('ad', 'POST', { * body: '{"ad":1}' * }) * * const { data } = await api.request('http://i-can-request-full-url.com/?a=b', 'GET') */ request(namespace: string, method: MethodType, options?: RequestInit, headers?: HeadersParameters): Promise<ProcessedResponse>; /** * Send a request with body. * * @protected * @param namespace - api endpoint * @param method - api method * @param data - body JSON parameters * @param format - format of body request * @param headers - custom headers * @returns processed response */ requestWithBody(namespace: string, method: MethodType, data: Record<string, any>, format: FORMATS.Format, headers?: HeadersParameters): Promise<ProcessedResponse>; /** * Send a GET request. * * @param namespace - api endpoint * @param parameters - get parameters * @param headers - custom headers * @returns processed response * * @example * const { data } = await api.get('brand', { id: 5 }) * // will call YOUR_URI/brand?id=5 * console.log(data); */ get(namespace: string, parameters?: Record<string, any>, headers?: HeadersParameters): Promise<ProcessedResponse>; /** * Send a POST request. * * @param namespace - Api endpoint * @param data - Request object * @param format - Format of body request * @param headers - custom headers * @returns Processed response */ post(namespace: string, data?: Record<string, any>, format?: FORMATS.Format, headers?: HeadersParameters): Promise<ProcessedResponse>; /** * Send a PUT request. * * @param namespace - Api endpoint * @param data - Request object * @param format - Format of body request * @param headers - custom headers * @returns Processed response */ put(namespace: string, data?: Record<string, any>, format?: FORMATS.Format, headers?: HeadersParameters): Promise<ProcessedResponse>; /** * Send a DELETE request. * * @param namespace - Api endpoint * @param headers - custom headers * @returns Processed response */ delete(namespace: string, headers?: HeadersParameters): Promise<ProcessedResponse>; } export {};