【问题标题】:REST API Design for special actions on resources针对资源的特殊操作的 REST API 设计
【发布时间】:2016-12-09 18:46:32
【问题描述】:

我需要为“文章”设计一个“复制”操作。

我的想法是:apibaseurl/articles/{id}/duplicates 上的 POST 并返回带有创建副本的 URI 的 200 OK,但该 URI 将符合模板 apibaseurl/articles/{id}。

但是,当向apibaseurl/articles/{id}/duplicates 发出GET 时,不一定会有重复列表(意思是:服务器不会跟踪为一篇文章创建的所有重复 - “重复”关系被忽略请求范围之外的服务器)

问题:

  1. 我建议的解决方案可以吗?

  2. 通过使创建的对象的 URI 指向不在发布它的资源下的位置,这是否违反了任何 RESTful 原则?

  3. 我是否必须让客户列出一篇文章的所有重复项?

【问题讨论】:

  • 我是否正确理解您创建文章但不是使用POST apibaseurl/articles/ 而是使用POST apibaseurl/articles/{id}/duplicates?你是什​​么意思'不一定会有重复的列表'?这将永远或永远不会返回一个集合?在哪些情况下?作为副本创建的文章是否与使用“正常”方式创建的同一文章不同?
  • 关于你的第一个问题:是的。这样做是为了强调创建副本的意图(即,除了生成的标识符之外的所有内容都从“源”文章复制到新文章)。
  • 关于您的其他问题:目前尚不确定将来是否会有重复列表,目前没有要求。复制品与原件的不同之处仅在于其自动生成的 id。然而,它们很可能会在不久之后更新并演变成类似的东西,但在多个属性上与原始属性不同。

标签: rest architecture action


【解决方案1】:

我建议的解决方案可以吗?

我觉得很好。

通过使创建的对象的 URI 指向不在发布它的资源下的位置,这是否违反了任何 RESTful 原则?

不,没有必要。您将 POST 指向集合资源,但这并不强制您返回指向此集合内部的 Location 标头。

我是否必须让客户列出一篇文章的所有重复项?

如果您有这方面的用例,您可以提供。但是,如果将创建的文章列为现有文章的副本没有商业利益,则您不必这样做。

继续吧:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2021-12-09
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多