simple-axios-case-converter
Axios request/response object key case converts snake_case/camelCase.
Problem 😕
In many cases, the API's naming convention differs from JavaScript/TypeScript's(ex API is snake_case, JavaScript/TypeScript is camelCase), which means developers need to convert the case of object key.
Solution 😄
This library makes it easy for developers to convert case.
Features:
- Converts axios request
data
params
object keys into snake_case - Converts axios response
data
object keys into camelCase
With this library, you will be free from converting from camelCase to snake_case when making a request, and from converting from snake_case to camelCase in a response.
Installation
npm
$ npm install simple-axios-case-converter
yarn
$ yarn add simple-axios-case-converter
Usage
TypeScript
import axios, { AxiosResponse } from 'axios';
import axiosCaseConverter from 'simple-axios-case-converter';
interface User {
id: number;
firstName: string;
lastName: string;
fullName: string;
}
axiosCaseConverter(axios);
const res: AxiosResponse<User> = await axios.get('https://example.com/api/v1/me');
console.log(res.data);
axios.get('https://example.com/api/v1/todos', { params: { onlyComplete: true } });
axios.post('https://example.com/api/v1/address', {
countryCode: 'JP',
postalCode: '123-4567',
prefecture: 'Tokyo',
city: 'Shibuya'
});
axios.patch('https://example.com/api/v1/address/123', { postalCode: '123-4567' });
axios.delete('https://example.com/api/v1/address/123', { data: { addressId: 123 } });
JavaScript
ES Module
import axios from 'axios';
import axiosCaseConverter from 'simple-axios-case-converter';
axiosCaseConverter(axios);
const res = await axios.get('https://example.com/api/v1/me');
console.log(res.data);
axios.get('https://example.com/api/v1/todos', { params: { onlyComplete: true } });
axios.post('https://example.com/api/v1/address', {
countryCode: 'JP',
postalCode: '123-4567',
prefecture: 'Tokyo',
city: 'Shibuya'
});
axios.patch('https://example.com/api/v1/address/123', { postalCode: '123-4567' });
axios.delete('https://example.com/api/v1/address/123', { data: { addressId: 123 } });
CommonJS
Note that you should be require('...').default
.
const axios = require('axios');
const axiosCaseConverter = require('simple-axios-case-converter').default;
axiosCaseConverter(axios);
API
axiosCaseConverter: (axios, options)
-> { requestInterceptorId: number, responseInterceptorId: number }
options
Optional
Type: object
requestExcludeKeys
Optional
Type: Array<string | RegExp>
Exclude keys from being snake-cased at request params
and data
.
responseExcludeKeys
Optional
Type: Array<string | RegExp>
Exclude keys from being camle-cased at response data
.
Note
There is a library, axios-case-converter
, which provides similar functionality, but the differences from that library are as follows.
-
Simple
Various options can be specified for axios-case-converter
, but that is also the flip side of complexity.
This library is very simple and simply converts request(data
, params
) and response(data
) cases to sanke_case/camelCase.
-
No side effects
The axios-case-converter
overrides axios.defaults
, which may cause unexpected side effects.
This library is simpler and safer because it uses the interceptor
and does not rewrite the default config.
-
Easily remove the case conversion feature
Since axios-case-converter
overwrites axios.defaults
(axios instance default config), if you want to remove axios-case-converter
functionality, you need to update axios.defaults
again and will have a hard time.
Since this library uses interceptor
, you can easily disable the functionality of this library by eject
as follows.
const { requestInterceptorId, responseInterceptorId } = axiosCaseConverter(axios);
axios.interceptors.request.eject(requestInterceptorId);
axios.interceptors.response.eject(responseInterceptorId);
License
MIT licensed