正如标题所说 - 它有效吗?
我的意思
如果我使用GET调用端点 那么它有效吗
http://some.thing/more?id[]=12&id[]=4&id[]=65
让服务器一次返回多个实体?
我在rfc文档中看不到任何关于它的注释。另外 - 查看要返回的状态代码 - 似乎不是这样构建的。
所以我猜GET或DELETE或HEAD请求仅适用于一个实体?
编辑:语言是PHP btw
EDIT2:这是我想要避免的:https://stackoverflow.com/a/18141127/3411766
我不想使用身体。
答案 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响应代码即可成功删除。