在开发速度以及在适应扩展需求的整体架构之间进行权衡。java
JSON(JavaScript Object Notation)是做为在API服务内部传输数据的标准出现的,它可做为替换XML的备选方案之一。
如:
{
“id”:1,
“name”:”Programming for PaaS”,
“price”:123,
“tags”:[“PaaS”,”Programming”]
}android
REST(Representational State Transfer)是诸如Web应用之类的分布式系统的一种架构模式。
- 经过复用HTTP的基础操做,如GET、POST、PUT以及DELETE,REST已经成为了一种主流服务设计模型。
- REST背后的原则的基本原则就是经过提供一个共享的网络词汇,以一种标准的、可预测的格式来传输资源。
如:一个基于REST的用于管理用户数据的JSON服务:ios
GETweb
列出资源(能够被缓存)
- http://example.com/users
Header:
none
Response:
[
{'id':123,
'name':'a'},
{'id':124,
'name':'b'}
]
- http://example.com/users/123
Header:
none
Response:
{'id':123,
'name':'a'}
- http://example.com/users?name=b
Header:
none
Response:
[
{'id':124,
'name':'b'}
]
PUT
更新资源(不可缓存)json
- http://example.com/users
Header:
[
{'id':123,
'name':'x'},
{'id':124,
'name':'y'}
]
Response:
200 OK
- http://example.com/users/123
Header:
{'id':123,
'name':'x'}
Response:
200 OK
- http://example.com/users?name=b
Header:
[
{'id':124,
'name':'y'}
]
Response:
200 OK
POST
建立新资源(不可缓存)浏览器
- http://example.com/users
Header:
{'id':125,
'name':'c'}
Response:
200 OK
-http://example.com/users/123
Not used
-http://example.com/users?name=b
建立新资源的时候不须要查询字符串
DELETE
删除资源(不可缓存)
- http://example.com/users
Header:
None
Response:
200 OK
Note:
Deleted all users
-http://example.com/users/123
Header:
None
Response:
200 OK
Note:
Deleted only user 123
- http://example.com/users?nmae=b
Header:
None
Response:
200 OK
Note:
Deleted all users named b
元服务是一种基于REST的应用程序,用于为数据的集合提供服务。缓存
元服务能够直接在浏览器中调用。markdown
诸如SproutCore(http://SproutCore.com)和Cappucino(http://www.Cappucinoproject.org)能够做为数据绑定的构建模块。
SproutCore和Cappucino为咱们提供了构建模块,经过一种很是标准的方法将这些基础元素组合在一块儿,就能够构建现代应用程序。
这些应用不管在Web仍是移动客户端都让人感受到相似桌面应用的效果。网络
REST的框架:RestKit架构
采用Java语言的Android本地应用也能够简单快速地访问元服务以及获取数据。
- 本身动手构建,采用Android的异步网络操做
1. 将AsyncTask类扩展为异步任务类
2. 建立一个URLConnection而且将数据转换为字符串
3. 将结果处理为Java对象
Java实例代码:
//经过新的GetRESTData().excute()在一个服务中执行;
private class GetRESTData extends AsyncTask <Void,Void,String>{
@Override
protected String doInBackground(Void... params){
URL url = new URL("http://example.com/users");
URLConnection urlConnection = url.openConnection();
InputStream in = new
BufferedInputStream(urlConnection.getInputStream());
BufferedReader reader = new
BufferedReader(new InputStreamReader(in));
String result,line = reader.readLine();
result = line;
while((line = reader.readLine())!=null){
result += line;
}
in.close();
return result;
}
protected void onPostExecute(String restResult){
//process the JSON string into Java object
//and persist it into a SQLite database
}
}
Android上的REST框架:Restlet
Restlet能够从基于REST的源获取数据时,极大地节省开发者的时间和精力。
RestLet的简单实例:
public interface UserResource{
@Get
public User retrieve();
@Put
public void store(User user)
@Delete
public void remove();
}
ClientResource cr = new ClientResource("http://example.com/users/123");
//获取用户对象
UserResource resource = cr.wrap(UserResource.class);
User user = resource.retrieve();