O desenvolvimento de APIs permite a exposição e o consumo de dados com o objetivo da integração (front-end, portais, customizações, etc) ao back-end do produto Datasul, de maneira segura e padronizada.
A estrutura de integração de APIs Datasul suporta o envio de requisições no estilo de arquitetura REST com o desenvolvimento da regra de negócio em Progress.
Abaixo o fluxo das requisições via HTTP (DATASUL-REST) e formato de execução via Progress:

Esta funcionalidade está disponível para utilização conforme apresentado no quadro abaixo:
|
Existem 2 contextos definidos tanto para a Antiga arquitetura (Jboss) quanto para a Nova arquitetura (Tomcat, Wildfly). Estes contexto tem o objetivo de definir o acesso das requisições, ou seja, se são contextos de acessos internos (via menu) ou acessos externos (via APPs por exemplo).
|
O Guia de Implementação de API TOTVS define que o formato das URIs dos endpoints devem conter o nome do produto, o módulo, a versão da API e o recurso alvo da Modelo de acesso aos Contextos:/prg
/api
|
Para "publicar" a funcionalidade Progress ABL basta criar o programa (.p) com o seguinte caminho: fnd/api/v1/users.p (<módulo>/api/<versão API>/<recurso>.p). A sub-pasta "api" passa então a concentrar todas as funcionalidades de integração do módulo em questão:
O Guia de Implementação de API TOTVS define também que a troca de mensagens é feita (impreterivelmente) no formato JSON, e por conta disso, a troca de mensagens com as funcionalidades Progress também devem ser feitas nesse formato, mais especificamente por meio de um parâmetro de entrada e outro de saída do tipo LONGCHAR que devem ser devidamente tratados (parseados e formatados) pela funcionalidade utilizando as includes utilitárias disponibilizadas:
Abaixo um exemplo de recurso desenvolvido em Progress ABL para ser utilizado junto ao serviço de API:
No exemplo acima, temos as seguintes includes utilitárias:
|
O objeto JsonObject, recebido pela requisição no programa Progress conterá informações completas da requisição, desde informações do HEADER, QUERY PARAMs, PATH PARAMs, o próprio PAYLOAD e arquivos MULTIPART. Através desta mensagem, o desenvolvedor poderá efetuar os devidos filtros e classes utilitárias necessárias.
Exemplo de mensagem:
{
uri: valor,
method: GET,
headers: {},
pathParams: [ "param1", "param2" ],
queryParams: { query1: [valor1, valor2], query2: [valor1]},
payload: { },
multyPartFile: [ {file: ...}, {file: ...}]
} |
Com o objetivo de facilitar a manipulação dos objetos JsonObject recebidos e enviados pela API Progress foram desenvolvidas algumas classes de utilitários:
Para realizar o login no DATASUL-REST é necessário passar como parâmetro usuário e senha na seguinte URL.
http://localhost:8180/dts/datasul-rest/resources/login?username=USER&password=PASSWORD |
Para passagem da senha é necessário converte-la para SHA1, com este resultado realizar a conversão para BASE64. Tendo em vista que a conversão para BASE64 irá trazer caracteres incoerentes para passagem da URL, será necessário fazer a conversão para URL-ENCODE.
Observe que por trazer os caracteres " / e = " na conversão de SHA1 e BASE64, é necessário o URL-ENCODE.
DEFINE VARIABLE testPass AS CHARACTER NO-UNDO.
testPass = BASE64-ENCODE(SHA1-DIGEST(LC("testPassword"))).
// Utilize uma lógica de conversão URL-ENCODE para variavel testPass |
http://localhost:8180/dts/datasul-rest/resources/login?username=super&password=i7YRj4%2FWk1rQh2o740pxfTJwj%2F0%3D |