Я могу придумать несколько вариантов.
Во-первых, вы уверены, что вам нужно предоставить идентификатор как часть представления? Или достаточно указать местоположение нового опубликованного ресурса?
Ваши сообщения клиента:
<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