Árvore de páginas

Basicamente, uma mensagem de erro é definida pelo Status Code do HTTP, embora possa ser complementada ou definida pelo Corpo da Mensagem.

A forma de geração de mensagem de erro é uma preferência pessoal, pois há quem defenda implementações mais simples e os códigos e controles fiquem todos na mensagem e há quem defenda seguir a risca a obrigatoriedade de mudar o Status Code do HTTP. Não iremos divagar sobre o assunto nem defender modo algum, apenas iremos mostrar como implementar de forma simples os modos.


Exemplo utilizando a forma mais simples de geração de erro

Nesse exemplo, com o uso de apenas 1 (um) método, já definimos a mensagem e o Status Code.

#include "tlpp-core.th"
#include "tlpp-rest.th"

@get("sample/setFault")
user function samplesetFault()

 local cUser := ''
 local jQuery

 jQuery := oRest:getQueryRequest()
 if ( jQuery <> Nil )
   cUser := jQuery[ 'user' ]
 endif

 if ( upper(cUser) == 'ADMIN' )
   oRest:setResponse( '{"admin":"ok"}' )
 else
   oRest:setFault( '{"admin":"no"}' )
 endif

return

Note que utilizamos o método oRest:setFault, nele definimos a mensagem que gostaríamos de retornar, porém, automaticamente o REST server já marca o Status Code como 500.

Caso deseje outro Status code, sugerimos utilizar a implementação do segundo exemplo.

Mais detalhes sobre o método oRest:setFault()


Exemplo utilizando 2 métodos

Nesse exemplo, faremos uso de 2 (dois) métodos, uma para definimos a mensagem e o outro para o Status Code.

#include "tlpp-core.th"
#include "tlpp-rest.th"

@get("sample/erro/mode_2")
user function sampleErrorMode2()

 local cUser   := ''
 local cReturn := ''
 local jQuery

 jQuery := oRest:getQueryRequest()
 if ( jQuery <> Nil )
   cUser := jQuery[ 'user' ]
 endif

 if ( upper(cUser) == 'ADMIN' )
   cReturn := '{"admin":"ok"}'
 else
   oRest:setStatusCode( 403 ) // Forbidden
   cReturn := '{"admin":"no"}'
 endif

 oRest:setResponse( cReturn )
return

Nesse caso, utilizamos um método para modificar o Status Code conforme nossa necessidade, pois 500 (Internal Server Error) não determina o erro correto, e depois seguimos definindo a mensagem de retorno..

Mais detalhes sobre modificar o Status Code HTTP

  • Sem rótulos