本節內容總結和概括 <ASP.NET CORE 與 RESTful 開發實戰> 書中的第一章節內容. 並將收錄於該系列的筆記目錄下.html
符合如下約束的 web 服務纔是真正的 RESTful 服務:web
約束條件 | 介紹 |
---|---|
客戶端 - 服務端 | 這個約束主要是從開發者角度將關注點分離, 客戶端和服務端可使用不一樣的技術棧實現獨立開發, 只要它們之間的接口不改變便可. |
具有統一接口 | - |
是分層的系統 | 客戶端和服務端之間一般會有一層代理或者網關. 客戶端和服務端能夠沒必要知道這個代理與網關. 可是它的做用是能夠有不少, 好比鑑權, 限流, 複雜均衡等等. |
緩存能力 | 緩存號稱是是 web 服務開發之友 |
無狀態的 | 客戶端發送到服務端的每一個請求必須是無狀態的請求. 這就要求服務端不須要記住和存儲任何客戶端的信息. 反之這些信息都由客戶端保存和維護. 所以客戶端對服務端的請求不能依賴於已發生的請求, 當客戶端與服務端發生通訊時, 必須包含全部與之相關的信息, 如身份認證信息等等. |
按需編碼 | 容許服務端臨時向客戶端返回可執行的程序代碼, 主要用於客戶端提供可擴展性和自定義的功能. (這部分我還沒有接觸過, 讀到這裏還不可以馬上理解.) |
RPC 風格簡單介紹
除了 REST 外, 另外一種常見的 API 風格是 RPC 風格, 即遠程過程調用(Remote - Procedure - Call). 它與 REST 的區別以下: json在關注點方面, REST 面向的是資源, RPC面向的是功能. 在 API endpoint 方面, REST 的 endpoint 是名詞, 是資源或者資源集合, 而 RPC 的端點是動詞, 是方法名. 在執行特色方面, REST 對資源執行操做, RPC 執行服務器上的方法. 在返回的結果方面, REST 返回的是請求的資源, 而 RPC 則返回調用方法的執行結果.
那麼根據個人理解, REST 主要是提供對於資源的操做, 而 RPC 則是提供一種功能的服務.
筆者感言:
書中提到幾乎全部的狀況下, REST 是基於 HTTP 協議實現的. 筆者也苟同, 由於本人做爲後端 API 開發時, 一般也會和 HTTP 相關的內容常常打交道. 因此深刻理解 HTTP 協議將有助於開發者開發出更好更高質量的 API. 因此對於 HTTP 不夠了解的同窗最好能夠去找找相關的專業的材料學習和鞏固一下.後端
上圖呢是一張高度歸納了不少不少內容的圖.api
POST http://api.appdomain.com/users
PUT http://api.appdomain.com/users/1跨域
head | desc | example |
---|---|---|
Accept | content-type | Accept:application/json |
Accept-Charset | 可接受的字符集 | Accept-Charset:utf-8 |
Accept-Encoding | 可接受的響應內容的編碼方式 | Accept-Encoding:gzip |
Authorization | 表示資源須要認證的信息 | Authentication: Bearer dfsdfsdfsdfs... |
Cache-Control | 用來指定當前請求是否使用緩存 | cache-control:no-cache |
connection | 客戶端想要使用的鏈接類型 | connection:keep-alive |
cookie | 向服務器提供 cookie | cookie:name=value;name2=value2 |
content-length | 請求正文的長度 | content-length:348 |
content-type | 請求正文的 MIME 類型 | content-type:application/json |
date | 發送該消息的日期和時間 | date:dec.26 |
host | 服務器主機名以及使用的端口號 | - |
if-match | 僅當客戶端提供的值與服務器上對應的值相匹配時,才進行對應的操做 | if-match:"12314" |
if-modified-since | 容許當請求資源未被修改時, 返回 304 not modified 代碼 | - |
origin | 用於發起一個跨域的資源共享請求 | Origin:http://www.domain.com |
Proxy-Authorization | 用於向代理進行認證的認證信息 | Proxy-Authorization: Basic xxxx |
User-Agent | 用於瀏覽器表示身份的字符串 | User-Agent:xxx |
head | desc | example |
---|---|---|
Allow | 用於指定資源容許的操做 | Allow: Get |
Cache-control | 指明該響應使用的緩存機制 | Cache-control:max-age=3600 |
Connection | 針對該連接所預期的選項 | connection:close |
content-encoding | 響應正文所使用的編碼類型 | content-encoding:gzip |
content-type | 響應正文的MIME類型 | content-type:text/html;charset=utf-8 |
除此外, 還有 http 的狀態碼, 表示不一樣的請求的響應對應的狀態.瀏覽器