etcd api 接口
Posted doscho
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了etcd api 接口相关的知识,希望对你有一定的参考价值。
etcd api接口
采用标准的restful 接口,支持http 和 https 两种协议。
1. PUT 为etcd存储的键赋值, 即创建 message 键值,赋值为"Hello world"
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/message -X PUT -d value="Hello world" | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 119 100 102 100 17 38230 6371 --:--:-- --:--:-- --:--:-- 51000 5 { 6 "action": "set", 7 "node": { 8 "createdIndex": 30, 9 "key": "/message", 10 "modifiedIndex": 30, 11 "value": "Hello world" 12 } 13 }
2. GET 查询etcd某个键存储的值
[[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/message | python -m json.tool % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 102 100 102 0 0 64110 0 --:--:-- --:--:-- --:--:-- 99k { "action": "get", "node": { "createdIndex": 19, "key": "/message", "modifiedIndex": 19, "value": "Hello world" } }
3. PUT 修改键值:与创建新值几乎相同,但是反馈时会有一个prevNode
值反应了修改前存储的内容。
[[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/message -X PUT -d value="RECREATE" | python -m json.tool % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 202 100 188 100 14 57108 4252 --:--:-- --:--:-- --:--:-- 62666 { "action": "set", "node": { "createdIndex": 33, "key": "/message", "modifiedIndex": 33, "value": "RECREATE" }, "prevNode": { "createdIndex": 32, "key": "/message", "modifiedIndex": 32, "value": "Hello world" } }
4. DELETE 删除一个值
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/message -X DELETE | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 177 100 177 0 0 73261 0 --:--:-- --:--:-- --:--:-- 172k 5 { 6 "action": "delete", 7 "node": { 8 "createdIndex": 19, 9 "key": "/message", 10 "modifiedIndex": 29 11 }, 12 "prevNode": { 13 "createdIndex": 19, 14 "key": "/message", 15 "modifiedIndex": 28, 16 "value": "test createIndex" 17 } 18 }
5. PUT 对一个键进行定时删除:etcd中对键进行定时删除,设定一个ttl值,当这个值到期时键就会被删除。反馈的内容会给出expiration项告知超时时间,ttl项告知设定的时长。
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/foo -XPUT -d value=bar -d ttl=5 | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 159 100 144 100 15 60453 6297 --:--:-- --:--:-- --:--:-- 72000 5 { 6 "action": "set", 7 "node": { 8 "createdIndex": 34, 9 "expiration": "2016-04-23T12:01:57.992249507Z", 10 "key": "/foo", 11 "modifiedIndex": 34, 12 "ttl": 5, 13 "value": "bar" 14 } 15 }
6. PUT 取消定时删除任务
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/foo -XPUT -d value=bar -d ttl= -d prevExist=true | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 254 100 225 100 29 98944 12752 --:--:-- --:--:-- --:--:-- 219k 5 { 6 "action": "update", 7 "node": { 8 "createdIndex": 38, 9 "key": "/foo", 10 "modifiedIndex": 39, 11 "value": "bar" 12 }, 13 "prevNode": { 14 "createdIndex": 38, 15 "expiration": "2016-04-23T12:07:05.415596297Z", 16 "key": "/foo", 17 "modifiedIndex": 38, 18 "ttl": 78, 19 "value": "bar" 20 } 21 }
7. GET 对键值修改进行监控:etcd提供的这个API让用户可以监控一个值或者递归式地监控一个目录及其子目录的值,当目录或值发生变化时,etcd会主动通知。
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/foo?wait=true | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 188 0 188 0 0 6 0 --:--:-- 0:00:27 --:--:-- 41 5 { 6 "action": "compareAndSwap", 7 "node": { 8 "createdIndex": 38, 9 "key": "/foo", 10 "modifiedIndex": 41, 11 "value": "monitor11" 12 }, 13 "prevNode": { 14 "createdIndex": 38, 15 "key": "/foo", 16 "modifiedIndex": 40, 17 "value": "monitor" 18 } 19 }
8. GET 对过去的键值操作进行查询:类似上面提到的监控,在其基础上指定过去某次修改的索引编号,就可以查询历史操作。默认可查询的历史记录为1000条。
waitindex的值,如果没有将支持等待,直到此值出现。删除后,有可以查询历史数据。如果当前index有prev,将显示”prevNode“节点数据。
1 [[email protected] ~]# curl ‘http://127.0.0.1:2379/v2/keys/foo?wait=true&waitIndex=2‘ | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 144 0 144 0 0 102k 0 --:--:-- --:--:-- --:--:-- 140k 5 { 6 "action": "set", 7 "node": { 8 "createdIndex": 34, 9 "expiration": "2016-04-23T12:01:57.992249507Z", 10 "key": "/foo", 11 "modifiedIndex": 34, 12 "ttl": 5, 13 "value": "bar" 14 } 15 }
9. PUT 创建目录
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/dir -XPUT -d dir=true | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 95 100 87 100 8 21260 1955 --:--:-- --:--:-- --:--:-- 29000 5 { 6 "action": "set", 7 "node": { 8 "createdIndex": 63, 9 "dir": true, 10 "key": "/dir", 11 "modifiedIndex": 63 12 } 13 }
10. GET 列出目录下所有的节点信息,最后以/
结尾(不是必须的)。还可以通过recursive参数递归列出所有子目录信息。 没有recursive,返回第二级。后面不在返回。
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/dir1/ | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 167 100 167 0 0 65234 0 --:--:-- --:--:-- --:--:-- 83500 5 { 6 "action": "get", 7 "node": { 8 "createdIndex": 67, 9 "dir": true, 10 "key": "/dir1", 11 "modifiedIndex": 67, 12 "nodes": [ 13 { 14 "createdIndex": 67, 15 "dir": true, 16 "key": "/dir1/dir2", 17 "modifiedIndex": 67 18 } 19 ] 20 } 21 }
11. POST 自动在目录下创建有序键。在对创建的目录使用POST
参数,会自动在该目录下创建一个以createdIndex值为键的值,这样就相当于根据创建时间的先后进行了严格排序。该API对分布式队列这类场景非常有用。
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/queue -XPOST -d value=Job1 | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 127 100 117 100 10 31655 2705 --:--:-- --:--:-- --:--:-- 39000 5 { 6 "action": "create", 7 "node": { 8 "createdIndex": 47, 9 "key": "/queue/00000000000000000047", 10 "modifiedIndex": 47, 11 "value": "Job1" 12 } 13 }
12. GET 按顺序列出所有创建的有序键
1 [[email protected] ~]# curl -s ‘http://127.0.0.1:2379/v2/keys/queue?sorted=true‘ | python -m json.tool 2 { 3 "action": "get", 4 "node": { 5 "createdIndex": 46, 6 "dir": true, 7 "key": "/queue", 8 "modifiedIndex": 46, 9 "nodes": [ 10 { 11 "createdIndex": 46, 12 "key": "/queue/00000000000000000046", 13 "modifiedIndex": 46, 14 "value": "" 15 }, 16 { 17 "createdIndex": 47, 18 "key": "/queue/00000000000000000047", 19 "modifiedIndex": 47, 20 "value": "Job1" 21 }, 22 { 23 "createdIndex": 48, 24 "key": "/queue/00000000000000000048", 25 "modifiedIndex": 48, 26 "value": "aaaa" 27 }, 28 { 29 "createdIndex": 49, 30 "key": "/queue/00000000000000000049", 31 "modifiedIndex": 49, 32 "value": "aaaa" 33 }, 34 { 35 "createdIndex": 50, 36 "key": "/queue/00000000000000000050", 37 "modifiedIndex": 50, 38 "value": "aaaa" 39 }, 40 { 41 "createdIndex": 51, 42 "key": "/queue/00000000000000000051", 43 "modifiedIndex": 51, 44 "value": "aaaa" 45 } 46 ] 47 } 48 }
13. 删除目录:默认情况下只允许删除空目录,如果要删除有内容的目录需要加上recursive=true
参数。
1 [[email protected] ~]# curl ‘http://127.0.0.1:2379/v2/keys/dir1?dir=true‘ -XDELETE | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 77 100 77 0 0 38557 0 --:--:-- --:--:-- --:--:-- 77000 5 { 6 "cause": "/dir1", 7 "errorCode": 108, 8 "index": 67, 9 "message": "Directory not empty" 10 } 11 [[email protected] ~]# curl ‘http://127.0.0.1:2379/v2/keys/dir1?dir=true&recursive=true‘ -XDELETE | python -m json.tool 12 % Total % Received % Xferd Average Speed Time Time Time Current 13 Dload Upload Total Spent Left Speed 14 100 166 100 166 0 0 62032 0 --:--:-- --:--:-- --:--:-- 83000 15 { 16 "action": "delete", 17 "node": { 18 "createdIndex": 67, 19 "dir": true, 20 "key": "/dir1", 21 "modifiedIndex": 68 22 }, 23 "prevNode": { 24 "createdIndex": 67, 25 "dir": true, 26 "key": "/dir1", 27 "modifiedIndex": 67 28 } 29 }
14. PUT 创建定时删除的目录:就跟定时删除某个键类似。如果目录因为超时被删除了,其下的所有内容也自动超时删除。
如果目录存在,创建时,返回 102 错误码
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/dir -XPUT -d ttl=30 -d dir=true | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 157 100 142 100 15 22873 2416 --:--:-- --:--:-- --:--:-- 28400 5 { 6 "action": "set", 7 "node": { 8 "createdIndex": 52, 9 "dir": true, 10 "expiration": "2016-04-23T13:37:51.502289114Z", 11 "key": "/dir", 12 "modifiedIndex": 52, 13 "ttl": 30 14 } 15 }
15. PUT 刷新目录超时时间
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/dir -XPUT -d ttl=30 -d dir=true -d prevExist=true | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 304 100 274 100 30 60392 6612 --:--:-- --:--:-- --:--:-- 91333 5 { 6 "action": "update", 7 "node": { 8 "createdIndex": 56, 9 "dir": true, 10 "expiration": "2016-04-23T13:42:56.395923381Z", 11 "key": "/dir", 12 "modifiedIndex": 61, 13 "ttl": 30 14 }, 15 "prevNode": { 16 "createdIndex": 56, 17 "dir": true, 18 "expiration": "2016-04-23T13:42:46.225222674Z", 19 "key": "/dir", 20 "modifiedIndex": 56, 21 "ttl": 20 22 } 23 }
16. 创建一个隐藏节点:命名时名字以下划线_
开头默认就是隐藏键。仅仅是概念上的,具体的操作没有影响。
1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/_message -XPUT -d value="Hello hidden world" | python -m json.tool 2 % Total % Received % Xferd Average Speed Time Time Time Current 3 Dload Upload Total Spent Left Speed 4 100 134 100 110 100 24 46948 10243 --:--:-- --:--:-- --:--:-- 107k 5 { 6 "action": "set", 7 "node": { 8 "createdIndex": 69, 9 "key": "/_message", 10 "modifiedIndex": 69, 11 "value": "Hello hidden world" 12 } 13 }
以上是关于etcd api 接口的主要内容,如果未能解决你的问题,请参考以下文章
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段