假设我有一个对象,Widget,由Id和Name组成。假设我公开了一个端点/ widget,客户端可以在其中发布新的Widget对象。如果我希望Id字段始终由服务器设置,不能由客户端修改,但仍然对客户端可见,我如何声明Id字段不可修改?如果这有任何不同,我正在使用RESTeasy。
答案 0 :(得分:0)
您可以在服务器上编写可以随意执行任何操作的代码。这包括根据需要添加或更改数据。检查明确指出的AtomPub protocol section 9.2:
由于服务器可以自由更改 发布条目,例如,通过更改 atom:id元素的内容, 返回Entry可能很有用 客户端,使其能够关联 新的客户端和服务器视图 条目。
答案 1 :(得分:0)
我可以想到几个选择。
首先,您确定需要将ID作为表示的一部分公开吗?或者是否足以回应新发布资源的位置?
您的客户帖子:
<Resource><Name>New Resource</Name></Resource>
你回答:
HTTP/1.1 201 Created
...
Location: /resources/{new_resource_id}
除此之外,我认为与您的客户进行一些简单易懂的约定是可以的。我认为大多数开发人员都知道ID很可能是系统生成的(特别是,因为你正在进行POST而不是PUT)。对于不太明显的情况,你有任意只读字段(或其他验证或显示信息),我认为提供元数据链接可能是有意义的:
<NewPersonForm>
<atom:link href="/people/new/metadata" rel="/rels/metadata" />
<Name />
<Department>HR</Department>
</NewPersonForm>
元数据的外观取决于您,但这些内容可能对您有用:
<Metadata>
<Element>
<Name>Department</Name>
<IsReadOnly>True</IsReadOnly>
</Element>
</Metadata>
这是一个很好的,格式中立的(它适用于XML和JSON)向客户端提供信息的方式,如果他们真的想要,他们可以编程反对它来动态构建表单(我使用它提供验证信息,特定语言标签和数据类型信息。)
我希望这会有所帮助。
约翰