iOS --- 使用RestKit与RESTful web服务器进行简单交互
2015-09-07 08:07
567 查看
RestKit是一款专为iOS设计的Objective-C框架,旨在与RESTful web服务的交互变得更简单快速。它基于强大的对象映射系统,并且结合了一个干净、简单的HTTP请求/响应API,大大减少了开发人员开发过程中所需的代码量。
RestKit is a framework for consuming and modeling RESTful web resources on iOS and OS X.
主要特性:
1. 简单高层次的HTTP请求/响应系统:RestKit在NSURLConnection的基础上建立了HTTP客户端,并且提供了一个有效方法库来检测MIME类型和状态码。同时让提交表单数据变得更简单,且一个本地参数对象还能够轻松地创建多部分提交。
2. 框架支持切换服务器以及环境:RestKit使用基本的URL和资源路径,而不是完整的URL,让你可以快速地切换目标服务器。让插值URL字符串和构建NSURL对象成为了过去式。
3. Core Data支持:以对象映射层为基础,RestKit提供了与Apple的Core Data集成框架,用来扩展远程资源映射到本地的对象。还提供一个很好地基于Core Data原语的API,用来简化配置和查询用例。
4. 对象映射系统:RestKit提供了一个建模层,有利于将映射进程数据负载到原生Cocoa对象声明方式中去。这样,程序员就不用担心解析的问题,只需简单的请求框架,异步获取远程资源以及调用委托结果即可。对象映射使用的是键值编码来实现的,允许快速遍历解析后的对象图。反射是用在属性类型上,以便将远程日期编码映射为字符串返回到NSDate对象。
5. 生成数据库文件:当使用Core Data对象存储时,你可以从数据文件集合中生成一个数据库文件。这样,你就可以将你的应用以及数据库的应用程序包提交到App Store中,并且可以达到立即使用的效果。
6. 可插入解析层:RestKit目前通过SBJSON和YAJL解析器支持JSON。解析是在一个简单接口背后实现的,允许额外的数据格式进行透明处理。
简单的使用实例如下:
这样, 通过访问http://127.0.0.1:5000/json即可获取到article的数据.
结果如图:
更多使用方法请参考RestKit的github主页: RestKit.
RestKit is a framework for consuming and modeling RESTful web resources on iOS and OS X.
主要特性:
1. 简单高层次的HTTP请求/响应系统:RestKit在NSURLConnection的基础上建立了HTTP客户端,并且提供了一个有效方法库来检测MIME类型和状态码。同时让提交表单数据变得更简单,且一个本地参数对象还能够轻松地创建多部分提交。
2. 框架支持切换服务器以及环境:RestKit使用基本的URL和资源路径,而不是完整的URL,让你可以快速地切换目标服务器。让插值URL字符串和构建NSURL对象成为了过去式。
3. Core Data支持:以对象映射层为基础,RestKit提供了与Apple的Core Data集成框架,用来扩展远程资源映射到本地的对象。还提供一个很好地基于Core Data原语的API,用来简化配置和查询用例。
4. 对象映射系统:RestKit提供了一个建模层,有利于将映射进程数据负载到原生Cocoa对象声明方式中去。这样,程序员就不用担心解析的问题,只需简单的请求框架,异步获取远程资源以及调用委托结果即可。对象映射使用的是键值编码来实现的,允许快速遍历解析后的对象图。反射是用在属性类型上,以便将远程日期编码映射为字符串返回到NSDate对象。
5. 生成数据库文件:当使用Core Data对象存储时,你可以从数据文件集合中生成一个数据库文件。这样,你就可以将你的应用以及数据库的应用程序包提交到App Store中,并且可以达到立即使用的效果。
6. 可插入解析层:RestKit目前通过SBJSON和YAJL解析器支持JSON。解析是在一个简单接口背后实现的,允许额外的数据格式进行透明处理。
简单的使用实例如下:
搭建HTTP server
在这里使用Python的flask搭建一个简单的http server.# -*- coding: utf-8 -*- #!/usr/bin/python from flask import Flask, jsonify app = Flask(__name__) @app.route('/') def index(): return 'index' #使用<user>传递参数 @app.route('/hello/<user>') def hello_get(user): return 'hello get %s' % user #使用POST请求 @app.route('/hello/<user>', methods=['POST']) def hello_post(user): return 'hello post %s' % user @app.route('/json') def hotCity(): return jsonify({ 'article': { 'title': 'My Article', 'author': 'Blake', 'body': 'Very cool!!' } }) if __name__ == '__main__': app.run()
这样, 通过访问http://127.0.0.1:5000/json即可获取到article的数据.
建立Model
新建Article类, 头文件Article.h如下:#import <Foundation/Foundation.h> @interface Article : NSObject @property (nonatomic) NSString *title; @property (nonatomic) NSString *author; @property (nonatomic) NSString *body; @end
获取JSON数据
通过RestKit获取简单的JSON数据, 步骤比较固定, 如下:- (void)loadArticles { NSURL *baseURL = [NSURL URLWithString:@"http://127.0.0.1:5000"]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:baseURL]; // 1. 初始化 RestKit, 与RESTful services交互 RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:httpClient]; // 2. 建立 mappings, 用于配置JSON与本地Model的映射信息 RKObjectMapping *articleMapping = [RKObjectMapping mappingForClass:[Article class]]; // 3. 解析字段, 有多种方式. // [articleMapping addAttributeMappingsFromArray:@[@"title", @"author", @"body"]]; [articleMapping addAttributeMappingsFromDictionary:@{ @"title": @"title", @"author": @"author", @"body": @"body" }]; NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // statuscode: 2xx // register mappings with the provider using a response descriptor // pathPattern: API路径 // keyPath: 对象在JSON数据中的路径 RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:articleMapping method:RKRequestMethodGET pathPattern:@"/json" keyPath:@"article" statusCodes:[NSIndexSet indexSetWithIndex:200]]; [objectManager addResponseDescriptor:responseDescriptor]; // 4. 提交查询 NSDictionary *queryParams = nil; [[RKObjectManager sharedManager] getObjectsAtPath:@"/json" parameters:queryParams success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { _articles = mappingResult.array; NSLog(@"_articles.count : %ld", _articles.count); Article *article = [mappingResult firstObject]; NSLog(@"article : %@ - %@ - %@", article.title, article.author, article.body); } failure:^(RKObjectRequestOperation *operation, NSError *error) { NSLog(@"Failed to get articles..."); }]; }
结果如图:
更多使用方法请参考RestKit的github主页: RestKit.
相关文章推荐
- ios- 画图
- iOS7自定义视图控制器过渡1-动作过渡
- ios自动化构建
- 蓝懿iOS培训日志4 计算器的实现及学习心得
- iOS开发的就业形势及建议
- IOS KVC
- IOS 国际化 XCODE6
- iOS基础动画
- iOS中的Cocoa框架大全
- iOS百度地图打包成pod总结
- iOS-自定义归档 保存数据
- iOS 中的 NSTimer
- iOS 刚刚,几分钟前,几小时前,几天前,几月前,几年前
- iOS-偏好设置保存数据
- iOS 颜色渐变
- 创建自己的Cocoapods
- iOS-plist的保存和读取
- ios-私人通讯录 页面间的跳转和传值
- iOS设计模式——抽象工厂
- iOS开发脚踏实地学习day03-九宫图