Restful API使用描述
使用限制
Account(账户) Container(容器) Object(对象) metadata(元数据)
- 元数据(metadata)的总个数不能大于90个,且所有元数据总大小不能超过4KB
- 元数据名字长度不能大于128个字节
- 元数据值的长度不能大于256个字节
- 对象最大不能超过5G,超过则需要分割后在上传
- 对象名字的总长度不能超过1024个字节
- 账户名字的总长度不能超过256个字节
- 容器名字的总长度不能超过256个字节
- 列取账户中容器的时候一次返回容器个数最大为10000个,如果账户中有超过10000个容器的则需要采用分批获取的方式来获取,列取容器中的对象也一样
- 账户名、容器名、对象名和元数据都需要是utf-8或者unicode编码
- iQiyi内部的Swift已将对象的自动过期功能取消
- HTTP请求的头总大小不能超过8KB
获取token
接口名称: | 获取一个token ID |
接口定义: | curl -X POST -d ' {"auth": {"tenantName": “{租户名}”, "passwordCredentials": { "username": “{用户名}”, "password": “{用户密码}”} } }' -H "Content-type: application/json" http://localhost:5000/v2.0/tokens | python -mjson.tool |
传入参数定义: | {"tenantName": “{租户名}”, "passwordCredentials": { "username": “{用户名}”, "password": “{用户密码}”} } |
返回结果: | 返回结果很长,token字段如下: "token": { "expires": "2013-07-20T08:15:57Z", "id": "c38bcd05c19a4ec7b7f8d0c58b110aac", "tenant": { "description": null, "enabled": true, "id": "321879173bf44366a76ba34e84d71d00", "name": "service" } }, 在以下的接口操作中,都需要从该token中获取它的id,以及其对应租户(tenant)的id。 |
协议: | http |
示例: | keystone: curl -X POST -d '{"auth": {"tenantName": "service", "passwordCredentials":{"username": "root", "password": "passwd"}}}' -H "Content-type: application/json" http://10.23.70.116:35357/v2.0/tokens | python -mjson.tool tempauth: curl -k -v -H 'X-Storage-User: vtc:vtc' -H 'X-Storage-Pass: transcode' http://10.121.56.114:8080/auth/v1.0 |
存储状态查询
接口名称: | 存储状态查询 |
接口定义: | curl -s http://localhost:8080/v1/AUTH_{Tenant_id} \ -X HEAD \ -D -\ -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Token_id:租户对应的token的id |
返回结果: | 返回当前租户容器和对象数量 |
协议: | http |
示例: | curl -s http://10.23.70.117:80/v1/AUTH_5a7bfc63f66c4c6cbdb6c744900c3e09 -X HEAD -D - -H "X-Auth-Token: a3301390309943818d35816fefea50c5" |
获取容器列表
接口名称: | 获取容器列表 |
接口定义: | curl -s http://localhost:8080/v1/AUTH_{Tenant_id} \ -X GET \ -D -\ -H "X-Auth-Token: { Token_id}" 如果需要指定输出几个容器可以在加上后缀?limit=number 如果需要指定格式,加上后缀?format=json |
传入参数定义: | Tenant_id:租户id Token_id:租户对应的token的id |
返回结果: | 返回当前租户下所有的容器 |
协议: | http |
示例: | curl -s http://10.23.70.116:8080/v1/AUTH_321879173bf44366a76ba34e84d71d00 -X GET -H "X-Auth-Token: 1cb6d6b77ef54274870490b5f1e5e6a3" |
创建容器
接口名称: | 创建容器 |
接口定义: | curl -s http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_name} \ -X PUT \ -D -\ -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Container_name: 所创建的容器名称 Token_id:租户对应的token的id |
返回结果: | 如果创建成功,返回“201 Created” |
协议: | http |
示例: | curl -s http://10.23.70.116:8080/v1/AUTH_321879173bf44366a76ba34e84d71d00/testcontainer2 -X PUT -H "X-Auth-Token: 1cb6d6b77ef54274870490b5f1e5e6a3" |
查看容器的metadata
接口名称: | 查看容器的metadata |
接口定义: | curl -i -s http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_name} \ -X HEAD \ -D -\ -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Container_name: 所删除的容器名称 Token_id:租户对应的token的id |
返回结果: | 返回container的matadata。 |
协议: | http |
示例: | curl -i -s http://10.23.70.117:80/v1/AUTH_5a7bfc63f66c4c6cbdb6c744900c3e09/codecloud -X HEAD -D - -H "X-Auth-Token: a3301390309943818d35816fefea50c5" |
删除容器
接口名称: | 删除容器 |
接口定义: | curl -s http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_name} \ -X DELETE \ -D - -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Container_name: 所删除的容器名称 Token_id:租户对应的token的id |
返回结果: | 如果删除成功,什么也没返回。可以使用列出容器的api验证。 |
协议: | http |
示例: | curl -s http://10.23.70.116:8080/v1/AUTH_321879173bf44366a76ba34e84d71d00/testcontainer2 -X DELETE -D - -H "X-Auth-Token: 1cb6d6b77ef54274870490b5f1e5e6a3" |
列出对象
接口名称: | 列出容器对象 |
接口定义: | curl -s http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_name}[?parm=value] \ -X GET \ -D - -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Container_name: 容器名称 Token_id:租户对应的token的id |
返回结果: | 如果容器中的对象超过10000,则默认返回按字母排序的前10000个对象,关于如何返回后面的对象请参考OpenStack Swift官方API |
协议: | http |
示例: | curl -s http://10.23.70.116:8080/v1/AUTH_321879173bf44366a76ba34e84d71d00/testcontainer -X GET -D - -H "X-Auth-Token: 1cb6d6b77ef54274870490b5f1e5e6a3" |
创建对象
接口名称: | 创建对象 |
接口定义: | curl –X PUT -i \ -D - -H "X-Auth-Token: { Token_id}" \ -T {obj_path} \ http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_name}/{obj_name} |
传入参数定义: | Tenant_id:租户id Obj_path:对象的完整路径 obj_name:对象名称 Container_name: 容器名称 Token_id:租户对应的token的id |
返回结果: | <html> <head> <title>201 Created</title> </head> <body> <h1>201 Created</h1> <br /><br /> </body> </html> |
协议: | http |
示例: | curl -s http://10.23.70.116:8080/v1/AUTH_321879173bf44366a76ba34e84d71d00/testcontainer/install.log -T ~/install.log -X PUT -D - -H "X-Auth-Token: 1cb6d6b77ef54274870490b5f1e5e6a3" |
删除对象
接口名称: | 删除对象 |
接口定义: | curl -s http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_id}/{object_name} \ -X DELETE \ -D - -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Obj_name:对象名称 Container_name: 所删除的容器名称 Token_id:租户对应的token的id |
返回结果: | 无返回 |
协议: | http |
示例: | curl -s http://10.23.70.116:8080/v1/AUTH_321879173bf44366a76ba34e84d71d00/testcontainer/install.log -X DELETE -D - -H "X-Auth-Token: 1cb6d6b77ef54274870490b5f1e5e6a3" |
下载对象
接口名称: | 下载对象 |
接口定义: | curl -s http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_id}/{object_name} >Dest path\ -X GET -D -\ -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Obj_name:对象名称 Container_name: 所删除的容器名称 Token_id:租户对应的token的id Dest path:下载到的目标文件的path |
返回结果: | 无返回 |
协议: | http |
示例: | curl -s http://10.23.70.116:8080/v1/AUTH_321879173bf44366a76ba34e84d71d00/testcontainer/remi-release-6.rpm>~/backup2/remi-release-6.rpm -X GET -H "X-Auth-Token: 1cb6d6b77ef54274870490b5f1e5e6a3" |
查看对象metadata
接口名称: | 查看对象的metadata |
接口定义: | curl -k -i -s http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_id}/{object_name} \ -X HEAD -D -\ -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Obj_name:对象名称 Container_name: 所删除的容器名称 Token_id:租户对应的token的id |
返回结果: | 在HTTP头中返回对象的metadata,自定义的metadata都带有X-Object-Meta前缀 |
协议: | http |
示例: | curl -k -i -s http://10.23.70.117:80/v1/AUTH_5a7bfc63f66c4c6cbdb6c744900c3e09/codecloud/install.log -X HEAD -D - -H "X-Auth-Token: a3301390309943818d35816fefea50c5" |
更新对象metadata
接口名称: | 更新对象的metadata,一个对象的所有metadata总大小不能超过4KB,而且metadata个数不能超过90个 |
接口定义: | curl -k -i -s http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_id}/{object_name} \ -X POST \ -H "X-Object-Meta-metadata_name:new_value" \ -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Obj_name:对象名称 Container_name: 所删除的容器名称 Token_id:租户对应的token的id |
返回结果: | 返回202,表示accepted |
协议: | http |
示例: | curl -k -i -s http://10.23.70.117:80/v1/AUTH_5a7bfc63f66c4c6cbdb6c744900c3e09/codecloud/install.log -H "X-Timestamp:1375243435.75728" -X POST -H "X-Auth-Token: a3301390309943818d35816fefea50c5" |
Command的使用
swift提供的命令行接口进行操作。
command | function | example |
stat [container] [object] | 获取容器或者对象的状态信息 | swift -V 2 -A http://10.23.70.116:5000/v2.0 -U service:root -K passwd stat |
list [options] [container] | 获取容器的对象列表 | swift -V 2 -A http://10.23.70.116:5000/v2.0 -U service:root -K passwd list codecloud |
upload [options] container file_or_directory [file_or_directory] [...] | 上传对象到指定容器 | swift -V 2 -A http://10.23.70.116:5000/v2.0 -U service:root -K passwd upload codecloud install.log |
post [options] [container] [object] | 对容器,账号和对象的metadata进行修改,如果没有,就会创建一个新容器。 | swift -V 2 -A http://10.23.70.116:5000/v2.0 -U service:root -K passwd post codecloudnew |
download --all OR download container [options] [object] [object] | 下载对象 | swift -V 2 -A http://10.23.70.116:5000/v2.0 -U service:root -K passwd downlaod codecloud install.log |
delete [options] --all OR delete container [options] [object] [object] ... | 删除对象 | swift -V 2 -A http://10.23.70.116:5000/v2.0 -U service:root -K passwd delete codecloud install.log |
关于Api更多的细节参考:http://docs.openstack.org/api/openstack-object-storage/1.0/content/
设置匿名读取或者put某个container和下面的object
接口名称: | 匿名读取container及其下面的object |
接口定义: | curl -k -i -s http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_id}/\ -X PUT \ -H "X-Container-Read: .r:*"\ -H "X-Container-Write: .r:*"\ -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Container_name: 所删除的容器名称 Token_id:租户对应的token的id |
返回结果: | 返回201,表示成功 |
协议: | http |
示例: | curl -s http://10.23.70.127:8080/v1/AUTH_f02c22db84c54525927353bab5d36b38/containertest2 -X PUT -H "X-Container-Read: .r:*,.rlistings" -H "X-Auth-Token: ae93a81d50d643d8ae4d8cef67f667fb curl -s http://10.153.88.41:8080/v1/AUTH_e24d47652113493686492d2e7c04e601/hotchatting-X PUT -H "X-Container-Write: .r:*" -H "X-Auth-Token: 1ed0e9900cd84ecc9f6b71f3d7b2726c
|
Next, if you use keystone you need(!!!!) to set in /etc/swift/proxy-server.conf
[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
# Delaying the auth decision is required to support token-less
# usage for anonymous referrers (‘.r:*’).
delay_auth_decision = 1
然后可以匿名访问这个容器和下面的对象了
设置container读和写的权限
接口名称: | 设置container读和写的权限(单独设置某一个账号对这个container的读或者写(读)的权限 |
接口定义: | curl -k -i -s http://localhost:8080/v1/AUTH_{Tenant_id}/{Container_id}/\ -X PUT \ -H "X-Container-Read: tenant_name:account_name"\ -H "X-Container-Write:tenant_name:account_name"\ -H "X-Auth-Token: { Token_id}" |
传入参数定义: | Tenant_id:租户id Container_name: 所删除的容器名称 Token_id:租户对应的token的id |
返回结果: | 返回201,表示成功 |
协议: | http |
示例: | curl -k -i -s http://10.23.70.127:8080/v1/AUTH_b9d8185513404fc7a85db0a257e2142a/testcontainer -H 'X-Container-Read: containertest:share1' -X PUT -D - -H "X-Auth-Token: 5d95cfbfe970498188fb0c568ed0670a" #containertest:share1这个账户对testcontainer有读的权限 |