Swift API和Command

Restful API使用描述 

使用限制

 Account(账户)   Container(容器)   Object(对象)    metadata(元数据)

  1. 元数据(metadata)的总个数不能大于90个,且所有元数据总大小不能超过4KB
  2. 元数据名字长度不能大于128个字节
  3. 元数据值的长度不能大于256个字节
  4. 对象最大不能超过5G,超过则需要分割后在上传
  5. 对象名字的总长度不能超过1024个字节
  6. 账户名字的总长度不能超过256个字节
  7. 容器名字的总长度不能超过256个字节
  8. 列取账户中容器的时候一次返回容器个数最大为10000个,如果账户中有超过10000个容器的则需要采用分批获取的方式来获取,列取容器中的对象也一样
  9. 账户名、容器名、对象名和元数据都需要是utf-8或者unicode编码
  10. iQiyi内部的Swift已将对象的自动过期功能取消
  11. 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

 然后可以匿名访问这个容器和下面的对象了

wget http://10.23.70.127:8080/v1/AUTH_f02c22db84c54525927353bab5d36b38/containertest2/setuptools-1.0.tar.gz


设置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有读的权限

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值