限制RESTful API中特定字段的更新

时间:2011-06-27 01:02:11

标签: rest resteasy

假设我有一个对象,Widget,由Id和Name组成。假设我公开了一个端点/ widget,客户端可以在其中发布新的Widget对象。如果我希望Id字段始终由服务器设置,不能由客户端修改,但仍然对客户端可见,我如何声明Id字段不可修改?如果这有任何不同,我正在使用RESTeasy。

2 个答案:

答案 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)向客户端提供信息的方式,如果他们真的想要,他们可以编程反对它来动态构建表单(我使用它提供验证信息,特定语言标签和数据类型信息。)

我希望这会有所帮助。

约翰