Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Cross Segmento - TOTVS Backoffice Linha Protheus - ADVPL - Criação de WebService Rest

time.pngTempo aproximado para leitura: 00:02:00 min

Dúvida

Preciso criar um WebService no modelo REST, porém, só criei até hoje no modelo SOAP.

Vocês teriam algum exemplo e documentação sobre isso?! O que achei no TDN é muito pouco para que possamos fazer um primeiro teste.


Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus)  – ADVPL – A partir da versão 11.80

Solução
Exemplo de Criação de um WS utilizando a Tecnologia Rest

#include "PROTHEUS.ch"
#include "RESTFUL.ch"

#xtranslate @{Header <(cName)>} => ::GetHeader( <(cName)> )
#xtranslate @{Param <n>} => ::aURLParms\[ <n> \]
#xtranslate @{EndRoute} => EndCase
#xtranslate @{Route} => Do Case
#xtranslate @{When <path>} => Case NGIsRoute( ::aURLParms, <path> )
#xtranslate @{Default} => Otherwise

Static aUsers := {{'1','Oscar','27'},{'2','Luana','40'},{'3','Kaua','25'}}

WsRestful tstwsrest Description "WebService REST para testes"

    WsMethod GET Description "Sincronização de dados via GET"       WsSyntax "/GET/{method}"
    WsMethod POST Description "Sincronização de dados via POST"     WsSyntax "/POST/{method}"
    WsMethod DELETE Description "Sincronização de dados via DELETE" WsSyntax "/DELETE/{method}"

End WsRestful

WsMethod GET WsService tstwsrest
	Local cUser  := ''
    Local nUser

    ::SetContentType( 'application/json' )

    @{Route}
        @{When '/users'}
            cUser := '['
            For nUser := 1 to Len(aUsers)
                cUser += '{"id":'+ aUsers[nUser][1]+;
			    ',"name":"'+aUsers[nUser][2]+;
			    '","age":'+aUsers[nUser][3]+'}'
                cUser += if(nUser < Len(aUsers),',','')
            Next nUser
            cUser += ']'
            ::SetResponse(cUser)
        @{When '/users/{id}'}
            nUser := aScan(aUsers,{|x| x[1] == @{Param 2} })
            If nUser > 0
                cUser := '{"id":'+ aUsers[nUser][1]+;
                            ',"name":"'+aUsers[nUser][2]+;
                            '","age":'+aUsers[nUser][3]+'}'
                ::SetResponse(cUser)
            Else
                SetRestFault(400,'Ops')
                Return .F.
            EndIf
        @{Default}
            SetRestFault(400,"Ops")
            Return .F.    
	@{EndRoute}

Return .T.

WsMethod POST WsService tstwsrest
    Local cJson := ::GetContent()
    Local oParser
    Local cUser, nUser

    ::SetContentType( 'application/json' )

    @{Route}
        @{When '/user'}
            If FwJsonDeserialize(cJson,@oParser)
                aAdd(aUsers,{cValToChar(oParser:id),oParser:name,cValToChar(oParser:age)})
                nUser := Len(aUsers)
                cUser := '{"id":'+ aTail(aUsers)[1]+;
                            ',"name":"'+aUsers[nUser][2]+;
                            '","age":'+aUsers[nUser][3]+'}'
                ::SetResponse(cUser)
            Else
                SetRestFault(400,'Ops')
                Return .F.
            EndIf
        @{Default}
            SetRestFault(400,"Ops")
            Return .F.
    @{EndRoute}
Return .T.

WsMethod DELETE WsService tstwsrest
    Local nUser
    ::SetContentType( 'application/json' )

    @{Route}
        @{When '/user/{id}'}
            nUser := aScan(aUsers,{|x| x[1] == @{Param 2} })
            If nUser > 0
                aDel(aUsers, nUser)
                aSize(aUsers, Len(aUsers) - 1)
            Else
                SetRestFault(400,"Ops")
                Return .F.
            EndIf
        @{Default}
            SetRestFault(400,"Ops")
            Return .F.
    @{EndRoute}
Return .T.
Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

0 Comentários

Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _