你們好我是 Guide 哥!這是個人第 210 篇優質原創!這篇文章主要分享了後端程序員必備的 RestFul API 相關的知識。javascript
RestFul API 是每一個程序員都應該瞭解並掌握的基本知識,咱們在開發過程當中設計 API 的時候也應該至少要知足 RestFul API 的最基本的要求(好比接口中儘可能使用名詞,使用 POST 請求建立資源,DELETE 請求刪除資源等等,示例:GET /notes/id
:獲取某個指定 id 的筆記的信息)。java
若是你看 RestFul API 相關的文章的話通常都比較晦澀難懂,包括我下面的文章也會提到一些概念性的東西。可是,實際上咱們平時開發用到的 RestFul API 的知識很是簡單也很容易歸納!舉個例子,若是我給你下面兩個 url 你是否是立馬能知道它們是幹什麼的!這就是 RestFul API 的強大之處!git
RestFul API 能夠你看到 url + http method 就知道這個 url 是幹什麼的,讓你看到了 http 狀態碼(status code)就知道請求結果如何。程序員
GET /classs:列出全部班級 POST /classs:新建一個班級
下面的內容只是介紹了我以爲關於 RestFul API 比較重要的一些東西,歡迎補充。github
REST,即 REpresentational State Transfer 的縮寫。這個詞組的翻譯過來就是"表現層狀態轉化"。這樣理解起來甚是晦澀,實際上 REST 的全稱是 Resource Representational State Transfe ,直白地翻譯過來就是 「資源」在網絡傳輸中以某種「表現形式」進行「狀態轉移」 。若是仍是不能繼續理解,請繼續往下看,相信下面的講解必定能讓你理解到底啥是 REST 。面試
咱們分別對上面涉及到的概念進行解讀,以便加深理解,不過實際上你不須要搞懂下面這些概念,也能看懂我下一部分要介紹到的內容。不過,爲了更好地能跟別人扯扯 「RestFul API」我建議你仍是要好好理解一下!數據庫
/class/12
。另外,資源也能夠包含子資源,好比 /classs/classId/teachers
:列出某個指定班級的全部老師的信息綜合上面的解釋,咱們總結一下什麼是 RESTful 架構:json
GET /classs
(獲取全部班級)POST /classs
(建立班級)PUT /classs/12
(更新編號爲 12 的班級)DELETE /classs/12
(刪除編號爲 12 的班級)路徑又稱"終點"(endpoint),表示 API 的具體網址。實際開發中常見的規範以下:後端
GET /calculate?param1=11¶m2=33
invitation-code
而不是 Talk is cheap!來舉個實際的例子來講明一下吧!如今有這樣一個 API 提供班級(class)的信息,還包括班級中的學生和教師的信息,則它的路徑應該設計成下面這樣。api
接口儘可能使用名詞,禁止使用動詞。 下面是一些例子:
GET /classs:列出全部班級 POST /classs:新建一個班級 GET /classs/classId:獲取某個指定班級的信息 PUT /classs/classId:更新某個指定班級的信息(通常傾向總體更新) PATCH /classs/classId:更新某個指定班級的信息(通常傾向部分更新) DELETE /classs/classId:刪除某個班級 GET /classs/classId/teachers:列出某個指定班級的全部老師的信息 GET /classs/classId/students:列出某個指定班級的全部學生的信息 DELETE classs/classId/teachers/ID:刪除某個指定班級下的指定的老師的信息
反例:
/getAllclasss /createNewclass /deleteAllActiveclasss
理清資源的層次結構,好比業務針對的範圍是學校,那麼學校會是一級資源:/schools
,老師: /schools/teachers
,學生: /schools/students
就是二級資源。
若是咱們在查詢的時候須要添加特定條件的話,建議使用 url 參數的形式。好比咱們要查詢 state 狀態爲 active 而且 name 爲 guidegege 的班級:
GET /classs?state=active&name=guidegege
好比咱們要實現分頁查詢:
GET /classs?page=1&size=10 //指定第1頁,每頁10個數據
狀態碼範圍:
2xx:成功 | 3xx:重定向 | 4xx:客戶端錯誤 | 5xx:服務器錯誤 | |
---|---|---|---|---|
200 成功 | 301 永久重定向 | 400 錯誤請求 | 500 服務器錯誤 | |
201 建立 | 304 資源未修改 | 401 未受權 | 502 網關錯誤 | |
403 禁止訪問 | 504 網關超時 | |||
404 未找到 | ||||
405 請求方法不對 | ||||
RestFul 的極致是 hateoas ,可是這個基本不會在實際項目中用到。
上面是 RESTful API 最基本的東西,也是咱們平時開發過程當中最容易實踐到的。實際上,RESTful API 最好作到 Hypermedia,即返回結果中提供連接,連向其餘 API 方法,使得用戶不查文檔,也知道下一步應該作什麼。
好比,當用戶向 api.example.com 的根目錄發出請求,會獲得這樣一個文檔。
{"link": { "rel": "collection https://www.example.com/classs", "href": "https://api.example.com/classs", "title": "List of classs", "type": "application/vnd.yourformat+json" }}
上面代碼表示,文檔中有一個 link 屬性,用戶讀取這個屬性就知道下一步該調用什麼 API 了。rel 表示這個 API 與當前網址的關係(collection 關係,並給出該 collection 的網址),href 表示 API 的路徑,title 表示 API 的標題,type 表示返回類型 Hypermedia API 的設計被稱爲HATEOAS。
在 Spring 中有一個叫作 HATEOAS 的 API 庫,經過它咱們能夠更輕鬆的建立除符合 HATEOAS 設計的 API。
做者介紹: Github 70k Star 項目 JavaGuide(公衆號同名) 做者。每週都會在公衆號更新一些本身原創乾貨。公衆hao後臺回覆「1」領取Java工程師必備學習資料+面試突擊pdf。