Eggjs下Restful API的實現

這兩天真的是宅的骨頭都發黴了,春困秋乏夏打盹,也是醉了。今天就簡要說說eggjs下Restful API的實現。主要的緣由是egg的文檔寫的不太清楚,方便新人快速上手。話說eggjs真的是蠻好用的,經過在koa上架了一層,保證了團隊以一套統一的約定開發;另外,egg自己提供不少明確的插件和中間件給你,你只管用就行了,很是的方便和容易上手。可是eggjs的文檔有點小問題,它在有些須要強調的點上沒有強調(它都寫了只是沒有強調而已)。致使咱們一目十行去掃文檔的時候,有時總會以爲有些莫名,Restful api的實現就是其中之一。

1. 什麼是Restful API

說人話的方式來解釋一下就是:html

Restful API: 爲了讓接口的設計的更簡明易懂,人們定義的一套API命名規範

Restful API有幾個特性:api

  • 面向資源:接口命名都是zoos、animals,而不是getAllAnimals這樣的
  • 使用Http動詞:GET/PUT/POST/DELETE/PATCH/HEAD/OPTIONS,而不是咱們平常只用的GET和POST

具體的內容能夠參考相關文檔,就再也不多說了,立刻進入正題restful

參考文檔:《如何給老婆解釋什麼是RESTful》(我晚上立刻秀了波如何給爸媽解釋區塊鏈,效果棒棒的),《RESTful API 設計指南app

2. 如何在egg下實現Restful API

若是咱們直接找尋文檔的話,能夠在eggjs文檔下發現RESTful API的文檔,而後看完以後知道了egg已經幫咱們內部實現了一份Restful API的對應關係。koa

甚至路由應該這麼寫:函數

// app/router.js
module.exports = app => {
  app.router.resources('topics', '/api/v2/topics', app.controller.topics);
};

可是這個controller裏該怎麼寫?這對應的是哪一個函數?反正我看完了是一臉懵逼。其實這和我自己對Restful API的瞭解不深刻有關,可是也沒有文檔和我說實現啊。post

其實egg在Router章節中說到了這一點,區塊鏈

圖片描述

能夠看到,若是是GET, 路徑只有/posts,那麼對應着posts這個Controllers中的index方法,其餘依次類推。
這樣和《RESTful API 設計指南》中提到的規範寫法是同樣的:spa

圖片描述

到這裏我才明白Restful API到底是什麼,應該怎麼寫。插件

另外須要注意的三個點

  1. egg會嘗試對應你Controllers中定義的方法,若是沒有定義相應的方法,會返回404錯誤
  2. 路徑中的id可使用ctx.params.id來得到
  3. 實際的路徑書寫以下:
show方法:
GET /posts/1

edit方法:
GET /posts/1/edit

update方法:
PUT /posts/1

Egg的文檔VUE的不一樣,須要稍微用心一點,否則可能會像我同樣看一下子。以上。

相關文章
相關標籤/搜索