2013-07-01 64 views
4

我對收集資源的設計感到困惑。 假設我有一個用戶資源 - 如下所示。 REST - 資源和集合表示

 
http://www.example.com/users/ {user-id} 
user : { 
    id : "", 
    name : "", 
    age : "", 
    addresses : [ 
    { 
     line1 : "", 
     line2 : "", 
     city : "", 
     state : "", 
     country : "", 
     zip : "" 
    } 
    ] 
} 

現在,我的用戶應該如何收集資源表示?它應該是用戶表示的列表(如上)?或者它可以是以下類似的子集:

 
http://www.example.com/users/ 
users : [ 
    { 
    id : "", 
    name : "", 
    link : { 
     rel : "self", 
     href : "https://stackoverflow.com/users/{id}" 
    } 
    } 
] 

集合資源表示應該包含包含資源的完整表示還是它可以是子集?

+0

檢查我的答案 –

回答

0

這完全取決於你想要它做什麼。 REST API的優點是它們非常靈活。您可以以任何方式(理論上)表示您想要的數據。

個人而言,我會有一個屬性,允許用戶指定一個子集或風格的表示形式。例如/users/{userid}.json?output=simple/users/{userid}.json?subset=raw

類似的規定也允許你嵌套交涉和微調你想要什麼,而不會犧牲靈活性:

/users/{userid}.json?output=simple&subset=raw 

天空纔是極限

0

沒有真的是這個標準。您可以選擇:

1.鏈接列表

返回的鏈接,收集項目資源的列表(即,用戶ID)。

http://www.example.com/users/ 
users : [ 
    "jsmith", 
    "mjones", 
    ... 
] 

注意,這些實際上可以理解爲相對URI,這在一定程度支持「所有資源應按照從根URI的URI訪問」的理想。

http://www.example.com/users/ + jsmith = http://www.example.com/users/jsmith 

2.局部資源

返回部分資源(用戶)的列表,允許調用者指定哪些字段包括列表。如果用戶不提供任何信息,您也可以選擇默認字段 - 默認情況下甚至可以是「包含所有字段」。

http://www.example.com/users/?field=id&field=name&field=link 
users : [ 
    { 
    id : "jsmith", 
    name : "John Smith", 
    link : "www.google.com" 
    }, 
    ... 
] 
0

我會使list服務優良的招待

http://www.example.com/users?include=address|profile|foo|bar

任何分隔符(比&和URL編碼等),如,-晶可以用來代替|。在服務器端,檢查這些包含屬性並相應地呈現JSON響應。

0

它可以是子集,但取決於數據。看看下面的代碼。

{ 
    "usersList": { 
     "users": [{ 
      "firstName": "Venkatraman", 
      "lastName": "Ramamoorthy", 
      "age": 27, 
      "address": { 
       "streetAddress": "21 2nd Street", 
       "city": "New York", 
       "state": "NY", 
       "postalCode": 10021 
      }, 
      "phoneNumbers": [{ 
       "type": "mobile", 
       "number": "+91-9999988888" 
      }, { 
       "type": "fax", 
       "number": "646 555-4567" 
      }] 
     }, { 
      "firstName": "John", 
      "lastName": "Smith", 
      "age": 25, 
      "address": { 
       "streetAddress": "21 2nd Street", 
       "city": "New York", 
       "state": "NY", 
       "postalCode": 10021 
      }, 
      "phoneNumbers": [{ 
       "type": "home", 
       "number": "212 555-1234" 
      }, { 
       "type": "fax", 
       "number": "646 555-4567" 
      }] 
     }] 
    } 
} 
7

媒體類型定義瞭如何傳達信息的規則。查看Collection+JSONHAL的規範,瞭解如何執行您正在嘗試執行的操作。