No artigo de hoje, vou mostrar como subir um serviço de WS Rest no Protheus.
Obs.: O tutorial abaixo foi baseado nos exemplos do TDN, no fim desse artigo irei deixar os links de referência para quem quiser se aprofundar no assunto e nos exemplos
- Copie a pasta appserver de algum slave que você tenha, e deixe com o nome por exemplo, appserver_rest
- Crie também um APO específico para esse serviço, no nosso caso será no caminho C:\TOTVS\ERP\Protheus\apo_rest com o nome AMB_REST dentro do .ini
- No arquivo .ini, altere a porta, o nome do serviço e insira as chaves HTTPJOB, ONSTART, HTTPV1, HTTPREST e HTTPURI
[AMB_REST]
SourcePath=C:\TOTVS\ERP\Protheus\apo_rest
RootPath=C:\TOTVS\ERP\Protheus_Data
StartPath=\system\
RpoDb=top
RpoLanguage=Portuguese
RpoVersion=120
Trace=0
TopMemoMega=1
DBAlias=PROTHEUS
DBServer=localhost
DBDatabase=MSSQL
DBPort=7890
StartSysInDB=1
[TopConnect]
Database=MSSQL
Alias=PROTHEUS
ProtheusOnly=0
Port=7980
[Drivers]
Active=TCP
[TCP]
TYPE=TCPIP
Port=1259
[General]
InstallPath=C:\TOTVS\ERP\Protheus
Segmento=YddTQHWW=VZF=yhu
Serie===AV
BuildKillUsers=1
MaxStringSize=10
[LICENSECLIENT]
server=localhost
port=7777
[service]
Name=TOTVS_PROTHEUS_REST
Displayname=TOTVS | WebService REST
[TCPSERVER]
Enable=0
;Configurando o serviço que irá rodar no ambiente do REST
[HTTPJOB]
Main=HTTP_START
Environment=AMB_REST
;Instrução para quando iniciar o serviço, iniciar o HTTPJOB
[ONSTART]
Jobs=HTTPJOB
RefreshRate=120
;Habilitar o HTTP para REST
[HTTPV11]
Enable=1
Sockets=HTTPREST
;Define a porta o HTTP do Rest, e qual/quais serão os URI
;Para testes deixei a Security como 0, que não requer a autenticação, mas o ideal é que em produção essa chave esteja habilitada
[HTTPREST]
Port=8400
URIs=HTTPURI
SECURITY=0
;Define no URI que irá usar a empresa 99, filial 01 e somente 1 instância
[HTTPURI]
URL=/rest
PrepareIn=99,01
Instances=1,1
- Agora crie um atalho do appserver.exe para a área de trabalho, e inicie o serviço em modo console (depois se quiser instale ele no services.msc)
- Pelo navegador, acesse a URL juntamente com a porta que você configurou, no nosso caso foi http://localhost:8400/rest
- Crie um fonte apenas para testar se o serviço do REST esta funcionando (talvez seja necessário reiniciar o serviço do appserver)
//Bibliotecas #Include "TOTVS.CH" #Include "RESTFul.CH" WSRESTFUL zWSTest DESCRIPTION "Exemplo de WS com REST" //Atributos usados //WSDATA {nome do atributo} AS {tipo do atributo como Integer, String, etc} WSDATA count AS INTEGER //Métodos usados //WSMETHOD {Tipo do método como PUT, GET, POST e DELETE} {ID do Método} DESCRIPTION {Descrição do Método} WSMETHOD GET DateTime DESCRIPTION "Exemplo que retorna a data e hora atual" END WSRESTFUL WSMETHOD GET DateTime WSRECEIVE count WSSERVICE zWSTest Local lRet := .T. ::SetContentType("application/json") ::SetResponse('{"date":' + dToS(Date()) + ', "time":"' + Time() + '", "count": ' + cValToChar(::count) + ' }') Return lRet
- Verifique novamente a URL do passo 5, para ver se está listando agora a customização feita
- Realize algum teste com softwares de integração com REST, no nosso caso iremos usar o PostMan
Referências:
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Pueden explicar como activar el token Oauth 2.0 !! eso seria de mucha mucha ayuda
Bom dia Erick.
Opa, vou adicionar aqui nas sugestões.
Grande abraço.
Muitíssimo obrigado Daniel!
Sempre com ótimas postagens ensinam tudo pra gente.
Valeeeu!
Opa, eu que agradeço pelo comentário Lucas.
Um grande abraço.
Oi Dan,
estou tentando configurar o REST aqui na empresa 99,01 na versão 12.1.33, mas da erro log:
Mudança inválida em RPO File on CRIAPUBLICA(APLIB100.PRW) 20/05/2022 12:09:55 line : 1193
Bom dia Rafael, tudo joia?
Consegue publicar aqui como esta o appserver.ini? Como é a 33, vc configurou o custom rpo?
Boa noite. Qndo tento consumir o serviço pelo postman, retorna a mensagem de que não há licença disponível. Release 33
Bom dia Jerry.
No caso, como esta sua Security no appserver? Na autenticação, você está usando Bearer ou Basic?
Exemplo de Bearer: https://terminaldeinformacao.com/2021/10/05/como-usar-a-autenticacao-com-oauth2-em-rest/
Exemplo de Basic: https://terminaldeinformacao.com/2022/08/05/como-usar-basic-token-com-rest-no-protheus/
Uma dúvida é que eu preciso liberar o acesso externo para que eu possa conectar ao Mingle. Como faço para configurar essa funcionalidade?
Bom dia Paulo, tudo joia?
Não sei se entendi a dúvida, você quer liberar acessos externos, mas somente determinados IPs?
Se sim, dê uma olhada na AllowOrigin, nesse link do TDN tem uma explicação sobre: https://tdn.totvs.com/display/public/framework/Exemplo+CORS
Um grande abraço.