ElasticSearch API RESTful 風格和web開發中RESTful風格對比

正常RESTful風格的應用支持以下四種HTTP操作:

GET: 查詢

POST: 新增。

PUT: 修改。

DELETE: 刪除 

其中PUT和DELETE,天生滿足冪等性。而POST本身是非冪等的,如果要滿足冪等性,比如防止客戶在頁面連續點擊了多次提交按鈕去數據庫插入數據,需要我們程序自己去設計,來防止同一份數據在數據庫存了多條。比如可以使用提交的數據攜帶token的方式,如果發現token相同,則不重複處理。

WEB開發

正常WEB開發時,按說如果設計成RESTful風格,那上面四種操作都會使用。但是由於各種歷史原因,或者有的老版本瀏覽器或者應用服務器(比如Tomcat)對PUT和DELETE支持的不夠好,應用頁面一般還是使用GET和POST兩種方式提交HTTP請求比較多:用GET讀,用POST寫(包含增、刪、改)。

ElasticSearch API

ES的API雖然號稱也是RESful風格的,但是根WEB開發常用的還是不太一樣。

ES裏post幾種應用場景

1). 新增(不指定doc id),比如:

 POST student/_doc

{

  "name": "Kevin",

  "AGE": 22

}

ES 會自動幫助你生成一個id

 

2)修改文檔部分內容,比如:

POST student/_doc/tNVExG4BPVlby6t3Hx1i/_update

{

  "doc": {

    "name": "Kevin zhang"

  }

}

3)替換已有的文檔

先查詢:

GET student/_doc/tNVExG4BPVlby6t3Hx1i

{

  "_index": "student",

  "_type": "_doc",

  "_id": "tNVExG4BPVlby6t3Hx1i",

  "_version": 23,

  "found": true,

  "_source": {

    "name": "Kevin zhang",

    "AGE": 22

  }

}

替換:

POST student/_doc/tNVExG4BPVlby6t3Hx1i

{

  "name": "tom tian",

  "AGE": 23,

  "sex": "male"

}

再查:

GET student/_doc/tNVExG4BPVlby6t3Hx1i

{

  "_index": "student",

  "_type": "_doc",

  "_id": "tNVExG4BPVlby6t3Hx1i",

  "_version": 24,

  "found": true,

  "_source": {

    "name": "tom tian",

    "AGE": 23,

    "sex": "male"

  }

}

ES裏PUT有幾種應用場景

1) 新增:

a) 新增index (順便可以帶上index map結構),比如

PUT /student

{

  "mappings": {

    "_doc":{

      "properties":{

        "name":{

          "type":"text"

        },

        "age":{

          "type":"short"          

        }

      }

    }

  }

}

b) 新增document, 但是必須手工指定id,否則執行不成功,比如:

put student/_doc/1

{

  "name": "John Wang",

  "age": 24

}

 

GET student/_doc/1

 

{

  "_index": "student",

  "_type": "_doc",

  "_id": "1",

  "_version": 1,

  "found": true,

  "_source": {

    "name": "John Wang",

    "age": 24

  }

}

 

c) 替換已有文檔,這點和POST一樣,需要指定文檔id。只是put沒有post那樣更新部分文檔字段的功能。

ES 的DELETE和GET操作

這個沒有什麼特別的,DELETE操作就是刪除,GET就是查詢。

綜上,在ES裏邊, post和put都可以實現新增功能,也都可以實現更新功能(替換也算是一種更新),只是post可以實現部分更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章