Páginas filhas
  • FWHttpEncode

Descrição:

Função que trata corretamente o retorno de requisições REST Protheus, devolvendo o encode correto para strings que possam possuir caracteres diferentes entre o utilizado no sistema e o UTF-8, por exemplo.

Importante: Nem toda string necessita realizar o tratamento de encode. O uso ou não deve ser avaliado pelo desenvolvedor. 

Disponível a partir da lib label 20201123

Sintaxe:

FWHttpEncode( <cString> )

Parâmetros:

NomeTipoDescriçãoObrigatório
cStringCaracterString que receberá tratamento para ser codificada no encode correto na resposta de uma requisiçãoX

Retorno:

cString → Caracter - String no encode correto da requisição

Exemplo:

O exemplo abaixo mostra os possíveis problemas ao não chamar a função encodeutf8 nos fontes de serviços REST e possíveis problemas ao chamar a mesma.


FWHasGed
#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. 



Essa função está disponível na lib 20210517 ou superior