0

正如标题所说 - 它有效吗?

我是什么意思

如果我用 GET 调用端点,那么这样做是否有效

http://some.thing/more?id[]=12&id[]=4&id[]=65

让服务器一次返回多个实体?

我在 rfc 文档中看不到任何注释。另外 - 查看要返回的状态代码 - 它似乎不是那样构建的。

所以我猜一个 GET 或 DELETE 或 HEAD 请求只针对一个实体?

编辑:语言是 PHP 顺便说一句

EDIT2:这是我想要避免的:https ://stackoverflow.com/a/18141127/3411766

我不想使用身体。

4

1 回答 1

1

您可以发出有效的 HTTP 请求,但违背了 HTTP 的设计。我的答案集中在正确的 HTTP 设计上。

首先,当您执行 GET 请求时,您总是会收到资源的表示。即使 URL 表示类似“资源集合”之类的东西,HTTP 中也没有对此的严格定义。该资源列表仍然可以代表来自您的数据模型的多个“实体”。

所以调用/users可以返回多个用户实体。

同样,DELETE对用户的 a 可能意味着您正在删除整个/users集合及其中的所有内容。

我看到但没有很好答案的一个问题是您正在使用查询字符串来删除多个资源。我认为这对GET/很好HEAD,但我质疑它是否也DELETE适用。这对我来说肯定感觉有点“奇怪”,因为我觉得应该删除一个DELETEon并且通常它会由于大多数框架的工作方式。应该是?我其实不确定。REST 不是严格的标准,所以我们不能去那里找到答案,所以我得到的只是它“感觉不对”。我意识到您并没有严格要求 REST,所以从严格的 HTTP 角度来看,这绝对没问题。/users?foo=bar/users

但是,您可以将您的 url 构造成如下所示:

/users?id[]=12&id[]=4&id[]=65

而是这样的:

/users/12,4,65

我见过其他人这样做,对我来说感觉有点不对劲。但这主要是猜想。

无论您是否DELETE对多个这样的实体执行操作,请求都应该成功或根本不执行任何操作。不接受部分成功,因此您可以使用通常的 200/204 响应代码来指示成功删除。

于 2016-08-01T09:23:52.340 回答