總結(jié)一下
- RESTful 是目前最流行的 API 設(shè)計規(guī)范,用于 Web 數(shù)據(jù)接口的設(shè)計。(感覺比較適合大型項目、多團(tuán)隊合作項目)
- RPC的核心思想是把本地的方法映射到API,比如我本地有一個方法是getUser()
RESTful的可讀性更好,即使完全不了解業(yè)務(wù),看到API也知道這個接口是干嘛的,但是有時候不好抽象,比如login操作,你用Restful如何抽象?
Restful規(guī)范最大的好處:命名統(tǒng)一,避免相同的功能因為命名風(fēng)格不同,而創(chuàng)建了一大堆冗余的接口。既浪費了編程資源(相同的功能寫了多個接口),又不好維護(hù)(修改一個功能,要修改多個命名不同的接口)
RPC規(guī)范的話,當(dāng)然是簡單暴力,后端程序員更喜歡,寫給自己小伙伴的接口規(guī)范,但是在大型項目、多team合作項目、前后端分離項目時,可讀性很差。有時候一個功能相同接口,會出現(xiàn)好幾個。因為可能項目移交給別的team做,新team沒空研究之前的代碼,直接寫一個新的接口完成同一個業(yè)務(wù)功能。
比如
- /getUser?id=,
- /getUserById?id=
- /getUserByPrimary?id=
但是有了restful規(guī)范的話,就可以大大降低這種事情的概率,因為都是 GET /users/{id}
REST VS RPC
REST的主體是資源,而RPC更側(cè)重于動作。
REST更偏向外部調(diào)用,RPC更偏向內(nèi)部調(diào)用。在國內(nèi),一般更偏向于RPC,比如阿里出的dubbo;在國外,更倡導(dǎo)REST,比如spring cloud,是個純REST的項目,不支持RPC。(當(dāng)然,近幾年REST在國內(nèi)也開始火起來了)
REST其實是個效率很低的東西,特別是需要聯(lián)合查詢的時候;并且有些東西,也不好抽象成資源,比如用戶登錄、用戶退出
RPC只需要關(guān)心業(yè)務(wù)場景,但是如果業(yè)務(wù)理解不夠,你可能不會理解這些API是做什么用的(優(yōu)秀的RESTful API的設(shè)計,就算不懂業(yè)務(wù),只要會一些英文,應(yīng)該通過URL就能猜到每個API是做什么的)。
前端可能更喜歡REST,而后端估計更傾向于RPC。
restful api細(xì)節(jié)
還是看阮一峰大佬的博客吧,更詳細(xì),摘錄幾個印象比較深的點
必須要摒棄RPC的做法啊,比如新增用戶
標(biāo)準(zhǔn)寫法: POST /users
如果你寫成 POST /users/add,那么就會有人寫成: POST /users/insert ,POST /users/create,所以賓語必須是名詞,而且最好是統(tǒng)一用復(fù)數(shù)避免多級 URL
GET /authors/12?categories=2response 必須是json的
返回正確的code
參考
阮一峰大佬的博客
http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html
講區(qū)別的
http://www.360doc.com/content/18/0730/00/99071_774291878.shtml