用单个URI和单个请求处理多种HTTP方法的正确方法是什么

时间:2019-01-05 15:34:52

标签: rest api http-method

我想了解解决以下问题的正确的请求/响应结构和API设计。 我有2个实体,可以说Abc和Xyz。 Xyz具有Abc的外键。 因此,要为Xyz创建记录,必须映射Abc记录。

现在从请求结构的角度来看,我需要为Abc创建一个POST请求,就像

POST /Abc

这非常简单。但是问题出在Xyz。 要求是每当有用户来创建Xyz时,他也可能会请求更新附加的Abc记录。 例如, 我已经为ID为5的Abc创建了一条记录。现在,每当我要创建相应的Xyz记录时,我都将请求更新ID为5的Abc记录并为此外键创建一个新的Xyz记录。 所以,     补丁/ Abc 和     开机自检/ Xyz 但是客户端只请求一次,并在单个URI上共享全部数据。

那么,在单个URI上处理多个HTTP方法的正确方法是什么? 我应该创建POST请求还是PATCH?

我无法创建2个请求,因为客户端希望此过程具有事务性。

1 个答案:

答案 0 :(得分:0)

首先我想你应该这样想

  

我无法创建2个请求,因为客户端希望此过程具有事务性。

以另一种方式。正如我所看到的,对事务的需求可能只是意味着-我对此可能非常错,因此请找出真相-当对Abc进行更新时,创建新Xyz的过程就是与更新Abc有关。因此,如果Xyz的更新失败(反之亦然)并且返回了一些错误,则不会创建Abc

因此,您也许可以创建两个端点:

  • 仅需 POST 的人:输入新的Xyz
  • 另一个用于创建新的Xyz并同时以事务方式更新Abc

因此,您也许可以创建两个端点。这里更有趣的是后者是 POST 还是 PATCH ?似乎两者兼而有之。

但是,例如-this question & accepted answer,大约有 PATCH

  

PATCH方法请求将请求实体中描述的一组更改应用于由Request-URI标识的资源

现在,以下问题是由请求URI标识的更改过的Abc ?如果不是这样的话-据我了解-是 POST

这意味着您只需要一个 POST 端点即可检查是否有必要,是否需要交易更新ID。但也许最好有单独的端点。