2009-10-27 5 views
1

Учитывая эту услугу:Как проверить запрос 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.

+0

Если это новизна, зачем использовать DTD, почему бы не XML-схему? –

+0

Мы используем существующее опубликованное DTD, предоставленное внешней организацией. –

+0

Я не понимаю вопроса. Вы делаете GET, но затем говорите, что хотите проверить XML на сервере. Итак, как вообще может быть задействован клиент? Этот вопрос, насколько я понимаю, полностью ортогонален REST. Это просто проблема проверки XML. –

ответ

1

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

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

2

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

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

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