rest-api-handler
Version:
Handler for REST APIs
174 lines (173 loc) • 5.55 kB
TypeScript
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 {};