RESTful服务应该如何在可变资源上公开只读属性?

ehd*_*hdv 16 rest api-design http

我正在为这个服务设计一个资源,它有一组可变属性和一组不可变属性(例如,status由服务生成而不是客户端可能更改的内容).

我需要将此包含在对GET资源请求的响应中,但如果有人随后通过PUT请求发送资源,我不知道该怎么办.

强制调用者知道哪些属性是不可变的感觉是错误的,但是默默地丢弃更新也感觉不正确.响应PUT请求的更新资源可能会解决问题,但它不完美,因为调用者不应该对其请求和服务的响应进行区分,以确定是否接受了属性.

对正确前进的任何想法?

PS我看了如何更新REST资源?但它与这个问题不同,并且促进了过于繁琐的API设计.

EJK*_*EJK 9

我建议遵循http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.10中的指南.HTTP 409的定义包括以下内容:

1)由于与资源的当前状态冲突,无法完成请求.

2)响应主体应该包括足够的信息供用户识别冲突的来源.

因此,由于对不可变属性的更改是资源状态的问题,因此HTTP 409似乎适用.

至于如何将问题传达给客户,指导似乎是在响应主体中包含细节.

您还可以在表示本身(在GET上)传达属性的可变性.例如.

<MyObject>
   <Foo>17</Foo>
   <Bar readOnly="true">22</Bar>
   ....
Run Code Online (Sandbox Code Playgroud)