博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift API和Command
阅读量:4090 次
发布时间:2019-05-25

本文共 7452 字,大约阅读时间需要 24 分钟。

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"  | 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"  | python -mjson.tool

 tempauth: curl -k -v -H 'X-Storage-User: vtc:vtc' -H 'X-Storage-Pass: transcode'

存储状态查询

接口名称:

存储状态查询

接口定义:

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  -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  -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  -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  -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  -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  -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

返回结果:

 
 
  201 Created
 
 
  

201 Created

  
 
 

协议:

http

示例:

 curl -s  -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  -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  -X GET -H "X-Auth-Token: 1cb6d6b77ef54274870490b5f1e5e6a3"

查看对象metadata

接口名称:

查看对象的metadata

接口定义:

curl -k -i -s
     -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 -X HEAD -D - -H "X-Auth-Token: a3301390309943818d35816fefea50c5"

更新对象metadata

接口名称:

更新对象的metadata,一个对象的所有metadata总大小不能超过4KB,而且metadata个数不能超过90个

接口定义:

curl -k -i -s
     -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 -H "X-Timestamp:1375243435.75728" -X POST -H "X-Auth-Token: a3301390309943818d35816fefea50c5"

Command的使用

swift提供的命令行接口进行操作。

 command function   example
 stat [container] [object]  获取容器或者对象的状态信息  swift -V 2 -A -U service:root -K passwd stat
 list [options] [container]  获取容器的对象列表  swift -V 2 -A -U service:root -K passwd list codecloud
 upload [options] container file_or_directory [file_or_directory] [...]  上传对象到指定容器  swift -V 2 -A -U service:root -K passwd upload codecloud install.log
 post [options] [container] [object] 对容器,账号和对象的metadata进行修改,如果没有,就会创建一个新容器。    swift -V 2 -A -U service:root -K passwd post codecloudnew
 download --all OR download container [options] [object] [object]  下载对象

 swift -V 2 -A -U service:root -K passwd downlaod codecloud  install.log

 delete [options] --all OR delete container [options] [object] [object] ...  删除对象  swift -V 2 -A -U service:root -K passwd delete codecloud install.log

关于Api更多的细节参考:

设置匿名读取或者put某个container和下面的object

接口名称:

匿名读取container及其下面的object

接口定义:

curl -k -i -s
     -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 -X PUT -H "X-Container-Read: .r:*,.rlistings" -H "X-Auth-Token: ae93a81d50d643d8ae4d8cef67f667fb   

curl -s -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

[]

paste.filter_factory = keystone.middleware.
# Delaying the auth decision is required to support token-less
# usage for anonymous referrers (‘.r:*’).
delay_auth_decision = 1

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

wget 

设置container读和写的权限

接口名称:

设置container读和写的权限(单独设置某一个账号对这个container的读或者写(读)的权限

接口定义:

curl -k -i -s
     -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  -H 'X-Container-Read: ' -X PUT -D - -H "X-Auth-Token: 5d95cfbfe970498188fb0c568ed0670a" #这个账户对testcontainer有读的权限

 

转载地址:http://vmbii.baihongyu.com/

你可能感兴趣的文章
线性数据结构学习笔记
查看>>
数据结构与算法10-冒泡排序、插入排序、选择排序
查看>>
数据结构与算法14-跳表
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
(python版)《剑指Offer》JZ06:旋转数组的最小数字
查看>>
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
查看>>
(python版)《剑指Offer》JZ28:数组中出现次数超过一半的数字
查看>>
(python版)《剑指Offer》JZ30:连续子数组的最大和
查看>>
(python版)《剑指Offer》JZ32:把数组排成最小的数
查看>>
(python版)《剑指Offer》JZ02:替换空格
查看>>
JSP/Servlet——MVC设计模式
查看>>
使用JSTL
查看>>
Java 8新特性:Stream API
查看>>
管理用户状态——Cookie与Session
查看>>
最受欢迎的前端框架Bootstrap 入门
查看>>
JavaScript编程简介:DOM、AJAX与Chrome调试器
查看>>
通过Maven进行项目构建与管理
查看>>
通过Maven管理项目依赖
查看>>
通过Spring Boot三分钟创建Spring Web项目
查看>>