ThinkJS REST API

2021-09-17 14:27 更新

REST API

項(xiàng)目中,經(jīng)常要提供一個(gè) API 供第三方使用,一個(gè)通用的 API 設(shè)計(jì)規(guī)范就是使用 REST API。REST API 是使用 HTTP 中的請求類型來標(biāo)識對資源的操作。如:

  • GET /ticket #獲取ticket列表
  • GET /ticket/12 #查看某個(gè)具體的ticket
  • POST /ticket #新建一個(gè)ticket
  • PUT /ticket/12 #更新ticket 12
  • DELETE /ticket/12 #刪除ticekt 12

ThinkJS 中提供了很便捷的方式來創(chuàng)建 REST API,創(chuàng)建后無需額外的代碼即可響應(yīng) REST API 的處理,同時(shí)也可以通過定制響應(yīng)額外的需求。

創(chuàng)建 REST API

通過 thinkjs controller [name] --rest 即可創(chuàng)建一個(gè) REST API。如:

thinkjs controller home/ticket --rest

上面的命令表示在 home 模塊下創(chuàng)建了一個(gè) ticket 的 Rest Controller,該 Controller 用來處理資源 ticket的請求。

處理 REST API 請求

Rest Controller 創(chuàng)建完成后,無需寫任何的代碼,即可完成對 REST API 的處理。資源名稱和數(shù)據(jù)表名稱是一一對應(yīng)的,如:資源名為 ticket,那么對應(yīng)的數(shù)據(jù)表為 數(shù)據(jù)表前綴 + ticket。

請求類型

REST API 默認(rèn)是從 HTTP METHOD 里獲取當(dāng)前的請求類型的,如:當(dāng)前請求類型是 DELETE,表示對資源進(jìn)行刪除操作。

如果有些客戶端不支持發(fā)送 DELETE 請求類型,那么可以通過屬性 _method 指定一個(gè)參數(shù)用來接收請求類型。如:

export default class extends think.controller.rest {
  init(http){
    super.init(http);
    this._method = "_method"; //指定請求類型從 GET 參數(shù) _method 里獲取
  }
}

字段過濾

默認(rèn)情況下,獲取資源信息時(shí),會(huì)將資源的所有字段都返回。有時(shí)候需要隱藏部分字段,可以通過在__before 魔術(shù)方法里完成此類操作。

export default class extends think.controller.rest {
  __before(){
    this.modelInstance.fieldReverse("password,score"); //隱藏 password 和 score 字段
  }
}

權(quán)限管理

有些 REST API 需要進(jìn)行權(quán)限驗(yàn)證,驗(yàn)證完成后才能獲取對應(yīng)的信息,可以通過在 __before 魔術(shù)方法里進(jìn)行驗(yàn)證。

export default class extends think.controller.rest {
  * __before(){
    let auth = yield this.checkAuth();
    if(!auth){
      return this.fail("no permissions"); //沒權(quán)限時(shí)直接返回
    }
  }
}

更多定制

更多定制方式請參見 API -> controller.rest。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號