rest - 如何设计一个RESTful集合资源?

标签 rest

我正在尝试设计一个“项目集合”资源。我需要支持以下操作:

  • 创建收藏
  • 移除收藏
  • 将单个项目添加到集合
  • 将多个项目添加到集合
  • 从集合中删除单个项目
  • 从集合中删除多个项目

  • 就我而言,这是:

    创建集合:
    ==>
    POST /service
    Host: www.myserver.com
    Content-Type: application/xml
    <collection name="items">
     <item href="item1"/>
     <item href="item2"/>
     <item href="item3"/>
    </collection>
    
    <==
    201 Created
    Location: http://myserver.com/service/items
    Content-Type: application/xml
    ...
    

    移除集合:
    ==>
    DELETE /service/items
    
    <==
    200 OK
    

    从集合中删除单个项目:
    ==>
    DELETE /service/items/item1
    <==
    200 OK
    

    但是,我发现支持其他操作有点棘手,即我可以使用哪些方法:
  • 将单个或多个项目添加到集合中。 (根据 HTTP 1.1 RFC
  • ,PUT 似乎不在这里
  • 在一次交易中从集合中删除多个项目。 (删除似乎也不在这里)
  • 最佳答案

    您最好为集合项使用非位置标识符,例如 UUID,以避免在删除项目之前的项目时更改项目的 url 等问题。 (当然,您仍然可以使用 itemN 或仅使用 N ,只要该数字始终与同一项目相连,在删除后留下空白,但 UUID 不那么令人困惑。)

    该集合的网址为 /service/items/ .每个项目都有网址 /service/items/<id> .

  • 创建项目和集合是对资源父级的 POST。
  • 如果客户端有权并有能力生成资源的名称或 ID,则可以使用 PUT。
  • 删除项目和集合是对资源本身的 DELETE。
  • 添加多个项目是父项(集合)上的多个 POST 或多项目 POST。
  • 删除多个项目是对每个资源的 DELETE。我不鼓励多项目 DELETE 有两个原因:
  • 批量删除是一个危险的操作(因此,我也不鼓励对非空集合进行 DELETE)。
  • 该操作唯一有意义的目标是父集合,从而使批量 DELETE 相对于单项 DELETE 不对称。

  • 如果您确实需要批量删除功能,请通过不同的、明确标记的 API 提供,例如 PURGE/service/items。

    关于rest - 如何设计一个RESTful集合资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810652/

    相关文章:

    rest - 带有 REST API 的开源作业调度程序

    java - 如何使用 Rest Get Annotation for application/x-octet-stream Accept header

    java - 我可以使用什么在 Java 中创建 REST 客户端?

    java - 通过 API 处理大数据以进行可视化

    python - django rest framework - 总是插入,从不更新

    rest - 是否使用子资源?

    web-services - 如何在服务器端对使用 JSON restful web 服务构建的 web 应用程序进行负载测试?

    ruby-on-rails - 为什么 Ruby on Rails 书籍或引用文献总是说 Update 是 PUT 而 Destroy 是 DELETE 而不是?

    java - 使用 Jersey 创建新的 Web 资源

    带有换行符的 POST 请求的 Java 代码在 Json 正文中发出错误