Como validar pedido resto?
-
06-07-2019 - |
Pergunta
Dado este serviço:
POST /hotel HTTP/1.1
<hotel>
<a>aaa</a>
<b>bbb</b>
<c>ccc</c>
</hotel>
HTTP/1.1 201 CREATED
Location: /hotel/123
Quando processar o pedido no servidor que irá validar o XML hotel
no pedido contra um DTD.
A pergunta é, como uma melhor prática resto deve o cliente consulte o DTD no pedido (como normalmente se faz ao criar um documento XML baseado em um DTD)? Ou isso é não é necessário? O DTD serão descritos na documentação da API para que os escritores do serviço de cliente estará ciente dos detalhes de validação DTD.
Solução
Bem, você poderia certamente cuspir de volta um 400 Bad Request
se o corpo solicitação falhar uma verificação DTD, mas eu não exigiria a referência DTD para estar presente. Você deve permitir que ele seja omitido, e usá-lo se ele está lá, mas eu também iria falhar o pedido se especificarem o DTD errada. A mensagem de erro deve, é claro, indicar o que o DTD esperado é.
Você pode querer considerar pular a verificação de conformidade estrita se o DTD for omitido, uma vez que é mais o tipo de coisa que as pessoas querem quando eles estão a criação do software, mas por motivos de desempenho, pode querer ter off depois que eles sei que tudo está funcionando.
Outras dicas
Para meu conhecimento, REST não tem nada a dizer sobre o conteúdo do corpo POST.
Obviamente, você tem que validar o XML no servidor de qualquer maneira, então o melhor que você pode fazer é recomendar que o cliente valida o XML contra o DTD antes de enviá-lo, para economizar tempo e largura de banda. No entanto, você realmente não tem maneira de aplicá-la.
Eu acho que sua responsabilidade como um escritor do serviço é aceitar a solicitação ou não se refere à DTD, mas isso é apenas minha opinião.