Histórico da Página
| Section | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Introdução
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:
| Informações | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||
|
Contextos
| Expandir | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||
Existem 2 contextos definidos que se aplicam tanto para a Antiga arquitetura (Jboss) quanto para a Nova arquiteturao DTS4THF (Tomcat , Wildfly). Estes contextocontextos tem o objetivo de definir o acesso das requisições, ou seja, se são contextos de acessos internos (via menu) pelo contexto DTS/DATASUL-REST ou acessos externos (via APPs por exemplo) pelo contexto /API.
|
Formato URL
| Expandir | ||
|---|---|---|
| ||
O Guia de Implementação de API TOTVS define que no formato das URIs dos endpoints deve conter:
|
Formato URL
| Expandir | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||
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
|
Serviço Progress
| Expandir | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||
Para "publicar" a funcionalidade Progress ABL basta criar o programa (.p) com o seguinte caminho: fndsec/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: Expandir | | |||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||
| Bloco de código | ||||||||||||||||||||||||||||||||||||||||||
|
| Include | Parâmetros da Include | Endpoint | Descrição | Parâmetros enviado para PI Interna |
|---|
utp/ut-api |
-exec-metadata.i |
| Metadata | Devolve metadata para geração das telas. |
|
utp/ut-api- |
No exemplo acima, temos as seguintes includes utilitárias:
| Informações |
|---|
Algumas considerações sobre o uso da include de roteamento (ut-api-action):
|
| Informações |
|---|
A include ut-api.i precisa ser adicionada obrigatoriamente no início do programa Progress, visto que esta include faz uso da instrução USING para importação de classes. Portanto, devido a esta caraterística do Progress ABL, somente será possível adicionar outras includes depois da adição da ut-api.i e ut-api-notfound.i, respectivamente. |
exec-vld-form.i |
| VldForm | Validação de formulário. |
|
utp/ut-api-exec-vld-field.i |
| VldField | Validação de campo. |
|
utp/ut-api-exec-get.i |
| Get | Busca um registro. |
|
utp/ut-api-exec-query.i |
| Query | Busca vários registros. |
|
utp/ut-api-exec-create.i |
| Create | Criação de registro. |
|
utp/ut-api-exec-update.i |
| Update | Alteração de registro. |
|
utp/ut-api-exec-patch.i |
| Patch | Alteração de registro. |
|
utp/ut-api-exec-delete.i |
| Delete | Eliminação de registro. |
|
utp/ut-api-exec-delete-list.i |
| DeleteList | Eliminação em lote. |
|
utp/ut-api-exec-custom.i |
| Custom (NEG) | Tratativa especifica de negócio. | Para Tipo de Retorno "Object":
Para Tipo de Retorno "Array":
|
| Informações | ||
|---|---|---|
| ||
|
>>>>>Abaixo um exemplo de recurso desenvolvido em Progress ABL para ser utilizado junto ao serviço de API<<<<<<
| Expandir | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||
No início do código estão todas as includes necessárias. O que vale ressaltar neste trecho é referente a include ut-api-action:
|
No exemplo acima, temos as seguintes includes utilitárias:
| draw.io Diagram | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| Informações |
|---|
Algumas considerações sobre o uso da include de roteamento (ut-api-action):
|
| Informações |
|---|
A include ut-api.i precisa ser adicionada obrigatoriamente no início do programa Progress, visto que esta include faz uso da instrução USING para importação de classes. Portanto, devido a esta caraterística do Progress ABL, somente será possível adicionar outras includes depois da adição da ut-api.i e ut-api-notfound.i, respectivamente. |
Classes utilitárias
| Expandir | ||
|---|---|---|
| ||
Com o objetivo de facilitar a manipulação dos objetos JsonObject recebidos e enviados pela API Progress foram desenvolvidas algumas classes de utilitários:
|
Formato Mensagem JSON
| Expandir | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| |||||||||
O objeto JsonObject, recebido pela requisição no programa Progress conterá informações completas da requisição, desde informações do:
Com esta mensagem, o desenvolvedor poderá efetuar os devidos filtros e classes utilitárias necessárias. Exemplo de mensagem:
|
Acesso a Diferentes Empresas
| Expandir | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||
O cliente pode fazer acesso a diferentes empresas via BASIC AUTHENTICATION. Para realizar esse processo é necessário primeiramente o login no sistema, e em seguida descobrir todas as empresas do produto, selecionando um dos links a seguir:
|
Login
| Expandir | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Logout
| Expandir | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Para a arquitetura do JBOSS é possível realizar o logout via as chamadas REST. Isso pode ser feito para que os contextos de trabalho com o josso sejam liberados e que a session seja invalidada no fechamento dos APPs. Desta maneira, existe a seguinte url para realizar o logout no produto via chamada REST.
|
Formato Mensagem JSON
| Expandir | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| |||||||||
O objeto JsonObject, recebido pela requisição no programa Progress conterá informações completas da requisição, desde informações do:
Com esta mensagem, o desenvolvedor poderá efetuar os devidos filtros e classes utilitárias necessárias. Exemplo de mensagem:
|
Classes utilitárias
| Expandir | ||
|---|---|---|
| ||
Com o objetivo de facilitar a manipulação dos objetos JsonObject recebidos e enviados pela API Progress foram desenvolvidas algumas classes de utilitários:
|
Login
| Expandir | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||
Para realizar o login no DATASUL-REST é necessário passar como parâmetro usuário e senha na seguinte URL.
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.
|
