Páginas filhas
  • Desenvolvimento de APIs para o produto Logix

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Informações
titleÍndice

Índice

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 Logix, de maneira segura e padronizada. A estrutura de integração de APIs Logix suporta o envio de requisições no estilo de arquitetura REST com o desenvolvimento da regra de negócio em 4GL. 

Esta funcionalidade está disponível para utilização conforme apresentado no quadro abaixo:

Informações
titleMatriz de Evolução
Versão / ReleaseFuncionalidade
12.1.22

Requisições através dos verbos GET / POST / PUT / DELETE utilizando o contexto /restlogix

Classe utilitária para tratamento das respostas da requisição (response) em 4GL.

Formato URL

...

      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 funcionalidade em questão. Tomando como exemplo o endpoint de integração do recurso de "Dimensões" do módulo de "WMS" do produto "Logix", a URI básica deste serviço deve ser: /restlogix/wms/v1/dimensao

Aviso

A URL definida pelo Padrão de API TOTVS segue o seguinte formato:

/restlogix/<módulo>/<versão API>/<recurso>/

Informações que forem passadas após o recurso, serão tratadas como parâmetros PATH.


Serviço 4GL

...

     Para "publicar" a funcionalidade 4GL basta criar o programa (.4gl) com o seguinte caminho: <módulo>/api/<versão API>/<recurso>.4gl. A sub-pasta "api" passa então a concentrar todas as funcionalidades de integração do módulo em questão. Outros caminhos e parâmetros podem ser adicionados a URL, mas sempre de acordo com o Guia de Implementação de APIs.

Aviso

Os programas 4GL disponibilizados, deverão seguir o padrão de localização abaixo:

Image Added

Exemplos:

Objeto de NegócioFunção de roteamento
\suprimentos\obrigacoes_fiscais\api\v1\transportadora.4globf_v1_transportadora
\suprimentos\suprimentos\api\v1\estoque.4glsup_v1_estoque
\adm_producao\manufatura\api\v1\apontamento_horas.4glman_v1_apontamento_horas
Nota
titleImportante

Para desenvolvimentos específicos, adicionar um indicador ao nome do recurso "_espec" para que não gere conflitos com as APIs disponibilizadas pelo produto padrão.

Exemplo: obf_v1_transportadora_espec.4gl


Dentro do programa 4GL a definição da função principal (roteadora) é de fundamental importância, pois é ela que será primeiramente chamada e que definirá como será a execução das outras funções com base na requisição solicitada a partir do serviço A declaração do nome da função terá fundamental importância neste desenvolvimento, pois é isso que definirá como será a execução da função a partir de serviços web. Segue abaixo um exemplo de definição:

...

  1. Módulo da API (wms)
  2. Versão da API (v1)
  3. Recurso a ser executado (dimensao)


Abaixo um exemplo de recurso desenvolvido em 4GL para ser utilizado junto ao serviço de API:

Bloco de código
DATABASE Logix

#------------------------------#
 FUNCTION wms_v1_dimensao()
#------------------------------#
 
 	CALL _ADVPL_create_rest_logix_routes()
 	
 	CALL _ADVPL_add_rest_logix_routes("GET",                           #--# Método #--#
 	                                  "/normal/*/",                    #--# Path Param a ser filtrado #--#
 	                                  "fields=*",                      #--# Query Param a ser filtrado #--#
 	                                  "wms_v1_get_dimensao_normal")    #--# Função a ser executada #--#
 	                                  
    CALL _ADVPL_add_rest_logix_routes("GET",                           #--# Método #--#
 	                                  "/*",                            #--# Path Param a ser filtrado #--#
 	                                  "order=dimensao",                #--# Query Param a ser filtrado #--#
 	                                  "wms_v1_get_dimensao_ordenado")  #--# Função a ser executada #--#
 	
 	CALL _ADVPL_add_rest_logix_routes("GET",                           #--# Método #--#
 	                                  "/*",                            #--# Path Param a ser filtrado #--#
 	                                  "",                              #--# Query Param a ser filtrado #--#
 	                                  "wms_v1_get_dimensao")           #--# Função a ser executada #--#
 	                             
 	CALL _ADVPL_add_rest_logix_routes("POST",                          #--# Método #--#
 	                                  "/*",                            #--# Path Param a ser filtrado #--#
 	                                  "",                              #--# Query Param a ser filtrado #--#
 	                                  "wms_v1_update_dimensao")        #--# Função a ser executada #--#
 	                                  
 	CALL _ADVPL_add_rest_logix_routes("PUT",                            #--# Método #--#
 	                                  "/*",                             #--# Path Param a ser filtrado #--#
 	                                  "",                               #--# Query Param a ser filtrado #--#
 	                                  "wms_v1_update_parc_dimensao")    #--# Função a ser executada #--#
 	                                  
    CALL _ADVPL_add_rest_logix_routes("DELETE",                         #--# Método #--#
 	                                  "/*",                             #--# Path Param a ser filtrado #--#
 	                                  "",                               #--# Query Param a ser filtrado #--#
 	                                  "wms_v1_delete_dimensao")         #--# Função a ser executada #--#
 
END FUNCTION






Abaixo seguem maiores detalhes sobre como o objeto de negócio e a URL de execução deverão ser criadas. 

1.1 Objeto de Negócio

O fonte que conterá a função principal (roteadora) deverá ser criado seguindo o padrão abaixo:

                                                           

Exemplos:

Objeto de NegócioFunção
\suprimentos\obrigacoes_fiscais\api\v1\transportadora.4globf_v1_transportadora
\suprimentos\suprimentos\api\v1\estoque.4glsup_v1_estoque
\adm_producao\manufatura\api\v1\apontamento_horas.4glman_v1_apontamento_horas
Nota
titleImportante

Para desenvolvimentos específicos, adicionar um indicador ao nome do recurso "_espec" para que não gere conflitos com as APIs disponibilizadas pelo produto padrão.

Exemplo: obf_v1_transportadora_espec.4gl

1.2 Método de Execução

O método de execução indica como será realizada a chamada da função através de um serviço web, ou seja, qual método de requisição HTTP será utilizado para sua execução. Esta informação deve estar de acordo com o objetivo da função, indicando a ação que será realizada na mesma.

Abaixo segue a tabela de conversão dos métodos HTTP para o método de execução das funções 4GL:

Método de ExecuçãoMétodo HTTPObjetivo
createPOSTCriação de um ou mais registros.
processPOSTProcessamento de dados ou geração de relatórios.
update

PUT

Atualização de um ou mais registros.
getGETConsulta a um ou mais registros.
deleteDELETEExclusão de um ou mais registros.

Os métodos de requisições HTTP existentes podem ser consultados através deste link: http://www.w3schools.com/tags/ref_httpmethods.asp.

1.4 Nome da Função

O nome da função 4GL irá definir o entry point de execução através de um serviço web e indica o objeto de negócio que será manipulado.

...

Segue abaixo exemplo de definição de funções e como será realizada a requisição web de execução destas funções:

FunçãoRequisição

FUNCTION logr0003_pub_create_inclusaoDimensao()

POST /logix-rest/logr3/inclusaoDimensao

FUNCTION obfr0010_pub_process_emailTransportadora()POST /logix-rest/obfr10/emailTransportadora
FUNCTION supr0010_pub_update_estoqueProprio() PUT /logix-rest/supr10/estoqueProprio 
FUNCTION manr0021_pub_get_apontamento_horas() GET /logix-rest/manr21/apontamento_hora