01. DADOS GERAIS
| Produto: | |
|---|
| Linha de Produto: | |
|---|
| Segmento: | |
|---|
| Módulo: | Checklist |
|---|
| Função: | Autenticação e Integração |
|---|
| Ticket: |
|
|---|
| Requisito/Story/Issue (informe o requisito relacionado) : | - 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. 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. LoadModule cesgw_module /usr/lib/apache2/modules/mod_cesgw.so |
<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: 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