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都可以实现新增功能,也都可以实现更新功能(替换也算是一种更新)。区别是:

1. post可以实现部分更新。

2. put 不管是新增或更新,都必须携带id。put带上id,如果已存在有相同id的document,则是更新操作。如果没有,则是新增操作。

3. 而post则可带可不带,如果post带上id,如果已存在有相同id的document,则更新, 如果没有,则新增。如果post不带id,则永远是新增,所以post不满足幂等性。

3. 因为put必须携带ID,所以他保证了幂等性,而post由于不带id时,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值