用于更新资源和创建关联对象的RESTful方法

时间:2012-10-19 06:22:31

标签: rest restful-architecture idempotent

我正在为提供临床数据分析的服务设计REST风格的API。 API允许用户创建患者资源。此资源为服务器端分析提供输入数据。

创建患者既不安全也不是幂等(服务器分配ID)因此使用POST,POST Patients

患者资源可能很大,因此它具有子资源,例如药物,可以更新。更新药物是幂等的,因为整套药物将被替换,因此使用PUT。

通过请求POST /Patients/{patientId}/analysisResults触发临床分析。或者,用户可以请求在POST /患者请求的响应中返回分析结果;这节省了额外的HTTP往返。

我的问题是这个;用户希望将更新响应(PUT)中包含的分析结果发送到Patient/Medications - 这是可以理解的,因为他们不希望再次请求检索结果。因此,PUT Patient/Medications在患者资源方面是幂等的,但在所有资源方面不是幂等的,因为将创建新的分析结果子资源。我应该:

  • a)使用PUT启用此功能。
  • b)通过POST启用此功能。
  • c)坚持要求创建新的单独呼叫 analysisResults即使这会增加整体 最终用户的响应时间?

1 个答案:

答案 0 :(得分:2)

选项C,如果您希望保持RESTful状态。

选项A和B很可能会削弱REST旨在为您提供的属性,缓存是直接想到的。

如果这是基于HTML的,则响应将包含指向analysisReport资源的链接,以允许用户将应用程序驱动到有用的位置。