0

我以前从未设计过 RESTful 服务,我想绘制出 URI 路由。

可以说有FooBar对象。AFoo可以有多个Bars与之关联,但 aBar也可以独立于任何Foos一个。显然,由于这两种类型都可以独立存在,因此它们需要自己的 URI 层次结构,如下所示:

/Foos
/Bars

这就是我的问题所在。假设我想创建 aBar并将其与 a 相关联Foo。这些方法中的哪一种是实现这一点的最佳方法?

方法 1:单个 api 调用创建Bar并将其与Foo.

POST /Foos/{FooId}/Bars

方法 2:调用 create Bar,然后调用将 newBarFoo. PUT 会是关联呼叫的正确方法吗?

POST /Bars
PUT /Foos/{FooId}/Bars/{BarId}

方法3:完全不同的东西。

4

1 回答 1

2

我更喜欢方法 2,但我会认真考虑另外执行方法 1 是否是个好主意。

我喜欢方法 2,因为它允许您创建独立的 s Bar,然后,如果合适,将其与Foo(或多个Foos,如果需要)关联。

我将在这里申请的一些问题是:

  • 是否成功创建Bar应该与 a 相关联的 a Foo,但没有成功与之关联Foo
  • aBar可以与多个相关联Foo吗?
  • 是否Bar知道Foo与它相关的 (s) 的任何信息?
  • 一个可以Foo有多个Bar吗?

如果有一个应该与 a 关联但不是的浮动Bar是一件非常糟糕的事情,那么您将需要类似方法 1 的东西(否则在方法 2 的第一次和第二次调用之间可能会发生一些事情)。Foo

我喜欢 POST 创建和 PUT 修改的约定(所以我会按照您的建议执行方法 2)。

您可能还想检查 URI 中的复数形式。我倾向于更喜欢单数,但......在这里讨论 -

REST URI 约定 - 创建资源时的单数或复数名称

于 2013-10-22T05:50:32.857 回答