RESTful-API還沒理解麼?只是因為你沒看這篇文章,其實它很簡單

2020-12-13 字母哥博客

一、本文大綱

RESTful風格API的好處

RESTful API的設計風格

二、RESTful風格API的好處

API:顧名思義(Application Programming Interface)是一組編程接口規範,客戶端與服務端通過請求響應進行數據通信。REST(Representational State Transfer)決定了接口的形式與規則。RESTful是基於http方法的API設計風格,而不是一種新的技術.要達到的效果就是:

看URI就知道需要什麼資源

看http method方法就知道針對資源做什麼動作

看http 狀態碼就知道動作的結果如何

對接口開發提供了一種可以廣泛適用的規範,為前端後端交互減少了接口交流的口舌成本,是約定大於配置的體現。通過下面的設計,大家來理解一下這三句話。

當然也不是所有的接口,都能用REST的形式來表述。在實際工作中,靈活運用,我們用RESTful風格的目的是為大家提供統一標準,避免不必要的溝通成本的浪費,形成一種通用的風格。就好比大家都知道:伸出大拇指表示「你很棒「的意思,絕大部分人都明白,因為你了解了這種風格習慣。但是不排除有些地區伸出大拇指表示其他意思,就不適合使用!

二、RESTful API的設計風格

2.1、REST 是面向資源的(名詞)

RESTful API 通過 URI 對外暴露資源時,規範的做法是不要在 URI 中出現動詞。如:

2.2、用HTTP方法體現對資源的操作(動詞)

GET : 獲取、讀取資源

POST : 添加資源

PUT : 修改資源

DELETE : 刪除資源

2.3. HTTP狀態碼

通過HTTP狀態碼體現動作的結果,不要自定義

200 OK 400 Bad Request 500 Internal Server Error

在 APP 與 API 的交互當中,其結果逃不出這三種狀態:

所有事情都按預期正確執行完畢 - 成功

APP 發生了一些錯誤 – 客戶端錯誤(如:校驗用戶輸入身份證,結果輸入的是軍官證,就是客戶端輸入錯誤)

API 發生了一些錯誤 – 伺服器端錯誤(各種編碼bug或服務內部自己導致的異常)

這三種狀態與上面的狀態碼是一一對應的。如果你覺得這三種狀態,分類處理結果太寬泛,http-status code狀態碼還有很多。建議還是要遵循KISS(Keep It Stupid and Simple)原則,上面的三種狀態碼完全可以覆蓋99%以上的場景。這三個狀態碼大家都記得住,而且非常常用,多了就不一定了。

2.4. Get方法和查詢參數不應該改變數據

改變數據的事交給POST、PUT、DELETE

2.5. 使用複數名詞

/dogs 而不是 /dog

2.6. 複雜資源關係的表達

GET /cars/820/drivers/ 返回 使用過編號820汽車的所有司機

GET /cars/820/drivers/8 返回 使用過編號820汽車的8號司機

2.7. 高級用法:HATEOAS

HATEOAS:Hypermedia as the Engine of Application State 超媒體作為應用狀態的引擎。

RESTful API最好做到HATEOAS,即返回結果中提供連結,連向其他API方法,使得用戶不查文檔,也知道下一步應該做什麼。比如:對api.example.com接口發出GET請求,會得到下面的JSON響應結果。

上面響應結果,JSON文本中的link屬性,用來說明API消費者可以知道下一步可以調用什麼API或者該調用什麼API。

2.8. 資源過濾、排序、選擇和分頁的表述

2.9. 版本化你的API

強制性增加API版本聲明,不要發布無版本的API。如:/api/v1/blog

面向擴展開放,面向修改關閉:也就是說一個版本的接口開發完成測試上線之後,我們一般不會對接口進行修改,如果有新的需求就開發新的接口進行功能擴展。這樣做的目的是:當你的新接口上線後,不會影響使用老接口的用戶。如果新接口目的是替換老接口,也不要在v1版本原接口上修改,而是開發v2版本接口,並聲明v1接口廢棄!

寫在最後

通過搜-suo-查詢「字母哥博客」,更多精品知識等待你!

本號只做持續的知識輸出,希望您能關注、評論、轉發!您的支持是我不竭的創作動力!讓知識產生價值、讓程式設計師改變世界!

