### 概述
> 注意:當前在`/route/route.php`中寫了分組路由,不需要可以直接刪除
接口執行流程為:
1. 前端訪問`/api/xx/xx`請求接口
2. `Controller`基類進行jwt驗證
3. 執行具體`Controller`中的業務邏輯
4. 返回執行的結果
### 接口開發
- 在`/application/api/controller`文件夾下創建相應的控制器,繼承Controller類。
- 配置`$authExcept`變量,把無需jwt驗證的方法加入到里面;此變量不可直接在基類中配置,必須在具體業務控制器中進行配置。
- 在具體方法中直接返回`api_success()`或`api_error`即可。
### 安全校驗
安全校驗采用`jwt`進行校驗,`jwt`采用`lcobucci/jwt`擴展包,在`/application/api/traits/ApiAuth.php`中封裝了相關方法。
#### jwt驗證流程

#### jwt配置
> 當自動刷新token的時候,前端保存后端傳過來的新token,此后都用新的token進行訪問。如果不想使用oken刷新可以把過期時間設置的大一些,例如1年之類的。
~~~
protected $config = [
//token在header中的name
'name' => 'token',
//加密使用的secret
'secret' => '552ac90778a976c72f7f673db174df30',
//頒發者
'iss' => 'iss',
//使用者
'aud' => 'aud',
//過期時間,以秒為單位,默認2小時
'ttl' => 30,
//刷新時間,以秒為單位,默認14天,以
'refresh_ttl' => 1209600,
//是否自動刷新,開啟后可自動刷新token,附在header中返回,name為`Authorization`,字段為`Bearer `+$token
'auto_refresh' => true,
//黑名單寬限期,以秒為單位,首次token刷新之后在此時間內原token可以繼續訪問
'blacklist_grace_period' => 60
];
~~~
### 返回數據
返回數據為json格式,正常情況下會包括`code`,`msg`,`data`字段,分別代表狀態碼,消息,主數據。
```json
{
"code": 200,
"msg": "success",
"data": {}
}
```
### 返回狀態碼
> 因 HTTP 狀態碼多的嚇人,所以目前只采用`200/400/401/404/404/500`態碼來控制接口的返回。
* 200 代表成功。所有的接口成功返回都是200
* 400 表示客戶端錯誤。例如輸入的字段類型不匹配等
* 401 未登錄/登錄狀態失效。代表需要客戶端發起登錄流程
* 403 表示此用戶無權限。例如普通用戶無法觀看vip課程,可直接返回403
* 404 接口不存在。訪問了不存在的接口就會返回404
* 500 代表失敗。具體原因可參考body內msg字段
其中,我們用的最多的就是`200`和`500`了,401在登錄鑒權的地方可以自動返回,一般無需自己處理,`404`系統也自定義好了,無需手動處理,`500`在`/application/common/exception/Http.php`文件中也做了捕獲處理。`400`和`403`可酌情使用,不想麻煩的也可以直接用500來代替。
### 開發示例
#### 登錄
登錄功能可以直接參考`/application/api/controller/AuthController.php`中的`login`方法。
#### 資源控制器
可以直接參考`/application/api/controller/UserController.php`控制器。