#Include "totvs.ch"
#Include "restful.ch"
//-------------------------------------------------------------------
/*/{Protheus.doc} MeuTeste
Serviço REST de exemplo que mostra como tratar corretamente
as respostas de mensagem.
@author framework
@since 01/10/2021
@version 1.0
/*/
//-------------------------------------------------------------------
wsrestful meuteste description 'Classe teste de rest'
Wsdata Id as character
wsmethod GET teste1 description 'teste1' wssyntax "/api/framework/v1/meuteste/teste1/{id}";
path "/api/framework/v1/meuteste/teste1/{id}"
END WSRESTFUL
//-------------------------------------------------------------------
/*/{Protheus.doc} Teste1
Serviço (get) para testes de retorno das requisições tratando encode corretamente
No postman ou outro tipo de app para testes, podemos fazer da seguinte maneira:
Ao passar o pathparam id= 1, estamos dizendo para o sistema que não vamos fazer nada dentro do fonte
Ao passar o pathparam id=2, vamos dizer para o nosso fonte fazer encodeutf-8 na mão
ao passar o pathparam id=3, vamos dizer ao nosso fonte para fazer o tratamento correto via lib.
Desta forma, não importa se o header Accept-Charset: UTF-8 for enviado, o tratamento sempre é o correto.
@author framework
@since 01/10/2021
@version 1.0
/*/
//-------------------------------------------------------------------
wsmethod GET teste1 WSSERVICE meuteste
Local cReturn as character
cReturn := "imã"
//não quero que faça encode. Aqui só vai retornar correto se o client enviar o header
//Accept-Charset: UTF-8
If self:id == '1'
Conout('faz nada')
//Quero que faça encode. Aqui só vai retornar correto se o client NÃO enviar o header
//Accept-Charset: UTF-8
ElseIf self:id == '2'
cReturn := EncodeUtf8(cReturn)
//Quero que a função de lib avalie o encode. Aqui sempre vai retonar certo, independente do
//Accept-Charset
ElseIf self:id == '3'//faz o processo certo
cReturn := FWHttpEncode(cReturn)
Endif
Self:SetResponse(cReturn)
Return .T.