Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTful API-是否删除某些资源集合?_Rest_Http - Fatal编程技术网

RESTful API-是否删除某些资源集合?

RESTful API-是否删除某些资源集合?,rest,http,Rest,Http,我可以删除单个资源,如: // Removes group 12 from employee 46 DELETE /employees/46/groups/12 我可以删除整个资源集合,如: // Removes all groups from employee 46 DELETE /employees/46/groups 我正在寻找适当的RESTful方法来删除部分资源集合 DELETE/employees/46/groups{id:[12,15,32]} DELETE/employees

我可以
删除
单个资源,如:

// Removes group 12 from employee 46
DELETE /employees/46/groups/12
我可以
删除整个资源集合,如:

// Removes all groups from employee 46
DELETE /employees/46/groups
我正在寻找适当的RESTful方法来
删除部分资源集合

  • DELETE/employees/46/groups{id:[12,15,32]}
  • DELETE/employees/46/groups?id=12,15,32
  • DELETE/employees/46/groups/xx
    (单打,但打3次)
  • 查询字符串参数(
    ?ids=12,15,32
    )是否应仅与
    GET
    一起使用

    请求正文(
    {id:[12,15,32]}
    )是否应始终与
    POST
    PUT
    DELETE
    一起使用


    这三种方法都可以,但哪一种是仅删除部分资源集合的标准方法?

    大多数API不允许一次删除资源集合,但可以对实体执行其他操作,如:

    DELETE /employees?id=12,15,32
    

    一个很好的选择可能是非REST方式,即发送一个包含标记为删除的ID的自定义JSON对象。

    使用方法1(
    DELETE/employees/46/groups
    和一个body)。我认为这是可疑的,因为基本上说,整个目标资源(
    /employees/46/groups
    )都将被删除,而不管身体中发送了什么。然而

    我认为
    DELETE/employees/46/groups?ids=12,15,32
    是最好的,因为它将要删除的组集视为自己的资源。您可以在超媒体中提供指向的链接。您可以稍后使用它(但您不必这样做)

    不,绝对没有什么可以阻止您使用查询字符串发送非GET请求。查询字符串不是某种“参数”(尽管这样处理它通常很有用),它是资源URI的一个组成部分。事实上,您可以使用
    DELETE/api.php?type=employee&id=46&groups=12,15,32
    ,这仍然是完全RESTful的。REST的全部要点是URI(除其他外)对客户端应该是不透明的


    但是,当您想要在一个请求中删除大量组时,查询字符串方法可能会带来问题。如果发生这种情况,最简单的方法是
    POST/bulkdeletegroups
    RPC调用。您也可以考虑<代码>修补程序/雇员/ 46 /组<代码>(但请先阅读)。

    没有标准化的大部分同意,但是<代码>修补程序确实不适合资源删除:如果您正确地应用语义,则结束了空资源(或其演示文稿)。而不是不确定的组。@DaSourcerer
    /employees/46/groups
    是所有组(其中employee46是成员)的集合。我们只想移除其中的一些。因此,我们用一个描述要删除哪些组的文档来修补该集合。唯一的问题是,您需要仔细选择该文档的格式,并为其指定正确的
    内容类型。可能很适合这里。@DaSourcerer我不完全同意。F.e.有一个
    remove
    操作,用于从对象或列表中删除值。虽然对于单个文档,这可能只影响该文档的一个条目(每个操作),但如果您缩小至少一个级别,则您处于包含资源的实际目录资源中,因此应该能够删除子资源,而不会有任何大的障碍。重要的是要知道,所有的操作都需要在一个事务中进行(要么全部成功,要么没有成功)@RomanVottner@VasiliyFaronov我明白你的意思,但请相信我:你错误地评估了JSON补丁中
    补丁
    方法的语义以及
    删除
    操作的范围。只是慢慢地重新阅读你写的内容,并将其与规格进行比较。你会得出结论,你将要使用错误的工具来完成错误的工作。@DaSourcerer也许你可以在这里发布一篇文章来解释这一点?
    DELETE /employees?id=12&id=15&id=32