Árvore de páginas

01. DADOS GERAIS

Produto:

TOTVS Logística Recintos Aduaneiros

Linha de Produto:

Linha Logix

Segmento:

Logística

Módulo:Checklist
Função:Autenticação e Integração
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :
  1. DLOGPORTOS-22473


02. SITUAÇÃO/REQUISITO

Para atender à necessidade de integração entre o ecossistema TOTVS Logística Recintos Aduaneiros e o produto Checklist da Suíte Logística, fez-se necessária a criação de uma API Gateway que intermediará as requisições.

03. SOLUÇÃO

Para a integração, foi desenvolvida uma API RESTful que intermedia a comunicação entre o ecossistema e outras APIs RESTful. Esta intermediação pode ser feita com ou sem tradução da requisição em um modelo ou protocolo diverso do protocolo HTTP/1.1, desde que devidamente implementada.

A implementação destas integrações e traduções se dará por meio de classes implementadas e adicionadas ao módulo Apache resultante da compilação, baseadas na interface IGatewayBase, disponível internamente no projeto.

A API será responsável, quando necessário, pela autenticação na API destino, reservando seu token em cache para futuras chamadas até sua expiração. Uma vez expirado, o token é eliminado, sendo necessário obter um novo.

As definições, bem como as opções de implantação, podem ser vistas abaixo:

São interfaces disponibilizadas na aplicação para uso na expansão das integrações:

A interface IStrategyAuthenticator define as formas de autenticação que poderão ser usadas pela integração.

  • function SetAuthURL(const AValue: string): IStrategyAuthenticator;

  • function SetParam(const AName, AValue: string): IStrategyAuthenticator;

  • function SetParams(const AValue: TStrings): IStrategyAuthenticator;

  • function Authenticate(out AToken: string): THTTPCode;

  • ExpiresIn: Cardinal;
  • TokenType: string;

A interface IStrategyAuthContainer define o contêiner de armazenamento das definições de classes baseadas na interface IStrategyAuthenticator.

  • function AddAuthenticator(const AName: string; const AAuthenticator: TStrategyAuthenticatorClass): IStrategyAuthContainer;
  • function RemoveAuthenticator(const AName: string): IStrategyAuthContainer;
  • function Clear: IStrategyAuthContainer;
  • function SelectAuthenticator(const AName: string): IStrategyAuthContainer;
  • function SetAuthURL(const AValue: string): IStrategyAuthContainer;
  • function SetParam(const AName, AValue: string): IStrategyAuthContainer;
  • function Authenticate(out AToken: string): THTTPCode;
  • Authenticator[const AName: string]: IStrategyAuthenticator;
  • Authenticators: TArray<string>;

A interface IGatewayBase define as classes de integração que podem ser agregadas à API.

  • function SetAuthenticator(const AAuthenticator: IStrategyAuthenticator): IGatewayBase;
  • function SetRedisConnector(const AValue: IRedisConnector): IGatewayBase;
  • function TreatRequest(const ARequest: TWebRequest; const AResponse: TWebResponse; const APathInfo: TArray<string>): THTTPCode;

Não há propriedades expostas.

 A interface IGatewayFactory define a estrutura que armazena as definições das classes baseadas na interface IGatewayBase.

  • function GetResource(const AKey: string): IGatewayBase;
  • function RegisterResource(const AKey: string; const AResource: TGatewayBaseClass): IGatewayFactory;
  • function Resources: TArray<string>;

Não há propriedades expostas.

Este é o fluxo básico de operação das classes agregadas à API Gateway .

São opções de deploy da API Gateway:

A compilação pode ser feita para as seguintes arquiteturas:

  • 32 bits (obsoleta)1
  • 64 bits

E deve obedecer a configuração Release.

Notas
1 - 
A Apache Foundation considera a compilação do servidor web Apache para 32 bits como obsoleta, mantida externamente por outras equipes, apenas para o sistema operacional Microsoft Windows. A opção para a compilação para a plataforma Microsoft Windows 32 bits foi mantida exclusivamente para uso com o produto REST Server, caso o cliente não queira fazer uso de outra instalação do servidor web Apache em sua infraestrutura.

As linhas a seguir devem ser adicionadas ao arquivo httpd.conf.

httpd.conf
LoadModule cesgw_module modules/mod_cesgw.so

<IfModule cesgw_module>
  <Location /api/tlra/cesgw/v1>
    SetHandler mod_cesgw-handler
  </Location>
</IfModule>

Após a alteração do arquivo, é necessário reiniciar o servidor Apache.

A API depende diretamente do banco de dados Redis, devendo este ser instalado no mesmo servidor.

A compilação deve ser feita para a plataforma Linux 64 bits, usando a configuração Release.

A configuração da API depende destes dois arquivos, os quais devem ser colocados no diretório /etc/apache2/mods-available.

cesgw.load
LoadModule cesgw_module /usr/lib/apache2/modules/mod_cesgw.so
cesgw.conf
<IfModule cesgw_module>
  <Location /api/tlra/cesgw/v1>
    SetHandler mod_cesgw-handler
  </Location>
</IfModule>

Após a cópia dos arquivos para o diretório indicado, a seguinte sequência de comandos deve ser executada:

# a2enmod cesgw
# systemctl restart apache2

A API depende diretamente do banco de dados Redis, devendo este ser instalado no mesmo servidor.

A compilação da API deve obedecer os princípios descritos na compilação para ambientes Linux 64 bits.

A árvore de diretórios deve conter a seguinte estrutura:

Diretório de trabalho
  |
  +-mod_cesgw.so
  +-cesgw.conf
  +-cesgw.load
  +-cesgw.dockerfile

O arquivo cesgw.dockerfile deve conter:

cesgw.dockerfile
FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive

# Instala Apache2 e Redis
RUN apt-get update && \
    apt-get install -y apache2 redis-server && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# Cria diretórios necessários
RUN mkdir -p /usr/lib/apache2/modules \
             /etc/apache2/mods-available \
             /etc/apache2/mods-enabled \
             /var/log/totvs
RUN chmod 777 /var/log/totvs

# Copia o módulo e suas configurações
COPY mod_cesgw.so /usr/lib/apache2/modules/mod_cesgw.so
COPY cesgw.conf /etc/apache2/mods-available/cesgw.conf
COPY cesgw.load /etc/apache2/mods-available/cesgw.load

# Ativa o módulo
RUN a2enmod cesgw

# Expor a porta 80
EXPOSE 80

# Script de inicialização que roda o Redis e Apache juntos
CMD service redis-server start && apachectl -D FOREGROUND

E a criação da imagem é feita por meio dos comandos a seguir:

  • Docker
    • docker build -t tlra-cesgw:latest . -f ./cesgw.dockerfile
  • Podman
    • podman build -t tlra-cesgw:latest . -f ./cesgw.dockerfile


Tendo sido criada a imagem, ela pode ser disponibilizada por meio dos seguintes comandos:

Uma vez disponibilizada, a imagem pode ser obtida por meio dos seguintes comandos:

E sua inicialização pode ser comandada utilizando os seguintes comandos:


04. AÇÕES PÓS IMPLANTAÇÃO

Após o término da implantação e de posse de um token JWT válido, uma chamada para um endpoint de configuração deve ser realizada para determinar os parâmetros de operação do gateway selecionado.

Abaixo temos o exemplo de configuração do gateway checklist:

05. ASSUNTOS RELACIONADOS