Método GET
Produto: | ADVPL |
Versões: |
|
Ocorrência: | Gostaria de um material que explicasse realmente como implementar a tecnologia RESTFul no Protheus, com exemplos de APIs, exemplos de programas externos consumindo o serviço, e exemplos de envio e recebimento de dados. |
Ambiente: | Todos |
Passo a passo: | O método GET é responsável por retornar ao cliente requisitador alguma coisa qualquer, como por exemplo uma lista de clientes cadastrados. Vamos ver abaixo um exemplo de método GET: WSMETHOD GET WSSERVICE CLIENTES Local aArea := GetArea() Local cNextAlias := GetNextAlias() Local oCliente := CLIENTES():New() // –> Objeto da classe cliente Local oResponse := FULL_CLIENTES():New() // –> Objeto que será serializado Local cJSON := “” Local lRet := .T.
BeginSQL Alias cNextAlias SELECT A1_COD, A1_LOJA, A1_NOME, A1_END, A1_CGC, A1_CEP, A1_DDD, A1_TEL FROM %table:SA1% SA1 WHERE SA1.%notdel% EndSQL (cNextAlias)->( DbGoTop() ) If (cNextAlias)->( !Eof() ) While (cNextAlias)->( !Eof() ) oCliente:SetCodigo( AllTrim((cNextAlias)->A1_COD )) oCliente:SetLoja( AllTrim((cNextAlias)->A1_LOJA)) oCliente:SetNome( AllTrim((cNextAlias)->A1_NOME)) oCliente:SetCGC( AllTrim((cNextAlias)->A1_CGC )) oCliente:SetCEP( AllTrim((cNextAlias)->A1_CEP )) oCliente:SetEnd( AllTrim((cNextAlias)->A1_END )) oCliente:SetDDD( AllTrim((cNextAlias)->A1_DDD )) oCliente:SetTel( AllTrim((cNextAlias)->A1_TEL )) oResponse:Add(oCliente) (cNextAlias)->( DbSkip() ) EndDo cJSON := FWJsonSerialize(oResponse, .T., .T.,,.F.) ::SetResponse(cJSON) Else SetRestFault(400, “SA1 Empty”) lRet := .F. EndIf RestArea(aArea) Return(lRet) Explicação do trecho de código acima: Conforme FAQ, para serialização de um objeto JSON, precisamos passar um objeto para a função FWJSONSerialize, para isso nas linhas 5 e 6 temos a declaração de duas variáveis que são objetos das classes CLIENTES e FULL_CLIENTES. CLIENTES é onde armazenamos os atributos do cliente. Na sequência fazemos uma query na tabela de clientes (SA1). Na linha 19 temos a condição (cNextAlias)->( !Eof() ) , nesse momento eu verifico se a minha query retornou algum resultado. Retorno da condicional positivo:Caso tenha retornado então iremos alimentar os objetos como podemos ver o trecho de código entre as linhas 21 e 35. Entre as linhas 23 e 30 alimentamos o objeto oCliente com os dados do cliente. Na linha 32 adicionamos o objeto cliente já alimentado, na lista de clientes oResponse pois será essa lista que iremos serializar. Após sair do loop onde alimentamos os objetos, utilizamos o seguinte comando para transformar a nossa lista de clientes (oResponse) em uma string JSON serializada e na sequência utilizamos o comando SetResponse para enviar a string ao cliente. cJSON := FWJsonSerialize(oResponse, .T., .T.,,.F.) ::SetResponse(cJSON) Retorno da condicional negativo:Caso minha query não retorne nenhum registro então iremos utilizar a função SetRestFault para retornar um código HTTP de erro e uma mensagem. SetRestFault(400, “SA1 Empty”) Exemplo de retorno com o resultado negativo da condicional (sem dados no SA1): Exemplo de retorno com o resultado positivo da condicional (com dados no SA1): |
Observações: | O Postman foi utilizado como exemplo de consumo em uma ferramenta externa, a TOTVS não presta suporte a ferramentas de terceiros, somente analisa o serviço e/ou consumo utilizando os recursos documentados e disponíveis para customização. Documentações de referência: http://tdn.totvs.com/display/tec/REST |