Http GET并一次删除多个实体请求(PHP)

时间:2016-07-28 23:47:54

标签: php http http-get http-delete http-head

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

我的意思

如果我使用GET调用端点 那么它有效吗

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

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

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

所以我猜GET或DELETE或HEAD请求仅适用于一个实体?

编辑:语言是PHP btw

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

我不想使用身体。

1 个答案:

答案 0 :(得分:1)

您可以制作有效的HTTP请求但违反HTTP的设计。我正在关注正确的HTTP设计。

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

因此,对/users的调用可以返回多个用户实体。

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

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

但是,您可以将网址结构化为:

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

但是这样的事情:

/users/12,4,65

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

无论你对多个这样的实体做DELETE,请求应该成功还是什么都不做。不接受部分成功,因此您只需使用通常的200/204响应代码即可成功删除。