swift API的使用

最近楼主要使用swift的API接口,楼主有一个习惯,不管开发需要用到什么知识,都喜欢看官方文档,虽然大部分是英文,但是用起来还是感觉可靠,不过对于openstack给的swift API接口,可叫我吃了不少苦,所以写下这篇文章希望给有同样困惑的朋友帮助。

openstack官网有专门的开发者文档介绍如何使用curl操作swift(http://docs.openstack.org/api/openstack-object-storage/1.0/content/),虽然有部分接口有问题,不过大部分写的比较详细还是值得借鉴的。

1.curl的使用

首先,我们需要知道swift提供的标准API都是通过curl工具完成的,比如说PUT,GET,POST等等。

对于curl的使用这里简单说下,具体详细情况,可以通过man工具或者百度和谷歌自己丰富自己。

curl基本命令:

-H <line> 自定义头信息传递给服务器

-i 输出时bao阔protocol头信息

-k 允许不使用证书到SSL站点

-v 显示详细信息

-X<command> 指定命令

-d<data> HTTP POST方式传送数据

2.使用curl操作switf接口

由于楼主搭建的是keystone的主机所以通过以下命令获取token:
$curl -d '{"auth":{"tenantName": "DA","passwordCredentials":{"username": "system","password": "123456"}}}' -H "Content-type:application/json" http://192.168.120.104:5000/v2.0/tokens |python -m json.tool
tenantName,username,password都是之前自己已经设置好的直接替换就可以。
获得的结果如下:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1377 100 1282 100 95 9382 695 --:--:-- --:--:-- --:--:-- 9426
{
"access": {
"Metadata": {
"is_admin": 0,
"roles": [
"9fe2ff9ee4384b1894a90878d3e92bab",
"d10801a102c141e585f80d75692faeca",
"be6b8f0d5ea049618ac29e109a320271"
]
},
"serviceCatalog": [
{
"endpoints": [
{
"adminURL": "http://192.168.120.104:8080/v1",
"id": "3d5f39395faa4b368d8dafee2ef6338c",
"internalURL": "http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec",
"publicURL": "http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "swift",
"type": "object-store"
},
{
"endpoints": [
{
"adminURL": "http://192.168.120.104:35357/v2.0",
"id": "1d8c83a975ac46afb6f950a152029a1e",
"internalURL": "http://192.168.120.104:5000/v2.0",
"publicURL": "http://192.168.120.104:5000/v2.0",
"region": "RegionOne"
}
],
"name": "keystone",
"type": "identity"
}
],
"token": {
"expires": "2016-02-02T10:47:22Z",
"id": "f2510429420f443e8815bb06012d070d",
"issued_at": "2016-02-02T09:47:22.974729",
"tenant": {
"description": "dam tenant",
"enabled": true,
"id": "1cfaab6763b04ebca93e8870436cd8ec",
"name": "da"
}
},
"user": {
"id": "76ea45ed8af74fbd9538e740dcbcd97a",
"name": "system",
"roles": [
{
"name": "_member_"
},
{
"name": "DA System Managers"
},
{
"name": "admin"
}
],
"roles_links": [],
"username": "system"
}
}
}
注意红色的俩行接下我们使用API所用到的权限。
token: f2510429420f443e8815bb06012d070d
publicURL: f2510429420f443e8815bb06012d070d

3.account操作

	查看当前的存储信息:
	$curl -k -i -X GET -H 'X-Auth-Token:f2510429420f443e8815bb06012d070d' http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec
	获取结果如下:
	
 创建container
	$curl -i -X PUT -H 'X-Auth-Token:f2510429420f443e8815bb06012d070d' http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec/lyw_test_vol
	
 现在用上边的命令可以看到俩个container了。
	格式化输出获取的container信息
	$curl -k -i -X GET -H 'X-Auth-Token:f2510429420f443e8815bb06012d070d' http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec?format=json 注:json格式熟悉python的应该都清楚。
	查看container的元数据:
	写到这里由于swift的token是时时更新的,所以楼主必须用新的token值才能获取到正确结果,若以大家要明白。
	$curl -k -i -X HEAD -H 'X-Auth-Token:0139369a54634743ab4526a3b48ed3aa' http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec/vol0000
	
 删除container:
	$curl -k -i -X DELETE -H 'X-Auth-Token:0139369a54634743ab4526a3b48ed3aa' http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec/vol0000

4.object操作

上传一个object到container中,switf先把这个object传到缓存中然后才传到相应的位置,在缓存中最小单位是object我们是看不到这个东西的,不过传到continer中最小单位就是file了我们是可以看到这个东西的,可以完整的put和get获取其中的数据和元数据。
创建object
$ curl -k -i -X PUT -T "hello.txt" -H 'X-Auth-Token:f2510429420f443e8815bb06012d070d' http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec/vol0000/hello.txt
下载刚才上传的object
$curl -k -i -X GET -H 'X-Auth-Token:0139369a54634743ab4526a3b48ed3aa'/ http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec/vol0000/hello.txt>1
删除object
$curl -k -i -X DELETE -H 'X-Auth-Token:0139369a54634743ab4526a3b48ed3aa'/ http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec/vol0000/hello.txt
objectMetadata操作
$curl -k -i -X POST -H 'X-Auth-Token:0139369a54634743ab4526a3b48ed3aa' -H 'X-Object-Meta-Breed:helloinfo' http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec/vol0000/hello.txt
读取元数据信息:
$curl -k -i -X HEAD -H 'X-Auth-Token:0139369a54634743ab4526a3b48ed3aa' http://192.168.120.104:8080/v1/AUTH_1cfaab6763b04ebca93e8870436cd8ec/vol0000/hello.txt

swift接口的使用的更多相关文章

  1. Html5页面二次分享的实现

    这篇文章主要介绍了Html5页面二次分享的实现的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5跳转小程序wx-open-launch-weapp的示例代码

    这篇文章主要介绍了HTML5跳转小程序wx-open-launch-weapp的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. ios – Objective C接口,委托和协议

    所以我试图围绕Objctive-C接口,代理和协议.所以我有一个问题:委托是否必须在单独的文件中,或者它是否是您班级中定义的方法?协议就像java接口吗?

  4. ios – 如何处理退款/取消应用内购买

    我正在尝试处理iOS的退款应用内购买.但我找不到明确的指导方针来做到这一点.所以我有一个会员类型的应用程序内购买功能,其中用户凭据不一定与itunes帐户绑定.当有人进行购买时,我可以参考哪种标识符,并且当他们通过苹果申请退款时具有相同的标识符?我需要立即取消会员资格.谢谢!解决方法我最终存储了收据字符串并运行cron来完成事务并查找取消字段.

  5. ios – watchOS错误:控制器的接口描述中的未知属性

    解决方法创建IBOutlet作为WKInterfacePicker的属性,您将不会收到消息.

  6. 泛型 – MonoTouch和支持变体通用接口

    如果是这样,MonoTouch中针对这种情况的推荐解决方法是什么?解决方法这实际上取决于编译器而不是Mono版本.IOW有些东西可能适用于Mono2.10而不适用于MonoTouch6.x.当前版本的MonoTouch附带了smcs编译器和基于2.1的配置文件.较新的功能,如协方差,需要一个完整的4.0编译器和运行时.未来版本的MonoTouch将提供4.0/4.5运行时和编译器.

  7. ios – 用于 – 在Counterparts中的ViewController.swift(接口)文件是什么

    有人可以这么善良并解释这个文件的目的是什么?

  8. ios6 – 检测UIViewController上的接口旋转,即使未在 – (NSUInteger)supportedInterfaceOrientations中定义

    解决方法尝试使用UIDevice实例来检测设备物理方向的变化.要开始接收通知,您可以使用类似的内容:要取消注册接收设备旋转事件,请使用此选项:这是deviceDidRotate函数的一个例子:

  9. 接口和扩展

    classSimpleClass:ExampleProtocol{String="Averysimpleclass."varanotherProperty:Int=120funcadjust(){simpleDescription+="Now100%adjust."}funcadd(){simpleDescription+="Now50%add."}}vara=SimpleClass()a.adjust()letaDescription=a.simpleDescriptionstructSimpleStr

  10. swift类和接口的使用

    1类的使用2接口的使用

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部