iOS开发中使用Bmob RESTful API
简介
尽管Bmob已经提供了一套SDK供开发者使用,但有时候开发者可能希望能直接与Bmob后台进行直接交互,以达到某些特别的需求(直接操作_User表、同步网络请求等)。而RESTful API可以使得只要能够发送HTTP请求的设备可以先Bmob进行数据交互。因此,在使用Bmob开发iOS应用过程中,我们也可以使用RESTful来完成交互。
使用方法
只要使用标准的HTTP请求即可。以添加对象为例,官方文档文档的描述如下:

也就是我们需要设置以下几个参数
- url
- method
- header
- body
代码如下:
//设置URL
NSURL *url = [NSURL URLWithString:@"https://api.bmob.cn/1/classes/Post"];
//设置请求方法
NSMutableURLRequest *addRequest = [[NSMutableURLRequest alloc] initWithURL:url];
[addRequest setHTTPMethod:@"POST"];
//设置请求头
[addRequest setAllHTTPHeaderFields:@{@"X-Bmob-Application-Id":APPKEY,@"X-Bmob-REST-API-Key":RESTFULKEY,@"Content-Type":@"application/json"}];
//设置body,需要转换为NSData
NSDictionary *addRequestBody = @{@"title":@"How to Use RESTful API"};
NSData *addRequestBodyData = [NSJSONSerialization dataWithJSONObject:addRequestBody options:NSJSONWritingPrettyPrinted error:nil];
[addRequest setHTTPBody:addRequestBodyData];
//发送请求
NSHTTPURLResponse *response;
NSData *data = [NSURLConnection sendSynchronousRequest:addRequest returningResponse:&response error:nil];
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//打印请求结果
NSLog(@"statusCode:%ld",(long)response.statusCode);
NSLog(@"result:%@",result);
得到的结果如下,从文档中的描述可以判断该请求是否成功响应:
statusCode:201
result:{
createdAt = "2016-01-06 10:44:58";
objectId = 8a3b9ffd9e;
}

