Ограничить обновления для определенных полей в RESTful API - PullRequest
0 голосов
/ 27 июня 2011

Допустим, у меня есть объект, виджет, состоящий из идентификатора и имени.Допустим, я предоставляю конечную точку / widget, где клиенты могут размещать новые объекты Widget.Если я хочу, чтобы поле Id всегда устанавливалось сервером, не изменялось клиентом, но по-прежнему оставалось видимым для клиентов, как я могу объявить, что поле Id нельзя изменить?Я использую RESTeasy, если это что-то меняет.

Ответы [ 2 ]

0 голосов
/ 27 июня 2011

Я могу придумать несколько вариантов.

Во-первых, вы уверены, что вам нужно предоставить идентификатор как часть представления? Или достаточно указать местоположение нового опубликованного ресурса?

Ваши сообщения клиента:

<Resource><Name>New Resource</Name></Resource>

И вы отвечаете:

HTTP/1.1 201 Created
...
Location: /resources/{new_resource_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) способ предоставления информации клиенту, и, если они действительно этого хотят, они могут запрограммировать его для создания форм на лету (я использую его) предоставить информацию проверки, метки для конкретного языка и информацию о типе данных.

Надеюсь, это поможет.

John

0 голосов
/ 27 июня 2011

Вы пишете код на сервере, который свободно делает все, что хочет. И это включает в себя добавление или изменение данных по мере необходимости. Проверьте раздел протокола AtomPub 9.2 , в котором явно указано:

Поскольку сервер может свободно изменять POSTed Entry , например, путем изменения содержимое элемента atom: id, возврат заявки может быть полезен для клиент, позволяющий ему соотнести клиент и серверные представления нового Запись.

...