比較難說清楚,這部分大霧狀態,引ruanyf 理解RESTful架構 的幾句總結吧:html
Fielding將他對互聯網軟件的架構原則,定名爲REST,即Representational State Transfer的縮寫。我對這個詞組的翻譯是"表現層狀態轉化"。git
RESTful API 設計指南 中也提到了一些命名規範、HTTP動詞、狀態碼之類的基礎概念,在本文中不是重點,再也不贅述。github
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,執行屢次效果固然和執行一次不同了~