# api

## 介绍

api 文件夹存放与接口相关的封装，所有与接口相关的调用必须在此维护，不允许直接调用 axios 来请求接口。

### 结构

文件夹创建规则与 yapi 中的结构保持一致，每一个业务创建独有的文件夹，内部包含封装后的接口方法以及 model。

### 接口方法

#### 命名规范

##### 命名

命名规则为`camelCase`，无论后端接口如何命名，前端命名要有意义。例如

-   获取列表数据：getXXXlist
-   获取单条数据：getXXXByXX
-   提交：submitXXX
-   删除：deleteXXX
-   更新：updateXXX
-   新增：addXXX
-   操作：操作名 XXX

##### Api

枚举统一命名 Api，url 名称命名规则为`PascalCase`。

##### 方法名

命名规则为`camelCase`，并加 Api 结尾

##### 参数

命名规则为`PascalCase`,并加 Params 后缀

##### 返回值泛型

命名规则为`PascalCase`

##### 示例代码

```typescript
import { UserModel } from '@/types/user'
import { defRequest } from '@/utils/request'
import { LoginParams } from './model'

enum Api {
	Login = '/user-center/login',
}

/**
 * @description: 用户登录
 * @yapi: yapi地址
 * @creater: liupw
 * @date: 2021/12/1 09:53
 */
export function loginApi(params: LoginParams) {
	return defRequest.post<UserModel>({
		url: Api.Login,
		data: params,
	})
}
```

### model

#### 命名规范

interface 命名规则为`PascalCase`，属性值命名规则为`camelCase`

```typescript
/**
 * @description: 登录参数
 */
export interface LoginParams {
	// 用户名
	userName: string
	// 密码
	password: string
	// 验证码
	captchaCode: string
}
```
