關於restful開發的疑惑

  if  你沒有了解過restful  return;html

1、疑惑

  restful風格開發是有爭議的,restful的設計是請求「resource」,而後只能對「resource」作CRUD操做。抽象於這四種操做 根本沒法知足太多太多的業務場景,現實的不少不少業務根本沒法融入到restful的規範中。比方說,user login / reset password等等。java

  restful的信徒,他們會說能夠把它們都歸併到CRUD中的一種規範中。這在我看來,純粹是在解決一些本來不存在,根本不須要解決的問題,純浪費......(此處省略N個字,詳情點擊https://www.zhihu.com/question/28570307);緩存

2、解決疑惑

  可是話說回來,不少企業都在使用restful,因此咱們仍是有必要必定的去理解它,而且儘可能使解決其中的爭議。安全

  大部分人使用restful風格開發時把POST、GET、PUT、DELETE直接對應上CRUD,基本是正確的,其中部分有錯誤,不少人都是跟風,並無理解其真正的含義。我總結了如下4點用於restful開發:restful

一、POST和PUT的區別

  操做(更新或者新增)的資源的名稱(URI,地址)是否由客戶端決定。若是時客戶端決定那麼用PUT,反之用POST。例如爲個人博文增長一個java的分類,生成的路徑就是 分類名/categories/java,那麼就能夠採用PUT方法,而分類名是在服務端生成的,路徑是 categories/java/add麼用POST。負載均衡

二、特別業務操做的使用

  當有的業務操做,沒法抽象成CRUD時,建議直接使用GET或者POST便可;異步

三、POST、GET、PUT、DELETE 使用時的特性

GET spa

    • 安全且冪等
    • 獲取表示
    • 變動時獲取表示(緩存)

POST設計

    • 不安全且不冪等
    • 使用服務端管理的(自動產生)的實例號建立資源
    • 建立子資源
    • 部分更新資源
    • 若是沒有被修改,則不過更新資源(樂觀鎖)

PUTrest

    • 不安全但冪等
    • 用客戶端管理的實例號建立一個資源
    • 經過替換的方式更新資源
    • 若是未被修改,則更新資源(樂觀鎖)

DELETE

    • 不安全但冪等
    • 刪除資源

四、POST、GET、PUT、DELETE 使用時的狀態碼

GET

    • 200(OK) - 表示已在響應中發出
    • 204(無內容) - 資源有空表示
    • 301(Moved Permanently) - 資源的URI已被更新
    • 303(See Other) - 其餘(如,負載均衡)
    • 304(not modified)- 資源未更改(緩存)
    • 400 (bad request)- 指代壞請求(如,參數錯誤)
    • 404 (not found)- 資源不存在
    • 406 (not acceptable)- 服務端不支持所需表示
    • 500 (internal server error)- 通用錯誤響應
    • 503 (Service Unavailable)- 服務端當前沒法處理請求

POST

    • 200(OK)- 若是現有資源已被更改
    • 201(created)- 若是新資源被建立
    • 202(accepted)- 已接受處理請求但還沒有完成(異步處理)
    • 301(Moved Permanently)- 資源的URI被更新
    • 303(See Other)- 其餘(如,負載均衡)
    • 400(bad request)- 指代壞請求
    • 404 (not found)- 資源不存在
    • 406 (not acceptable)- 服務端不支持所需表示
    • 409 (conflict)- 通用衝突
    • 412 (Precondition Failed)- 前置條件失敗(如執行條件更新時的衝突)
    • 415 (unsupported media type)- 接受到的表示不受支持
    • 500 (internal server error)- 通用錯誤響應
    • 503 (Service Unavailable)- 服務當前沒法處理請求

PUT

    • 200 (OK)- 若是已存在資源被更改
    • 201 (created)- 若是新資源被建立
    • 301(Moved Permanently)- 資源的URI已更改
    • 303 (See Other)- 其餘(如,負載均衡)
    • 400 (bad request)- 指代壞請求
    • 404 (not found)- 資源不存在
    • 406 (not acceptable)- 服務端不支持所需表示
    • 409 (conflict)- 通用衝突
    • 412 (Precondition Failed)- 前置條件失敗(如執行條件更新時的衝突)
    • 415 (unsupported media type)- 接受到的表示不受支持
    • 500 (internal server error)- 通用錯誤響應
    • 503 (Service Unavailable)- 服務當前沒法處理請求

DELETE

    • 301 (Moved Permanently)- 資源的URI已更改
    • 303 (See Other)- 其餘,如負載均衡
    • 400 (bad request)- 指代壞請求
    • 404 (not found)- 資源不存在
    • 409 (conflict)- 通用衝突
    • 500 (internal server error)- 通用錯誤響應
    • 503 (Service Unavailable)- 服務端當前沒法處理請求

原文連接地址http://www.runoob.com/w3cnote/restful-architecture.html

相關文章
相關標籤/搜索