【问题标题】:REST resource modelling for decision based outcome基于决策的结果的 REST 资源建模
【发布时间】:2019-04-26 05:36:38
【问题描述】:

我们有 2 个系统 A 和 B。系统 A 正在执行一些手动审核任务,其中一个完成了此审核任务,系统 A 应该与系统 B 共享审核结果结果。系统 B 不应该轮询系统 A用于审核结果。

在为这个问题设计 API 时,我们构建了一个如下所示的资源

POST /review-xyz-result/

{
 "var1": "string",
 "var2": "string",
 "var3": "string",
 "reviewDecision": "X, Y, Z"
}

当结果为 Y 时,将填充 var 1 、 var2 和 var 3。对于决策 X 和 Z ,变量将为空。审查结果只能有一个决策,即。 X 或 Y 或 Z。

对此类资源建模的最佳方法是什么?

我们的开发小组中的一些意见认为,对于每个决策,让我们将单个 API 分成 3 个端点。不知何故,我觉得这不是正确的做法。系统 A 需要将逻辑放在其末尾以调用正确的端点并填充因变量。

所以我的第一个问题是,资源可以具有可选属性吗?

对于正在考虑的案例,为什么单独的端点会有意义?

【问题讨论】:

  • 你想从A调用B的API吗?因此,您要为系统 B 提供一个带有可选参数的 URL?
  • 是的。系统 B 将为系统 A 发布一个 post 端点。

标签: java json rest post http-post


【解决方案1】:

我的观点:在设计 REST api 时没有硬性规则(所有场景的单个 URL 或基于场景的单独 URL)。如果不是真的需要,大多数情况下基于场景的 URL 并没有太多建议,因为如果将来您的业务场景增加,它将最终得到更多的 URL。

如果您的 X、Y、Z 功能在任何情况下都完全不同,那么请尝试使用不同的 URL。如果功能相同,只有 reviewDecision 参数不同,那么我建议您在单个 URL 中使用路径参数( /host/controller/{reviewDecision}/),然后在正文中添加其他内容。

【讨论】:

    【解决方案2】:

    您可以使用一点 HATEOAS 并将 decisionvars 分开。

    1.在/review-xyz-result上发帖,你会得到:

    {
    "reviewDecision":"X" (OR) "Z",
    "variables-href":""
    }
    

    {
    "reviewDecision":"Y",
    "variables-href":"/review-xyz-result/{idOfResource}" OR
    "variables-href":"/review-xyz-result/var"
    }
    

    然后你在/review-xyz-result/{idOfResource} OR 等上调用 POST

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-07
      • 2010-09-15
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 2020-12-19
      相关资源
      最近更新 更多