RESTapi-使用PATCH更新特定资源,而不在请求中包含特定资源ID



我正在开发一个REST API,用于管理公司的汽车,员工可以在这里乘坐汽车和乘车。山脊有一个称为isActive的特性。

当他们完成骑行时,isActive属性需要设置为false

我的API目前的工作方式是(PATCHHTTP请求(是/api/v1/rides

用户发送带有JWT令牌的PATCH请求,API根据HTTP上下文确定它是哪个用户,找到与用户相关联的单独乘车,将isActive属性更新为false,并更新用户输入的string类型的短评论。

这可以接受吗?

我发现的每个源都表示端点应该看起来像/api/v1/rides/{rideId},但我不明白为什么在这种情况下它是必要的,因为它需要在前端进行更多的工作。

这可以接受吗?

可能不是

PATCH /api/v1/rides

是改变CCD_ 10资源的请求;也就是说,当您发送CCD_ 11请求时,您所要求的资源相同。如果您打算修改一些其他资源,那么您打算修改的资源应该是目标URI。

潜在的问题是:通用HTTP组件认为所有资源都以相同的方式理解请求。这就是REST"自描述性消息"接口的约束。当您宣传您的资源支持PATCH时,我的第三方浏览器/spider/缓存/代理可以假设PATCH对您的资源的意义与对网络上其他所有资源的意义相同。

当因为您的资源使用了与标准不同的语义而出现昂贵的错误时,这是您的责任,而不是客户。

PATCH的意思是"将这些更改应用于由目标URI标识的资源"。如果您打算将编辑应用于其他资源,那么您应该指定该标识符。

如果您正在做一些非标准的事情,那么您可能应该使用POST而不是PATCH作为请求中的方法标记。参见Fielding 2009:

POST在HTTP中有许多有用的用途,包括"此操作不值得标准化"的一般用途

最新更新