## 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

#### API 異常時返回的內容

**API異常時返回內容說明** :
* err: 是否發生異常
* msg: 拋出異常的信息
* errCode: 錯誤代碼
* errType: 拋出異常的類型 (Exception 類), 不包含完整的命名空間