2013-03-25 57 views
0

采取以下方案:REST从数据库中更新具有查找值的字段

我想通过REST PUT调用更新汽车对象上的制造商字段。应该发送的数据如下所示:

{ 
    "Id": "1000000251" 
    "Manufacturer": "Honda" 
} 

此处的关键在于制造商字段的值来自存储在数据库中的选择集列表。我还向客户提供了一个单独的GET调用,可以让他们检索有效的制造商列表。如果用户提供值“Honnnda”,我会返回一个验证错误。

在数据库中,我有以下选择要查找:

1 Honda 
2 Toyota 
3 Ford 

是它倾向于迫使他们知道我们的内部唯一的ID对每个人(更安全),因此包括ManufacturerId字段在我的JSON对象上,还是我可以让他们通过文本值更新字段?我将在两种情况下验证输入。此外,在发送PUT请求之前,无论如何,他们都将被要求获得可用制造商的列表。

编辑 - 用户在进行PUT调用之前需要获得可用制造商的列表,因为他们需要提前知道他们可以做出哪些有效的选择。我用汽车作为“更有形”的例子,但我的系统实际上并不涉及汽车。

+0

请注意,HTTP不允许您使用PUT更新较大表示的单个属性。您必须更新整个表示。 – 2013-03-25 14:45:29

+0

是的,那绝对没问题。为了简洁起见,我只使用了对象的删节版本来隔离我的问题。这并不影响我所要求的。 :) – 2013-03-25 14:46:14

+0

那么,只要你可以控制你的API端代码,那真的没关系。然而,作为一个用户,发送“本田”比“42”更方便我猜...你能详细说明为什么用户需要获得“可用制造商无论”列表吗? – 2013-03-25 14:52:26

回答

1

对于这个问题,REST并没有太多的说明。 然而,通常其他地方根本偏好使用URI作为idenitifiers,所以人们可以说,你应该送..

{ 
    "Id": "1000000251" 
    "Manufacturer": "http://myapi.com/manufacturers/1" 
} 

我不相信这是必要的,但。有一部分REST社区争论在表示中使用标识符使表示不是self-descriptive,因为标识符的含义可能会在用户代理程序获取标识符和使用标识符时发生变化。就我个人而言,我也不买。

我会说,不要冒汗。做一切最适合你的场景。

+0

我很感激这个答案。我宁愿不向外部客户提供我们的内部身份证(不是因为安全,而是因为他们真的没有意义)。我认为它会让用户更友好,让他们指定他们想要使用的文本值,然后我只是验证它,如果他们提供了错误的数据,可能会发回400错误。那么,更糟的情况是,他们可以重新查找制造商的有效选择。 – 2013-03-25 14:58:26

+0

@AdamLevitt对我来说这似乎完全合理。 – 2013-03-25 15:36:25

相关问题