Define and Call your restful APIs like a function.
This package is based on @single9/api-tester but use Axios instead of Request.
npm i @single9/api-wrapper
const ApiWrapper = require('@single9/api-wrapper');
const api = new ApiWrapper([ { name: '<Api Name>', // only allow certain words and digits path: '<Api Path>', // e.g. /api/posts method: '<HTTP Method>', // e.g. post or POST }, ], { configureAxios(axios){ // The axios you can add interceptors or global functions. }, baseUrl: '<Base URL of API>', // e.g. https://jsonplaceholder.typicode.com // Default: http://localhost:3000 headers: { // The headers you want to send. e.g. 'authorization': 'Bearer SAdoweasd...', }, auth: { // authorization username: 'username', password: 'password', } })
You can use factory function to dynamically set the base URL. This is useful if your host domain is a SRV record.
Example
const api = new ApiWrapper([ { name: '<Api Name>', // only allow certain words and digits path: '<Api Path>', // e.g. /api/posts method: '<HTTP Method>', // e.g. post or POST }, ], { baseUrl: async () => resolveSRV(process.env.API_HOST), });
api.<api_name>(params)
- api: Your
ApiWrapperinstance. - api_name: The name of the API that you set before.
- params: Compatible with axios request config
- queryString
- pathParams
Used for query string. e.g. /users?limit=100
api.test({ queryString: { key: value } })
api.test({ queryString: [ { name: string, value: string | number, } ] })
Used for path parameters. e.g. /user/:id
api.test({ pathParams: { key: value } })
api.test({ pathParams: [ { name: string, value: string | number, } ] })
const ApiWrapper = require('@single9/api-wrapper'); // Create your API schema const schema = [ { name: 'newPost', // this is your api function name path: '/posts', method: 'post', }, { name: 'getTodo', path: '/todos/:todoId', // path parameter method: 'get', }, ]; const api = new ApiWrapper(schema, { configureAxios(item){ item.interceptors.request.use( (request) => { console.log('url: %s , req: %o', request.url); return request; }, ) item.interceptors.response.use( (response) => { console.log('url: %s , res: %o', response.url, response.data); return response; }, ) }, baseUrl: 'https://jsonplaceholder.typicode.com', }); async function start() { try { const post = await api.newPost({ // Post Body data: { title: 'foo!!!!!!', body: 'bar!!', userId: 1 }, }); console.log(post.data); const get = await api.getTodo({ pathParams: { todoId: 2, // replace `:todoId` with value 2. }, }); console.log(get.data); } catch (err) { console.error(err); } } start();