認識 REST

本節內容總結和概括 <ASP.NET CORE 與 RESTful 開發實戰> 書中的第一章節內容. 並將收錄於該系列的筆記目錄下.html

什麼是 REST

REST 中的重要概念 - 資源

REST 提出的 API 須要遵照的約束有哪些

符合如下約束的 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 則是提供一種功能的服務.

  • HTTP 協議部分

    筆者感言:
    書中提到幾乎全部的狀況下, REST 是基於 HTTP 協議實現的. 筆者也苟同, 由於本人做爲後端 API 開發時, 一般也會和 HTTP 相關的內容常常打交道. 因此深刻理解 HTTP 協議將有助於開發者開發出更好更高質量的 API. 因此對於 HTTP 不夠了解的同窗最好能夠去找找相關的專業的材料學習和鞏固一下.後端

    上圖呢是一張高度歸納了不少不少內容的圖.api

    POST 和 PUT 的區別

    • POST 是建立資源, 不安全的操做, 不是冪等
    • PUT 是更新資源, 在資源不存在時能夠建立資源, 也是不安全的操做, 是冪等
    • 這兩個均可以建立資源的.可是 POST 請求的 URI 是資源集合, 而 PUT 則是請求單個(可能不存在的)資源, 例如:

      POST http://api.appdomain.com/users
      PUT http://api.appdomain.com/users/1跨域

    PUT 與 PATCH

    • PATCH 是對資源的部分更新
    • PUT 是對資源的所有更新

    常見的請求消息頭

    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 的狀態碼, 表示不一樣的請求的響應對應的狀態.瀏覽器

    相關文章
    相關標籤/搜索