我以前从未设计过RESTful服务,我想映射URI路由。
假设有Foo
和Bar
个对象。 Foo
可以与多个Bars
相关联,但Bar
也可以独立于任何Foos
。显然,由于这两种类型都可以独立存在,因此它们需要自己的URI层次结构,如下所示:
/Foos
/Bars
这是我的问题所在。让我们说我想创建一个Bar
并将其与Foo
相关联。以下哪种方法是实现这一目标的最佳方式?
方法1:单个api调用,用于创建Bar
并将其与Foo
相关联。
POST /Foos/{FooId}/Bars
方法2:调用以创建Bar
,然后调用以将新Bar
与Foo
相关联。 PUT是否是关联呼叫的正确方法?
POST /Bars
PUT /Foos/{FooId}/Bars/{BarId}
方法3:完全不同的东西。
答案 0 :(得分:2)
我更喜欢方法2,但我会认真考虑另外做方法1是否是个好主意。
我喜欢方法2,因为它允许您创建独立的Bar
,然后,如果需要,可以将其与Foo
(或多个Foo
s关联,如果需要)。< / p>
我在这里应用的一些问题是:
Bar
关联的Foo
,但与Foo
无法成功关联? Bar
可以与多个Foo
相关联吗?Bar
是否了解与之关联的Foo
?Foo
可以有多个Bar
吗?如果有一个浮动的Bar
应该与Foo
相关联但不是一件非常糟糕的事情,那么你需要像方法1那样的东西(否则在方法2的第一次和第二次调用之间可能发生某种情况。
我喜欢POST的约定来创建和PUT修改(所以我会像你建议的那样做方法2)。
您可能还想检查URI中的复数形式。我倾向于喜欢单数但是......在这里讨论 -
REST URI convention - Singular or plural name of resource while creating it