在開發速度以及在適應擴展需求的整體架構之間進行權衡。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();