REST API:在POST / PUT / GET中使用ID与实际值

时间:2014-02-06 16:54:49

标签: api rest design-patterns asp.net-web-api

我正在设计API以允许客户使用POST / PUT / GET管理他们的数据。

API面临的挑战之一是实体中有多个字段应具有预定集合的值。 我看到的一种方法是允许客户端为每个数据字段(属性)传递ID,并提供一种补充方法,为客户端提供数据字段的可用选项。 因此,客户端与服务的交互将是: 客户端:GET \ Options(返回每个字段的可用选项集) 客户端:POST \ Data(向每个属性发送带有一组ID的DTO,将数据保存到服务器)

我看到的另一个选择是让客户端发送实际值而不是ID。

您推荐什么方法?为什么?

1 个答案:

答案 0 :(得分:2)

让客户端将数据作为值传递但是将数据作为外键存储在服务器上。

假设您设计了一个用于添加汽车的API,汽车颜色应该是预定值的值。

HTTP请求:

GET cars/1
=> 200 OK
{ id: 1, name: "Ferrari", colour: "Red }


POST cars
{ name: Lamborghini, colour: "Blue" }
=> 201 Created (cars/2)

数据库(只是一个例子):

Table [Car]: @ID (Integer) , Name (Varchar) , ColourID (Integer)
Table [Colour] : @ID (Integer), Name(Varchar)

... Car.ColourID是Colour.ID的外键

优点是:

  1. API易于使用
  2. 您仍然保留预定集的数据约束,例如使用颜色POST汽车:“Dog”应该导致HTTP响应并显示错误信息(例如无效颜色)。