这是一个PUT vs PATCH问题。 换句话说,问题标题是:通常,基础对象的URL位于/object/{id}
。 添加URL /object/{id}/member
并在该特定成员上调用PUT仍然是幂等的吗?
如果我有一个名为Booking
资源,看起来像这样
public class Booking {
private bookingId;
private name;
}
//accessors ...
我认为PUT和PATCH的内容很清楚。 我的困惑来自决定幂等性指的是...
如果第一种情况是正确的,那么我希望这样创建一个对Booking对象的特定调用是RESTful的:
在此处输入/booking/{id}/name
灰色区域? (通常是booking/{id}
补丁操作)
{
name: "Joe Schmoe"
}
在这种情况下,基础对象已更改,但是资源保持幂等(此处的GET将返回相同的对象,并且像上面的后续PUT一样不会更改任何内容),因为该资源特定于对象成员 ? 或者通过更改成员,我是否违反了幂等律?
如果第二个选项为true,并且URL不应特定于对象成员,那么我希望在代表整个对象的URL资源的成员上使用PATCH来更新特定的对象成员,如下所示:
补丁/booking/{id}
*
{
name: "Joe Schmoe"
}
我希望执行以下操作不是 RESTful的。 显然,它将破坏资源URL的幂等性。 让我知道我是否在这里弄错了。
PUT /booking/{id}
{
name: "Joe Schmoe"
}
就幂等性而言,它与响应有关。 在报价下方找到。
幂等HTTP方法是可以多次调用而没有不同结果的HTTP方法。 该方法仅被调用一次还是十次调用都没有关系。 结果应该是相同的。 从本质上讲,这意味着成功执行请求的结果与执行请求的次数无关。 例如,在算术中,将零加到数字上就是幂等运算。
请参阅下面的链接。 https://restfulapi.net/idempotent-rest-apis/
您也可以参考此链接中的表格。 https://www.ably.io/concepts/idempotency
它清楚地显示了与http方法的幂等性。