0

假设我们有以下服务器资源:

api.example.com/event/1

它返回一些任意资源,例如:

{
    id: 1,
    details: {
        type: 'webinar',
        ....
    },
    attendees: [
        {
            user_id: 1,
            first_name: 'Bob'
            ...
        },
        ...
    ]
}

对于客户来说,请求仅获取事件的事件详细信息而不是与会者列表可能很有用。

如果客户想要两个资源,最好为资源提供两个单独的 URL 并强制两个单独的请求?

api.example.com/event/{event_id}
api.example.com/attendees/{event_id}

还是提供相同的两个端点更好,但可以选择让第一个端点支持 GET 参数以打开或关闭与会者列表

api.example.com/event/{event_id}?listAttendees={true|false}
api.example.com/attendees/{event_id}

listAttendees参数将在哪里让表示返回与会者列表或不返回。

允许 GET 参数更改从特定 URL 返回的表示是一种常见的做法吗?

4

1 回答 1

0

我想说,在 REST 中最正确的方法是使用不同的媒体类型或媒体类型参数,但由于大多数人不使用自定义媒体类型,我经常使用我称之为缩放协议的东西。这个想法是你有一个zoomorexpand参数,带有一个数值,它递归地包含子实体,减少参数直到它达到零。

所以,像这样的请求:

GET api.example.com/event/1

返回事件资源的普通表示,不嵌入任何内容。像这样的请求:

GET api.example.com/event/1?zoom=1

将包括事件的直接孩子,在你的情况下,参加者。继之:

GET api.example.com/event/1?zoom=2

将包括事件的直接孩子,参加者的直接孩子。

要回答您的问题,在 REST 中,整个 URI 是一个原子标识符,因此参数是 URI 的一部分。如果您使用的东西不会以相同的方式解释 URI,这可能是一个问题,例如不会使用查询字符串缓存 URI 的旧缓存服务器。

于 2014-10-31T02:56:24.587 回答