另外,需要注意的是,如果发送的是GET请求,一般需要对参数先进行JSON编码再进行URL编码。例如使用条件查询,通过where参数进行约束,要查找出帖子的标题为“How to Use RESTful API”时,需要像下面代码那样构造请求。
//构造URL字符串
NSString *urlString = @"https://api.bmob.cn/1/classes/Post?where=";
//查询条件JSON编码
NSDictionary *queryDic = @{@"title":@"How to Use RESTful API"};
NSData *queryData = [NSJSONSerialization dataWithJSONObject:queryDic options:NSJSONWritingPrettyPrinted error:nil];
NSString *queryString = [[NSString alloc] initWithData:queryData encoding:NSUTF8StringEncoding];
urlString = [NSString stringWithFormat:@"%@%@",urlString,queryString];
//URL编码
NSString *urlEncode = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//设置URL
NSURL *url = [NSURL URLWithString:urlEncode];
NSMutableURLRequest *queryRequest = [[NSMutableURLRequest alloc] initWithURL:url];
//设置请求方法
[queryRequest setHTTPMethod:@"GET"];
//设置请求头
[queryRequest setAllHTTPHeaderFields:@{@"X-Bmob-Application-Id":APPKEY,@"X-Bmob-REST-API-Key":RESTFULKEY,@"Content-Type":@"application/json"}];
//发送请求
NSHTTPURLResponse *response;
NSData *data = [NSURLConnection sendSynchronousRequest:queryRequest returningResponse:&response error:nil];
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//打印请求结果
NSLog(@"statusCode:%ld",(long)response.statusCode);
NSLog(@"result:%@",result);
总结
本质上,使用RESTful API,就是通过构造不同的HTTP请求来达到与服务器交互的效果。上面使用的都是最基本的网络请求API,并且都采用了同步调用,我们也可以根据自己的需求使用异步调用的API或者是别人封装好的HTTP请求框架来使用RESTful API。
iOS开发中使用Bmob RESTful API的更多相关文章
- [转]iOS开发中的火星坐标系及各种坐标系转换算法
iOS开发中的火星坐标系及各种坐标系转换算法 源:https://my.oschina.net/u/2607703/blog/619183 其原理是这样的:保密局开发了一个系统,能将实际的坐标转 ...
- iOS开发中打电话发短信等功能的实现
在APP开发中,可能会涉及到打电话.发短信.发邮件等功能.比如说,通常一个产品的"关于"页面,会有开发者的联系方式,理想情况下,当用户点击该电话号码时,能够自动的帮用户拨出去,就涉 ...
- IOS开发中UI编写方式——code vs. xib vs.StoryBoard
最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面.iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关 ...
- 多线程在iOS开发中的应用
多线程基本概念 01 进程 进程是指在系统中正在运行的一个应用程序.每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 02 线程 2-1 基本概念 1个进程要想执行任务,必须得有线程 ...
- 解析iOS开发中的FirstResponder第一响应对象
1. UIResonder 对于C#里所有的控件(例如TextBox),都继承于Control类.而Control类的继承关系如下: 代码如下: System.Object System.Marsha ...
- 在iOS开发中使用FMDB
在iOS开发中使用FMDB 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需 ...
- 简述 Ruby 与 DSL 在 iOS 开发中的运用
阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain Specific Language) 翻译成中文就是:"领域特定语言".首先,从定义就 ...
- 深入理解 iOS 开发中的锁
来源:伯乐在线 - 夏天然后 链接:http://ios.jobbole.com/89474/ 点击 → 申请加入伯乐在线专栏作者 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大 ...
- iOS开发中关于UIImage的知识点总结
UIImage是iOS中层级比较高的一个用来加载和绘制图像的一个类,更底层的类还有 CGImage,以及iOS5.0以后新增加的CIImage.今天我们主要聊一聊UIImage的三个属性: image ...
随机推荐
- POJ 2114 Boatherds【Tree,点分治】
求一棵树上是否存在路径长度为K的点对. POJ 1714求得是路径权值<=K的路径条数,这题只需要更改一下统计路径条数的函数即可,如果最终的路径条数大于零,则说明存在这样的路径. 刚开始我以为只 ...
- android为应用程序添加退出动画
原本想搞一个退出程序时,把前一个应用程序的VIEW或者截图抓过来为我用,以实现更复杂的动画效果,尝试了很多方法,但都有或多或少的缺陷,可惜最后失败了.不过也算有所得.写文以标记. 其实抓图在4.0以后 ...
- android.content.Context 含义及使用
Context字面意思上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过Con ...
- 分解成3NF保持函数依赖且为无损连接的算法
分解成3NF保持函数依赖且为无损连接的算法: 1.根据分解成3NF的保持函数依赖的分解算法(http://www.cnblogs.com/bewolf/p/4443919.html),得到分解结果ρ ...
- Hibernate+JPA (EntityMange讲解)
近年来ORM(Object-Relational Mapping)对象关系映射,即实体对象和数据库表的映射)技术市场人声音鼎沸,异常热闹, Sun在充分吸收现有的优秀ORM框架设计思想的基础上,制定了 ...
- Smack IQ包的扩展
前几天一直很烦躁,怎么扩展smack的IQ包堵了我好久,今天静下心来看了下smack的源码,把这个问题解决了.下面给出步骤: 如果我们要扩展一个如下所示的IQ包: <iq id="00 ...
- 关于fft的一点总结
好吧,其实我并没有深入运用fft,只会优化卷积 听说fft经常和生成函数结合在一起………………oi真是迅猛发展,我真是与时代脱节了…… 关于fft的学习推荐直接去看算法导论,写得非常清楚 主要弄懂n次 ...
- android通过httpClient请求获取JSON数据并且解析
使用.net创建一个ashx文件,并response.write json格式 public void ProcessRequest(HttpContext context) { context.R ...
- 分析一下FastDFS_java_client中TestClient.java这个文件以及跟它关联的这条线
本来先打算上个图来说明一下这条线的,可是我的画图工具还没有安装好,我先把跟TestClient.java相关的几个文件代码贴上来,但是由于代码行数还是不少的,所以请大家阅读文章的时候先不要展开代码,等 ...
- ZOJ1311, POJ1144 Network
题目描述:TLC电话线路公司正在新建一个电话线路网络.他们将一些地方(这些地方用1到N的整数标明,任何2个地方的标号都不相同)用电话线路连接起来.这些线路是双向的,每条线路连接2个地方,并且每个地方的 ...