4

我对收藏资源的设计感到困惑。假设我有一个用户资源 - 如下所示。

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 : "/users/{id}"
    }
  }
]

集合资源表示应该包括包含资源的完整表示还是可以是一个子集?

4

5 回答 5

8

媒体类型定义了您如何传达信息的规则。查看Collection+JSONHAL的规范,了解如何执行您正在尝试执行的操作的示例。

于 2013-07-01T17:24:00.837 回答
0

这完全取决于你想要它做什么。REST API 的伟大之处在于它们非常灵活。你可以用你想要的任何方式(理论上)表示数据。

就个人而言,我会有一个属性,允许用户指定一个子集或表示样式。例如/users/{userid}.json?output=simple/users/{userid}.json?subset=raw

沿着这些思路的东西还可以让您嵌套表示并微调您想要的内容,而不会牺牲灵活性:

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

天空才是极限

于 2013-07-01T16:06:16.230 回答
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"
  },
  ...
]
于 2013-07-01T16:14:40.140 回答
0

我会list通过娱乐来使服务细化

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

任何分隔符(除了 & 和 URL 编码的)都可以使用,或代替. 在服务器端,检查那些包含属性并相应地呈现 JSON 响应。-|

于 2013-07-01T16:15:10.223 回答
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"
            }]
        }]
    }
}
于 2013-07-01T16:30:23.407 回答