Como criar uma API REST no Protheus sem escrever ADVPL
Por Cesar Ramalho (abre em nova aba), HSB Consultoria · Atualizado em
Para criar uma API REST no Protheus sem ADVPL, você configura o endpoint no HyperSync em 6 passos e ele já é o webservice de produção: sem fonte, sem compilar e sem patch no RPO. Todos os endpoints atendem numa rota só, POST /api/v1/hypersync/execute, autenticados pelo REST do próprio Protheus.
- Consulta por SQL e gravação pela rotina padrão (ExecAuto) ou direto na tabela (RecLock).
- Só os usuários do Protheus autorizados chamam, e cada execução fica na Auditoria.
- ADVPL só entra quando há regra de negócio própria, no tipo Customizado.
Antes de começar
Protheus 12.1.2410 em diante
O HyperSync roda no Protheus do cliente, a partir do release 12.1.2410.
REST do Protheus no ar
A autenticação é a do REST do próprio Protheus: quem integra pega o token com usuário e senha do ERP.
Instalação pela HSB
Uma vez por ambiente. Depois disso, cada endpoint novo é só configuração.
Como a instalação funciona está em Instalação.
Os 6 passos do configurador
Cada integração é um endpoint. Ao final do sexto passo ele já responde em produção.
- 1DireçãoEntrada, quando o outro sistema grava no Protheus, ou saída, quando ele lê do Protheus ou o Protheus exporta.
- 2Tipo de processamentoNa saída: Query SQL (devolve JSON na chamada), Banco de Dados (grava em SQL Server, PostgreSQL ou Oracle) ou Arquivo (CSV ou TXT no FTP). Na entrada: ExecAuto, pela rotina automática padrão, ou RecLock, direto na tabela. Há ainda o Customizado, que chama uma função ADVPL de vocês.
- 3Tipo de execuçãoSíncrona, que responde na mesma chamada, ou assíncrona, que entra na fila e devolve um ticket. Banco de Dados e Arquivo são sempre assíncronos e rodam pelo Schedule do Protheus.
- 4ConfiguraçãoA consulta SQL, com os campos que podem sair e se o endpoint aceita filtro. Ou a rotina ExecAuto e as operações permitidas: incluir, alterar, excluir.
- 5AutorizaçãoA lista de usuários do Protheus que podem chamar o endpoint. Quem não está na lista recebe 400 sem permissão.
- 6SandboxTesta o endpoint e gera o cURL e a collection do Postman para quem vai integrar. Na gravação, o teste roda numa transação desfeita no fim. O tipo Banco de Dados não tem sandbox.
Exemplo 1: consultar clientes na SA1
Um CRM precisa dos clientes de São Paulo, com código, nome e UF.
O endpoint
- 1Direção
- Saída
- 2Tipo
- Query SQL
- 3Execução
- Síncrona
- 4Configuração
- O SELECT na SA1 com código, nome, CNPJ e UF
- 5Autorização
- O usuário do Protheus da integração
- 6Sandbox
- Testa e gera o cURL
fieldsescolhe as colunas entre as que a consulta traz, como no GraphQL.paramsmanda um filtro, uma condição SQL, quando o endpoint permite parâmetros.pageepageSize, dentro dedata, paginam. Sem paginação volta tudo o que a consulta trouxer.- O endpoint de consulta passa pela trava de SQL: só lê.
A chamada
POST /api/v1/hypersync/execute
Authorization: Bearer <token do REST do Protheus>
tenantId: 99,01
Content-Type: application/json
{
"id": 41,
"data": {
"fields": ["A1_COD", "A1_NOME", "A1_EST"],
"params": "A1_EST = 'SP'"
}
}A resposta traz só os campos pedidos, com os nomes em minúsculas:
{
"result": [
{ "a1_cod": "000231", "a1_nome": "COMERCIAL ALVORADA LTDA", "a1_est": "SP" },
{ "a1_cod": "000117", "a1_nome": "DISTRIBUIDORA PAULISTA SA", "a1_est": "SP" }
]
}Exemplo 2: gravar um título a pagar por ExecAuto
Um sistema de compras inclui títulos na SE2 pela FINA050. O endpoint é de entrada, tipo ExecAuto, e a rotina valida o título como validaria na tela.
POST /api/v1/hypersync/execute
Authorization: Bearer <token do REST do Protheus>
tenantId: 99,01
Content-Type: application/json
{
"id": 43,
"function": "FINA050",
"action": 3,
"data": {
"cabec": {
"E2_PREFIXO": "BOL",
"E2_NUM": "000051207",
"E2_TIPO": "DP",
"E2_NATUREZ": "202010",
"E2_FORNECE": "F00012",
"E2_LOJA": "01",
"E2_EMISSAO": "20261006",
"E2_VENCTO": "20261106",
"E2_VALOR": 1500.00
}
}
}Se a rotina gravou:
{ "successMessage": "Registro incluído via execauto com sucesso!" }functioneactionficam fora dedata. A action 3 inclui, a 4 altera e a 5 exclui; o endpoint define quais são permitidas.- Os campos vão com o nome do Protheus e as datas em AAAAMMDD.
- Se a rotina recusar, volta
errorMessagecom a mesma mensagem que o Protheus mostraria na tela.
Rotina com cabeçalho e itens, como o pedido de venda, manda os dois na mesma chamada. O exemplo completo está no guia Como incluir pedido de venda no Protheus por API (MATA410).
O que muda em relação a escrever o fonte
O mesmo webservice feito das duas formas, com o fonte WSRESTFUL ao lado, está em HyperSync × WSRESTFUL.
Quando o ADVPL ainda entra
Regra de negócio própria
Vira uma função ADVPL de vocês, chamada pelo tipo Customizado. O endpoint continua no HyperSync, com autorização, auditoria e sandbox; só a regra é código.
Converter campos
Não há de-para: entrada e saída usam os nomes do Protheus, como C5_CLIENTE e A1_COD. A conversão fica com quem chama ou numa função Customizada.
Disparar quando um dado muda
O HyperSync não tem gatilho de alteração: quem inicia a chamada é o sistema de fora, ou o Schedule do Protheus nas saídas agendadas. Avisar outro sistema quando um registro muda continua sendo ADVPL.
Perguntas frequentes
Dá para criar uma API REST no Protheus sem escrever ADVPL?+
Preciso compilar ou aplicar patch no RPO para publicar o endpoint?+
Como fica a autenticação da API?+
Quais tabelas e rotinas posso usar?+
O endpoint criado em homologação vai sozinho para produção?+
A consulta pode alterar dados do Protheus?+
Veja um endpoint do Protheus ficar pronto sem uma linha de ADVPL.
A demonstração monta o endpoint numa conversa, no visual do configurador. Nenhum Protheus real é acessado.