RESTful Web API中的URI设计

时间:2013-10-22 05:14:15

标签: web-services api rest asp.net-web-api

我以前从未设计过RESTful服务,我想映射URI路由。

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

/Foos
/Bars

这是我的问题所在。让我们说我想创建一个Bar并将其与Foo相关联。以下哪种方法是实现这一目标的最佳方式?

方法1:单个api调用,用于创建Bar并将其与Foo相关联。

POST /Foos/{FooId}/Bars

方法2:调用以创建Bar,然后调用以将新BarFoo相关联。 PUT是否是关联呼叫的正确方法?

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

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

1 个答案:

答案 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