mirror of
https://github.com/zuiidea/antd-admin
synced 2026-10-21 15:04:26 +00:00
86 lines
1.8 KiB
Markdown
86 lines
1.8 KiB
Markdown
# 接口配置
|
|
|
|
## 为什么
|
|
|
|
在使用了`redux`或者`dva`项目中,我们经常会写类似下面的`service`层的函数,使代码结构更清晰,但是很容易看出,我们会写很多相似的代码,在`antd-admin@5.0`中,使用了更加简洁的配置方式实现了相同的功能。
|
|
|
|
```javascript
|
|
export async function login(data) {
|
|
return request({
|
|
url: '/api/v1/user/login',
|
|
method: 'post',
|
|
data,
|
|
})
|
|
}
|
|
```
|
|
|
|
## 配置和使用
|
|
|
|
在`src/services/api.js`文件中,你会看到如下配置对象,对象的键用于调用时的函数名称,对象的值为请求的`url`,默认请求方式为`GET`,如果是其他请求方式对象的值的格式则为`'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',
|
|
...
|
|
}
|
|
```
|
|
|
|
在其他文件中使用
|
|
|
|
```javascript
|
|
import { queryUser } from 'api'
|
|
|
|
// 一般文件中
|
|
...
|
|
queryUser(option).then(data => console.log(data))
|
|
...
|
|
|
|
// model文件中
|
|
...
|
|
yield call(queryUser, option)
|
|
...
|
|
```
|
|
|
|
## 实现方式
|
|
|
|
参考`src/services/index.js`文件,对api配置进行遍历,每个属性都返回对应的封装后的request函数。
|
|
|
|
```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
|
|
|
|
``` |