Как проверить запрос REST?

Учитывая эту услугу:

POST /hotel HTTP/1.1

<hotel>
  <a>aaa</a>
  <b>bbb</b>
  <c>ccc</c>
</hotel>

HTTP/1.1 201 CREATED
Location: /hotel/123

Когда мы обрабатываем запрос на сервере, мы проверяем hotel XML в запросе на соответствие DTD.

Вопрос в том, что в соответствии с передовой практикой REST клиент должен ссылаться на DTD в запросе (как обычно это делается при создании XML-документа на основе DTD)? Или это не обязательно? DTD будет описан в документации по API, чтобы разработчики клиентской службы были осведомлены о деталях проверки DTD.


person Marcus Leon    schedule 27.10.2009    source источник
comment
Если это в новинку, зачем использовать DTD, почему не XML-схему?   -  person James Black    schedule 27.10.2009
comment
Мы используем существующее опубликованное DTD, предоставленное внешней организацией.   -  person Marcus Leon    schedule 27.10.2009
comment
Я не понимаю вопроса. Вы выполняете GET, но затем говорите, что хотите проверить XML на сервере. Так как же клиент вообще участвует? Эта проблема, как я понимаю, полностью ортогональна REST. Это просто проблема проверки XML.   -  person Darrel Miller    schedule 28.10.2009
comment
@Darrel, я обновил свой плохо сформулированный вопрос ..   -  person Marcus Leon    schedule 28.10.2009
comment
XML-схема @James Black - действительно довольно плохой стандарт. Я бы предпочел DTD, но уж точно не Relax NG.   -  person Bob Aman    schedule 29.10.2009


Ответы (2)


Что ж, вы, конечно, можете выплюнуть 400 Bad Request, если тело запроса не проходит проверку DTD, но мне бы не требовалось присутствие ссылки на DTD. Вы должны разрешить его опускать и использовать, если он есть, но я также не выполню запрос, если они укажут неправильное DTD. Сообщение об ошибке, конечно же, должно указывать на ожидаемое DTD.

Возможно, вы захотите пропустить строгую проверку соответствия, если DTD опущено, поскольку это больше похоже на то, что люди хотят, когда они настраивают программное обеспечение, но по соображениям производительности они могут захотеть отключить, когда они узнают, что все работает. работающий.

person Bob Aman    schedule 28.10.2009

Насколько мне известно, REST не может ничего сказать о содержимом тела POST.

Очевидно, вам в любом случае необходимо проверить XML на сервере, поэтому лучшее, что вы можете сделать, - это рекомендовать клиенту проверять XML на соответствие DTD перед его отправкой, чтобы сэкономить время и пропускную способность. Однако у вас действительно нет возможности обеспечить его соблюдение.

Я думаю, что ваша обязанность как автора сервиса - принять запрос, независимо от того, относится ли он к DTD, но это только мое мнение.

person Darrel Miller    schedule 28.10.2009