因為javascriptMVC的靈活性,他可以和任何服務層結合起來開發。本指南的目的在於告訴你如何設計服務層,最大程度的減少運行javascriptMVC所要做的額外工作。一般而言,服務層越輕越好,直接返回資料庫查詢結果,保證和用戶端通訊的靈活度。
JSON REST
最好的綜合服務層可以被描述為JSON REST。JSON用來實現用戶端和服務端資料的交換。REST是具象狀態傳輸(Representational State Transfer),使用GET POST PUT
和 DELETE來修改資源urls。例如一個簡單的Message Serviceapi,他會暴露下面的urls:
1.
GET /messages
- 從伺服器擷取訊息數組。
2.GET /messages/{id}
- 從伺服器擷取指定訊息。
3.POST /messages
- 在伺服器上建立一個訊息。
4.PUT /messages/{id}
- 在伺服器上更新指定訊息。
5.DELETE /messages/{id}
- 在伺服器上刪除指定訊息。
查詢字串參數
在詳解講解各種url之前,很有必要先快速介紹下參數是如何傳遞給查詢字串的。jQuery.Model把參數傳遞給jquery的$.ajax,他裡面使用jQuery.param做以轉換。例如下面的例子:
$.get('/messages',{ userId: 5, order: ['createdAt ASC','user.name ASC'] })
產生後的結果:
GET /messages? userId=5& order%5B%5D=createdAt+ASC& order%5B%5D=user.name+ASC
GET /messages
GET /messages請求會把所有可見的資料返回給使用者,資料結構如下:
{ "data": [ { "id" : 1, "fromUserId": 921, "text": "Hello World", "createdAt" : 1024324214123 }, { "id" : 2, "fromUserId": 923, "text": "Goodnight World", "createdAt" : 23524365346543 }, ... ], "count": 100 }
1.data
- 對象數組,每個資料代表一個訊息。
2.count
-數組的大小。
GET /messages會把傳遞的參數組織成name=value形式的連接字串,例如:GET /messages?limit=10&offset=20&order[]=createdAt+DESC。
常見name / values:
limit
-返回資料的大小
offset
-資料位移量
order
- 資料相片順序
這些資料會被直接傳給資料庫查詢字串。
有時候你想擷取特定項目的所有資料,例如使用者52的所有資料,請求的url應該像這樣:
GET /messages?fromUserId=52
伺服器需要擷取限制條件為fromUserId = 52的所有資料。
相關資料
另外一個問題是因為效能的考慮,你擷取要在一個資料中加入其他的資料,例如你在擷取訊息的時候,同時像擷取使用者的資訊。在這種情況下,我們鼓勵添加'include'參數,url如下:
GET /messages?include[]=fromUser
fromUser資料會被加入到每一個訊息對象中:
{ "data": [ { "id" : 1, "fromUserId": 921, "text": "Hello World", "createdAt" : 1024324214123, "fromUser": { "id" : 921, "name" : "Justin Meyer" } }, ... ], "count": 100 }
GET /messages/{id}
從伺服器擷取一條資料,他可以是json形式:
->{ "id" : 1, "fromUserId": 921, "text": "Hello World", "createdAt" : 1024324214123}
POST /messages
在伺服器上建立一條資料。一般而言,他可以是json資料,有點像GET請求擷取的資料,區別在於它沒有id屬性和其他一些伺服器將會產生的屬性,像下面的例子:
POST /messages{ "fromUserId": 921, "text": "A new message"}
伺服器會幫你產生id和createAt屬性,伺服器返回的資料結果可能是:
->{ "id": 22, "createdAt": 1224324214123}
PUT /messages/{id}
補救伺服器上的資料,有點像POST,資料是JSON格式。但是資料只包含需要更新的屬性值,如下:
PUT /messages/22{ 'text': "An updated EVIL message"}
傳回值需要包含在伺服器端修改或者調整了的資料。例如伺服器會過濾掉“屏蔽詞”,還會更新updateAt屬性,傳回值應該如下:
->{ 'text' : "An updated message", 'updatedAt' : 123254356346241}
但是如果伺服器沒有發生更新和更改操作,傳回值應該是一個Null 物件:{}。
DELETE /messages/{id}
在伺服器上刪除一條資料。
發送時間
最好的發送時間的形式是,使用Julian日期類型的整數,例如:
createdAt: 12313123133423
我們可以很容易的使用javascript把他轉換成date類型:
new Date(123123133423)
使用一個請求CUD多個資料
可以使用jQuery.Model.List實現用一條請求實現對多個資料的create, update, 和 delete操作。
異常處理
當異常發生的時候,確保你的伺服器返回正確的http狀態碼,返回的對象可以是json資料,屬性名稱對應異常數組:
{ email : ["Formatting is incorrect","No email is provided"]}
javascriptMVC教程目錄