相關焦點

  • 這次我讓你徹底弄懂 RESTful
    而且我之前還特不能理解,為啥這叫架構?我特意搜索了下架構的解釋。軟體架構是有關軟體整體結構與組件的抽象描述,用於指導大型軟體系統各個方面的設計。整體結構與組件的抽象描述。RESTful 哪有什麼組件和結構之間的玩意?所以就至今我寫下這篇文章的時候我也理解不了為什麼叫 RESTful 架構。
  • RESTful API 最佳實踐(阮一峰)
    它的大原則容易把握,但是細節不容易做對。本文總結 RESTful 的設計細節,介紹如何設計出易於理解和使用的 API。這沒有統一的規定,但是常見的操作是讀取一個集合,比如GET /articles(讀取所有文章),這裡明顯應該是複數。為了統一起見,建議都使用複數 URL,比如GET /articles/2要好於GET /article/2。
  • 後端開發必備的 RestFul API 知識
    相關閱讀:•http://www.ruanyifeng.com/blog/2014/05/restful_api.html(阮一峰,這篇文章大部分內容來源)•https://www.baeldung.com/spring-hateoas-tutorial(RestFul API Tutorial)•https://aisensiy.github.io/2017/06/04
  • RESTful API 設計規範
    為了更好的討論規範帶來的爭議及問題,現已把該文檔整理並開源到 github (https://github.com/godruoyi/restful-api-specification),關於大家補充及提 issue。
  • 淺談 RESTful API
    為何要用 RESTful按照 RESTful 架構可以充分的利用 HTTP 協議帶給我們的各種功能,算是對 HTTP 協議使用的最佳實踐,還有一點就是可以使軟體架構設計更加清晰,可維護性更好如何做 RESTfulRESTful 架構如果一個架構符合 REST 原則,就稱它為 RESTful 架構從以下三個方面理解 RESTful 架構:資源 -
  • 為什麼你學了十幾年語文,卻覺得它還沒英語簡單?
    如果你已經放棄了語文的學習,做好了出國徹底融入另一個民族的打算,那麼這篇文章對你不會有什麼幫助了,我們可以有緣再見。如果不然,就請繼續往下聽我囉嗦吧。  2016年北京各區一模語文學科的大戰已經落幕,昨晚心怡老師在群裡和兩千多位初三家長一起聊各區一模語文到底都考了些什麼。
  • 開發出優秀的API,構建RESTful API的13種最佳實踐,學會此文就很優秀了
    確保使用正確的HTTP方法,因為這將為使用你的RESTful API的開發人員增加很多混亂。最好是堅持使用預定的準則。2.命名約定了解RESTful API命名約定將對你有組織地設計API有很大幫助。根據你服務的資源設計一個RESTful API。
  • 如果看了這篇文章你還不懂傅立葉變換,那就過來掐死我吧(下)
    上一篇文章發出來之後,為了掐死我,大家真是很下工夫啊,有拿給姐姐看的,有拿給妹妹看的,還有拿給女朋友看的,就是為了聽到一句「完全看不懂啊」。幸虧我留了個心眼,不然就真的像標題配圖那樣了。我的文章題目是,如果看了這篇文章你「還」不懂就過來掐死我,潛臺詞就是在你學了,但是沒學明白的情況下看了還是不懂,才過來掐死我。
  • 不知道怎麼寫好一篇文章?可能因為你還沒看過這本書
    記得當初買這本書時,我還推薦了周圍喜歡寫作的朋友們一起買。理由很簡單,因為這是我參加過的,最好的寫作課的老師寫的,我想讓更多的人跟我一樣,體驗到這份最好的感覺。整本書的信息量非常大,我花了三個下午的時間,才把它看完。一邊看一邊做筆記,還時不時的把其中的精彩段落做了拆解,又跟自己寫作中的實際體驗做了核對。
  • 如果看了這篇文章你還不懂傅立葉變換,那就過來掐死我吧
    連結:http://zhuanlan.zhihu.com/wille/19763358(點擊尾部閱讀原文前往)我保證這篇文章和你以前看過的所有文章都不同,這是12年還在果殼的時候的,但是當時沒有來得及寫完就出國了……於是拖了兩年,嗯
  • 【第1772期】從拉麵店的販賣機理解什麼是 API
    今日早讀文章由@胡立分享。正文從這開始~~API,全名叫做 Application Programming Interface,維基百科上的中文翻譯是:「應用程式界面」。這是一個你可能聽過很多次,但從來沒有理解過的東西,常常聽到工程師說著:「串 API」,但還是不知道 API 到底是什麼。
  • 非RESTful 的微軟 REST API 指南
    客戶端應該不需要在URL中傳遞個人身份信息參數,因為它們可能會暴露在日誌文件中。參數應該通過頭信息傳遞。數據應該以流行的格式提供。默認數據編碼是JSON。「基本型數值必須遵循RFC4627標準序列化成JSON。」
  • 託福閱讀,其實沒你想得那麼簡單.
    但是搞定託福閱讀,真的只是背單詞,學語法,準確翻譯句子,精讀文章那麼簡單嗎?我敢說,就算讓一些同學在考試的時候可以打開翻譯軟體,把託福閱讀的文本翻譯成中文,依然可能讀不懂,做不對題。實際我也見到過不少大量單詞量很大,語法知識也很完善,句子翻譯得很準確,但是就是考不好,在23分徘徊的同學。
  • 如何教出一個有教養的狗狗,其實很簡單,請看完這篇文章
    自從三年前布丁加入我們的生活起, 為了養出一隻乖巧又人人稱讚的狗狗, 我真的花了很多心思, 可能因為這就是我的個性,事情只要一做, 就要盡善盡美,所以就像我無法忍受一個沒教養, 沒禮貌的小孩一樣,我也無法忍受一隻沒教養的狗. 看到這裡,再對照我的標題, 你是不是認為我家兩狗都是被我打乖的啊? 當然不是!!!!
  • 如何設計restful風格接口
    restful風格接口URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操作。識別(identify)、 表示(represent) 、交互(interact with)。看Url就知道要什麼看http method就知道幹什麼看http status code就知道結果如何1.
  • 看了這麼多篇紅黑樹文章,你都理解了嘛?
    很早之前就想寫一篇關於紅黑樹的文章,但是由於擔心自己理解的不透徹,就一直不敢下筆。於是在重新看了很多篇文章和資料之後,決定徹徹底底的把紅黑樹搞清楚。也希望讓你在面試中遊刃有餘。OK,廢話不多說,開始今天的文章。整篇文章的思路是這樣的,紅黑樹其實就是一種數據結構,設計它的目的就是為了高效地進行增刪改查,所以我們文章的順序也會按照這個思路來進行。
  • 手把手教你學Numpy——常用API合集
    本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】,經微信公眾號授權轉載,如需轉載與原文作者聯繫今天是Numpy專題的第5篇文章,我們來繼續學習Numpy當中一些常用的數學和統計函數。
  • 別人不會告訴你的扎心真相:寫文章堅持不下去?因為沒做到這四點
    堅持不下去的原因其實很簡單,因為你的寫作沒有得到過正面的反饋。那什麼才是寫作的正面反饋呢?1、 閱讀量像今日頭條這種信息流的內容平臺,閱讀量是最為直接的反饋。閱讀量高可以多吃一碗米飯。閱讀量低可能你就開始懷疑自己是不是適合寫作這條路了。2、 文章有認同有的時候,哪怕文章閱讀量不是很高,但是有讀者留言支持你,誇讚你,這一樣可以成為你寫作的正面反饋。
  • 你沒理解它真正的含義
    前陣子有不少人反饋:呆總,我平時看了不少圖,但是做項目的時候沒辦法用上,怎麼辦呀?這類問題我一般只會用一句話回答:看得多沒用的,要多想多做。(雖然是至理名言)但是我覺得這樣回答太敷衍了,所以寫了這篇文章來告訴大家如何在工作中復用自己找到的好圖,以及平時要怎麼去做,即所謂的「如何在工作中找到設計靈感」。
  • 印度隱身戰艦下水,但是別急,其實它還沒建完
    這艘船的排水量怎麼只有2650噸?設計數據明明是6673噸啊,阿三哥這是在搞什麼飛機?大家不要誤會,其實這艘名為「內埃拉吉裡」號(簡稱「小內」號)的P-17A項目的隱形飛彈護衛艦的首艦並沒有建完。吃瓜群眾小A:什麼?沒建完你下什麼水?難道阿三哥就是要弄個空殼子去水裡漂一漂嚇唬人?