ES 中的 POST 和 PUT 的區別

0、什麼是Restful架構

比較難說清楚,這部分大霧狀態,引ruanyf 理解RESTful架構 的幾句總結吧:html

Fielding將他對互聯網軟件的架構原則,定名爲REST,即Representational State Transfer的縮寫。我對這個詞組的翻譯是"表現層狀態轉化"。git

RESTful API 設計指南 中也提到了一些命名規範、HTTP動詞、狀態碼之類的基礎概念,在本文中不是重點,再也不贅述。github

一、冪等操做

冪等(idempotent、idempotence)是一個數學與計算機學概念,常見於抽象代數中。
在編程中.一個冪等操做的特色是其任意屢次執行所產生的影響均與一次執行的影響相同。冪等函數,或冪等方法,是指能夠使用相同參數重複執行,並能得到相同結果的函數。這些函數不會影響系統狀態,也不用擔憂重複執行會對系統形成改變。

二、POST和PUT的區別

HTTP的其餘幾個動詞GET、DELETE等就不詳談了,這裏主要說下POST和PUT。web

在操做時的區別以下:編程

POST /uri 建立
DELETE /uri/xxx 刪除 PUT /uri/xxx 更新或建立 GET /uri/xxx 查看

POST不用加具體的id,它是做用在一個集合資源之上的(/uri),而PUT操做是做用在一個具體資源之上的(/uri/xxx)。api

在ES中,若是不肯定document的ID(documents具體含義見下),那麼直接POST對應uri( 「POST /website/blog」 ),ES能夠本身生成不會發生碰撞的UUID;服務器

若是肯定document的ID,好比 「PUT /website/blog/123」,那麼執行建立或修改(修改時_version版本號提升1) restful

ES與DB的層級關係類比

ES:indices --> types --> documents --> fields
DB:databases --> tables --> rows --> columns

 

在冪等性的區別以下:架構

PUT、GET、DELETE是冪等的,因爲同一條這樣的指令,執行屢次結果都同樣。好比 PUT /uri/xxx 屢次,那麼結果和這條指令執行一次效果同樣。ide

而POST是非冪等的,執行屢次更改屢次服務器狀態。好比POST /uri 屢次,那麼生成多個UUID的document,執行屢次效果固然和執行一次不同了~

 

參考:

Rest模式——get,put,post,delete含義與區別

Elastic Search基本知識

相關文章
相關標籤/搜索