# REST API
[TOC=2,3]
項目中,經常要提供一個 API 供第三方使用,一個通用的 API 設計規范就是使用 REST API。REST API 是使用 HTTP 中的請求類型來標識對資源的操作。如:
* `GET`?`/ticket`?#獲取ticket列表
* `GET`?`/ticket/12`?#查看某個具體的ticket
* `POST`?`/ticket`?#新建一個ticket
* `PUT`?`/ticket/12`?#更新ticket 12
* `DELETE`?`/ticket/12`?#刪除ticekt 12
ThinkJS 中提供了很便捷的方式來創建 REST API,創建后無需額外的代碼即可響應 REST API 的處理,同時也可以通過定制響應額外的需求。
## 創建 REST API
通過?`thinkjs controller [name] --rest`?即可創建一個 REST API。如:
~~~
thinkjs controller home/ticket --rest
~~~
上面的命令表示在?`home`?模塊下創建了一個?`ticket`?的 Rest Controller,該 Controller 用來處理資源?`ticket`的請求。
## 處理 REST API 請求
Rest Controller 創建完成后,無需寫任何的代碼,即可完成對 REST API 的處理。資源名稱和數據表名稱是一一對應的,如:資源名為?`ticket`,那么對應的數據表為?`數據表前綴`?+?`ticket`。
## 請求類型
REST API 默認是從 HTTP METHOD 里獲取當前的請求類型的,如:當前請求類型是?`DELETE`,表示對資源進行刪除操作。
如果有些客戶端不支持發送?`DELETE`?請求類型,那么可以通過屬性?`_method`?指定一個參數用來接收請求類型。如:
~~~
export default class extends think.controller.rest {
init(http){
super.init(http);
this._method = "_method"; //指定請求類型從 GET 參數 _method 里獲取
}
}
~~~
## 字段過濾
默認情況下,獲取資源信息時,會將資源的所有字段都返回。有時候需要隱藏部分字段,可以通過在`__before`?魔術方法里完成此類操作。
~~~
export default class extends think.controller.rest {
__before(){
this.modelInstance.fieldReverse("password,score"); //隱藏 password 和 score 字段
}
}
~~~
## 權限管理
有些 REST API 需要進行權限驗證,驗證完成后才能獲取對應的信息,可以通過在?`__before`?魔術方法里進行驗證。
~~~
export default class extends think.controller.rest {
* __before(){
let auth = yield this.checkAuth();
if(!auth){
return this.fail("no permissions"); //沒權限時直接返回
}
}
}
~~~
## 更多定制
更多定制方式請參見?[API -> controller.rest](https://thinkjs.org/zh-CN/doc/2.0/api_controller_rest.html)。
- 快速入門
- 介紹
- 創建項目
- 項目結構
- 代碼規范
- 升級指南
- 進階應用
- 模塊
- 控制器
- 視圖
- 配置
- 路由
- 模型
- 介紹
- 事務
- 關聯模型
- Mysql
- MongoDB
- SQLite
- Adapter
- 介紹
- Cache
- Session
- WebSocket
- Template
- 擴展功能
- thinkjs 命令
- 靜態資源訪問
- Middleware
- Service
- Cookie
- 錯誤處理
- 錯誤信息
- 數據校驗
- 國際化
- 路徑常量
- REST API
- 定時任務
- 線上部署
- 推薦模塊
- API
- think
- think.base
- think.http.base
- http
- controller
- rest controller
- model
- model.mongo
- middleware