## API 接口规范
1. header 中 `x-requested-with` 为 `XMLHttpRequest` 后端通过 header 中的 `x-requested-with` 来判断是否为 ajax 请求
2. 后端接口默认为 `api` 模块, 控制器需要继承 `\app\ApiController`, 通过 `$this->token` 获取 `Lcobucci\JWT\Token` 实例
3. 一般来说用户身份验证通过后, 我们通过 `createToken` 方法生成 `token`, `token` 中携带了用户身份信息, 如用户ID, 昵称等, 默认开启了 RSA 加密, 在关闭了 RSA 加密的情况下不建议携带隐私信息
4. 用户在已经获取了 `token` 的情况下, 每次请求需要在 header 中携带 `Authorization` (用户的 `token`)
5. API 发生错误时, 默认情况下, 即使接口发生异常, 返回的 `state` 依然是 200, 我们通过返回的数据 `response.data.err === 1` 来判断接口是否发生了异常(response 为 [XMLHttpRequest.response](https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/response) 对象), 同时返回的数据里也需要注意, 不要使用 err 这个字段
6. 继承 `app\ApiController` 的控制器方法中允许直接返回对象, 或数组, 返回的对象和数组默认会转换成 json 格式
7. 可以通过 `api\secure\resetRsaKey` 来重新生成 RSA 密钥, 该接口只允许本地访问, 或者用户可以将接口删除, 每次通过 openssl 重新生成到 `application\extra\rsa.php` 中 `path` 所定义的目录中
#### 一个正常的 ajax 请求 header
![](https://box.kancloud.cn/eb498abc4b36b6ab6f8ea7bceb4816ac_1261x257.png)
#### API 异常时返回的内容
![](https://box.kancloud.cn/19827e7d9924a4485928fb7d034500c5_861x207.png)
**API异常时返回内容说明** :
* err: 是否发生异常
* msg: 抛出异常的信息
* errCode: 错误代码
* errType: 抛出异常的类型 (Exception 类), 不包含完整的命名空间