70

我有一个 url 可以为这样的用户获取约会:

/user/:userId/appointments

如果我想为多个用户预约,那么 url 应该是什么样子?

应该是:

/appointments?users=1d1,1d2..

谢谢,克里斯。

4

6 回答 6

86

集合是一种资源,因此 /appointments 可以作为资源。

集合通常还通过查询字符串提供过滤器,这本质上就是 users=id1,id2... 。

所以,

/appointments?users=id1,id2 

可以作为过滤的 RESTful 资源。

于 2012-08-14T01:09:41.820 回答
15

我认为序列化 REST 调用参数是一种更好的做法,通常通过 JSON 编码它们:

/appointments?users=[id1,id2]

甚至:

/appointments?params={users:[id1,id2]}

然后你在服务器上取消编码它们。从长远来看,这将为您提供更大的灵活性。

只需确保在发送参数之前也对参数进行 URLEncode!

于 2012-08-14T01:39:25.287 回答
13

另一种这样做的方法,根据您选择的服务器架构/框架可能有意义,是一遍又一遍地重复相同的论点。像这样的东西:

/appointments?users=id1&users=id2

在这种情况下,我建议使用单数形式的参数名称:

/appointments?user=id1&user=id2

这由诸如 Jersey(用于 Java)之类的框架本机支持。看看这个问题了解更多细节。

于 2017-03-06T21:43:58.243 回答
1
/appointments?users=1d1,1d2.. 

很好。这几乎是您唯一明智的选择,因为您无法使用 GET 传递正文。

于 2012-08-14T01:06:02.400 回答
1

这对我有用。

/users?ids[]=id1&ids[]=id2
于 2018-10-18T07:23:52.050 回答
-7

不要使用 http GET,而是使用 http POST。和 JSON。或 XML

这就是您发送到服务器的请求流的样子。

POST /appointments HTTP/1.0
Content-Type: application/json
Content-Length: (calculated by your utility)

{users: [user:{id:id1}, user:{id:id2}]}

或者在 XML 中,

POST /appointments HTTP/1.0
Content-Type: application/json
Content-Length: (calculated by your utility)

<users><user id='id1'/><user id='id2'/></users>

您当然可以按照您的建议继续使用 GET,因为它肯定更简单。

/appointments?users=1d1,1d2

这意味着您必须保持数据结构非常简单。

但是,如果/当您的数据结构变得更复杂、http GET 并且没有 JSON 时,您的编程和识别数据的能力将变得非常困难。

因此,除非您可以保持数据结构简单,否则我强烈建议您采用数据传输框架。如果您的请求是基于浏览器的,那么行业通常的做法是 JSON。如果您的请求是服务器-服务器,那么 XML 是最方便的框架。

jQuery

如果您的客户端是浏览器并且您没有使用 GWT,则应考虑使用 jquery REST。谷歌关于 jQuery 的 RESTful 服务。

于 2012-08-14T02:12:52.200 回答