# API configuration ## Why In the use of `redux` or `dva` projects, we often write functions like the following `service` layer to make the code structure clearer, but it is easy to see that we will write a lot of similar code in `antd -admin@5.0`, using the more concise configuration method to achieve the same function. ```javascript export async function login(data) {   return request({     url: '/api/v1/user/login',     method: 'post',     data,   }) } ``` ## Configuration and use In the `src/services/api.js` file, you will see the following configuration object, the object's key is used to call the function name, the object's value is the requested `url`, the default request method is `GET`, The format of the value of the other request mode object is `'method url'`. ```javascript export default {   ...   queryUser: '/user/:id',   queryUserList: '/users',   updateUser: 'Patch /user/:id',   createUser: 'POST /user/:id',   removeUser: 'DELETE /user/:id',   removeUserList: 'POST /users/delete',   ... } ``` Used in other files ```javascript import { queryUser } from 'api' // in the general file ... queryUser(option).then(data => console.log(data)) ... / / Model file ... yield call(queryUser, option) ... ``` ## Method to realize Refer to the `src/services/index.js` file to traverse the api configuration. Each property returns the corresponding encapsulated request function. ```javascript import request from 'utils/request' import { apiPrefix } from 'utils/config' import api from './api' const gen = params => {   let url = apiPrefix + params   let method = 'GET'   const paramsArray = params.split(' ')   if (paramsArray.length === 2) {     method = paramsArray[0]     url = apiPrefix + paramsArray[1]   }   return function(data) {     return request({       url,       data,       method,     })   } } const APIFunction = {} for (const key in api) {   APIFunction[key] = gen(api[key]) } module.exports = APIFunction ```