0、什么是Restful架構
比較難說清楚,這部分大霧狀態,引ruanyf 理解RESTful架構 的幾句總結吧:
Fielding將他對互聯網軟件的架構原則,定名為REST,即Representational State Transfer的縮寫。我對這個詞組的翻譯是"表現層狀態轉化"。
RESTful API 設計指南 中也提到了一些命名規范、HTTP動詞、狀態碼之類的基礎概念,在本文中不是重點,不再贅述。
1、冪等操作
冪等(idempotent、idempotence)是一個數學與計算機學概念,常見於抽象代數中。
在編程中.一個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函數,或冪等方法,是指可以使用相同參數重復執行,並能獲得相同結果的函數。這些函數不會影響系統狀態,也不用擔心重復執行會對系統造成改變。
2、POST和PUT的區別
HTTP的其他幾個動詞GET、DELETE等就不詳談了,這里主要說下POST和PUT。
在操作時的區別如下:
POST /uri 創建
DELETE /uri/xxx 刪除 PUT /uri/xxx 更新或創建 GET /uri/xxx 查看
POST不用加具體的id,它是作用在一個集合資源之上的(/uri),而PUT操作是作用在一個具體資源之上的(/uri/xxx)。
在ES中,如果不確定document的ID(documents具體含義見下),那么直接POST對應uri( “POST /website/blog” ),ES可以自己生成不會發生碰撞的UUID;
如果確定document的ID,比如 “PUT /website/blog/123”,那么執行創建或修改(修改時_version版本號提高1)
ES與DB的層級關系類比 ES:indices --> types --> documents --> fields DB:databases --> tables --> rows --> columns
在冪等性的區別如下:
PUT、GET、DELETE是冪等的,由於同一條這樣的指令,執行多次結果都一樣。比如 PUT /uri/xxx 多次,那么結果和這條指令執行一次效果一樣。
而POST是非冪等的,執行多次更改多次服務器狀態。比如POST /uri 多次,那么生成多個UUID的document,執行多次效果當然和執行一次不一樣了~
參考:
Rest模式——get,put,post,delete含義與區別
