RESTful Android
RESTful Android API 定义
约定
回复中默认包含标头:
Content-Type: application/json;charset=UTF-8异步操作以(*)号标记
大多数异步操作同时只能有一个任务在进行,以上传联系人为例:
客户端每次提交 POST /persons/uploader服务器放弃进行中的上传任务而新建;
客户端可以先访问GET /persons/uploader 获得当前是否有正在上传的任务;
服务器遇到错误的时候会将任务挂起,返回错误原因,客户端可以选择重试或者终止;
客户端接收到任务失败的响应后,如果响应中不包括retry的链接,则不应该重试;
授权失败将返回403 Forbidden,客户端应该提示用户进行授权,同时进行重试。
联系人
URI 定义
接口 | HTTP method | URI |
---|---|---|
获取所有联系人 | GET | /persons?pagesize={pagesize}&start={start} |
删除所有联系人* | POST | /persons/purge |
上传联系人* | POST | /persons/uploader |
获取联系人信息 | GET | /persons/{id} |
新建联系人 | POST | /persons |
编辑联系人 | PUT | /persons/{id} |
删除联系人 | DELETE | /persons/{id} |
示例
获取所有联系人
GET /persons?pagesize=10&start=0
200 OK
{
total: 100,
links:
[
{rel: "self", href: "/persons?pagesize=10&start=10"},
{rel: "pre", href: "/persons?pagesize=10&start=0"},
{rel: "next", href: "/persons?pagesize=10&start=20"}
],
persons:
[
{
link: {rel: "self", href: "/person/1"}, id: "1", name: "Jack"//...
},
{
link: {rel: "self", href: "/person/2"}, id: "2", name: "Lucy"//...
}
]
}
删除所有联系人*
GET /persons/purge
200 OK
{
link: {rel: "self", href="/persons/purge/0"} //一般不关心上次任务的状态,所以表述中没有捎带其状态
}
不使用DELETE /persons, /persons资源仍然可以访问
POST /persons/purge
202 Accpeted
{
link: {rel: "self", href="/persons/purge/0"}
}
GET /persons/purge/0
进行中
200 OK
{
link: {rel: "self", href="/persons/purge/0"},
state: "pending",
percent: "30"
}
成功
303 See Other
Location: "/persons"
{
link: {rel: "self", href="/persons/purge/0"},
state: "done"
}
失败
200 OK
{
links:
[
{rel: "self", href="/persons/purge/0"},
{rel: "retry", href="/persons/purge/0"}
]
state: "failed",
reason: "XXX",
}
重试
PUT /persons/purge/0
200 OK
终止
DELETE /persons/purge/0
200 OK
上传联系人*
GET /persons/uploader
200 OK
{
link: {rel: "self", href="/persons/uploader/0"}}
}
POST /persons/uploader
[
{name: "Jack"},
{name: "Lucy"},
{name: "Lily"}
]
202 Accepted
{
link: {rel: "self", href="/persons/uploader/0"}}
}
GET /persons/uploader
进行中
200 OK
{
link: {rel: "self", href="/persons/uploader/0"},
state: "pending",
percent: "30"
}
成功
303 See Other
Location: "/persons"
{
link: {rel: "self", href="/persons/uploader/0"},
state: "done"
}
失败
200 OK
{
links:
[
{rel: "self", href="/persons/uploader/0"},
{rel: "retry", href="/persons/uploader/0"}
]
state: "failed",
reason: "XXX"
}
重试
PUT /persons/uploader/0
200 OK
终止
DELETE /persons/uploader/0
200 OK
获取联系人信息
GET /person/1
200 OK
{
link: {rel: "self", href: "/person/1"}, id: "1", name: "Jack"//...
}
新建联系人
POST /persons
{
name: "Jack"//...
}
201 Created
{
link: {rel: "self", href: "/person/1"}, id: "1", name: "Jack"//...
}
编辑联系人
PUT /person/1
{
name: "Jack"//...
}
200 OK
{
link: {rel: "self", href: "/person/1"}, id: "1", name: "Jack"//...
}
删除联系人
DELETE /person/1
200
{
name: "Jack"//...
}
参考
RESTful Android的更多相关文章
- Android教程收集贴
Loader & REST Rest Loader Tutorial [github源码] [源码演示] [github作者主页] Twitter Timeline Sample for An ...
- 用Jersey为Android客户端开发Restful Web Service
平时在做Android客户端的时候经常要与服务器之间通信,客户端通过服务端提供的接口获取数据,然后再展示在客户端的界面上,作为Android开发者,我们平时更多的是关注客户端的开发,而对服务端开发的关 ...
- SSM整合 完美支持RESTful(Jsp和客户端<android ios...>)
一 RESTful简介 RESTful是一种网络应用程序的设计风格和开发方式 它结构清晰 符合标准 易于理解 扩展方便 REST 即Representational State Transfer的缩写 ...
- Android,适合Restful网络请求封装
借助volley.Gson类库. 优点 网络请求集中处理,返回值直接为预期的对象,不需要手动反序列,提高效率,使用时建立好model类即可. 使用效果 DataProess.Request(true, ...
- 2015最流行的Android组件、工具、框架大全
Android 是目前最流行的移动操作系统之一. 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件. 本文试图将目前流行的组件收集起来以 ...
- [转] Android优秀开源项目
Android经典的开源项目其实非常多,但是国内的博客总是拿着N年前的一篇复制来复制去,实在是不利于新手学习.今天爬爬把自己熟悉的一些开源项目整理起来,希望能对Android开发同学们有所帮助.另外, ...
- Android开发笔记之《远程控制(MQTT|mosquitto) && (ProtocalBuffer | GRPC)》
Android推送方案分析(MQTT/XMPP/GCM): http://www.open-open.com/lib/view/open1410848945601.htmlMQTT官网: http:/ ...
- Android高手速成--第二部分 工具库
主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少Vie ...
- Android 多媒体视频播放一( 多媒体理解与经验分享)
前言 说到android的多媒体,一把辛酸一把泪,当初听说会多媒体的比较牛掰,公司也有需求,于是乎我也积极的加入研究android多媒体的行列,记得以前刚接触的时候,最开始还是比较头大的,主要是但是很 ...
随机推荐
- 复制带随机指针的链表 · Copy List with Random Pointer
[抄题]: 给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点. 返回一个深拷贝的链表. [思维问题]: [一句话思路]: 完完全全地复制,否则不好操作. 1-> ...
- CentOS下zabbix监控mysql5.6版本主从
目录 CentOS下zabbix监控mysql5.6版本主从 1. Zabbix添加自定义监控流程 2. 具体步骤 1. 编写监控mysql主从脚本 2. mysql赋权 3. 查看脚本执行效果 4. ...
- linux系统命令笔记
一.linux系统目录 /bin 系统命令目录 /dev 设备目录 /home 每个系统用户在home下都有一个目录, 每个用户登录到系统后会自动登录到这个目录下, root用户会在/root文件夹下 ...
- Spring框架的事务管理的分类
1. Spring的事务管理的分类 1. Spring的编程式事务管理(不推荐使用) * 通过手动编写代码的方式完成事务的管理(不推荐) 2. Spring的声明式事务管理(底层采用AOP的技术) * ...
- MapReduceV1作业生命周期图解以及与YARN基本对比
仿照<hadoop技术内幕:深入解析MapReduce架构设计与实现原理>中的原图,我用手绘制了一份类似的图-_- 4大部分:HDFS,Client,JobTracker,TaskTrac ...
- [BAT] 执行xcopy命令后出现Invalid num of parameters错误的解决办法
如果是Windows下的命令行,对于有空格的文件路径要加引号,对于xcopy命令就是源路径和目标路径都要加引号 xcopy "C:\ppt" "D:\Program do ...
- 8.15jsp document 头部声明 区别
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js中为什么非要alert一下下一步才会执行
多数原因为界面ajax中动态添加的元素还没被添加上,就执行了js函数(js函数要调用动态元素),解决办法:ajax方法中添加 async:false,同步,作用为,在ajax执行完毕后才执行之后的js ...
- 2018.10.20 bzoj2748: [HAOI2012]音量调节(背包)
传送门 这题是不是太sbsbsb了一点. 难度直逼普及-. 直接背包判存在性就行了. 代码: #include<bits/stdc++.h> using namespace std; bo ...
- 2018.09.11 bzoj2208: [Jsoi2010]连通数(bitset+floyd)
传送门 听说正解是缩点+dfs? 直接bitset优化floyd传递闭包就行了.(尽管时间复杂度是假的O(n3/32)" role="presentation" styl ...