【问题标题】:RESTful API design for creating and linking multiple resources in 1 request?用于在 1 个请求中创建和链接多个资源的 RESTful API 设计?
【发布时间】:2019-07-16 14:47:12
【问题描述】:

假设我正在跟踪食谱、成分和作者。我有一个表格,用户可以填写该表格来创建食谱,添加和/或链接适当的成分,然后添加和/或链接作者。因此,如果我要单独执行此操作,则可能是 1 POST 到 /recipes 以创建返回 id 的食谱。然后 1 个或多个 POST 到 /ingredients 以创建必要的成分。然后在 /recipe//ingredients 上发布 1 个或多个帖子,以将每种成分添加到配方中。然后为作者重复。但是,如果这些请求中的任何一个失败了怎么办?我可以将其实现为对 /recipes 的 1 个 POST 请求并让它执行所有必要的插入操作吗?

【问题讨论】:

  • 当然可以,但是为什么在添加作者或成分时不支持发布它们?然后,配方的 POST 将引用现有资源。
  • 所以在配方表单中,用户可以创建成分然后链接它们,但是如果他们用户创建成分但随后决定不继续完成配方怎么办。然后可能会有一些永远不会被使用的成分。如果还没有现有的食谱(因此没有 recipe_id),我将如何链接这些成分?我可以创建成分,但我仍然需要等到创建配方后才能创建链接,对吧?
  • 如果您通读the definition of POST,您会看到服务器将根据自己的语义处理请求,这使您基本上可以做任何您想要或需要的事情。 HTTP 规范唯一需要的是您通过Location HTTP 标头返回已创建资源的 URI。但是,当创建多个资源时,它会变得很有趣。当然,HTTPS 的强度不是批处理请求的处理。这里的一般经验法则是:您将如何在 Web 上实现并重复使用相同的概念
  • This 那么你可能也会感兴趣
  • 我不理解您的最后一句话“您将如何在 Web 上执行此操作并重复使用相同的概念”。你能改写或详细说明吗?

标签: rest api api-design


【解决方案1】:

我是否可以将其实现为对 /recipes 的 1 个 POST 请求并让它执行所有必要的插入操作?

是的,绝对的。

没有什么可以说明对一种资源的更改不能对其他资源产生副作用。

HTTP 是一种应用协议,其应用领域是通过网络传输文档(Webber, 2011); Web 服务器基本上是一个符合 http 的文档存储。所以将整个文档发送到服务器进行存储是符合消息语义的。

如果您查看POST 规范中描述的创建语义,您会发现该协议支持创建多个资源;服务器应返回所有已创建资源的标识符(以某种可能受媒体类型约束的未指定方式)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多