Histórico da Página
...
REST_START01. DEFINIÇÃO
O consumo de licença por demanda é uma solução no Protheus para permitir o serviço REST consumir licenças somente quando uma API está em execução, ao invés de manter permanente o consumo de uma licença para cada Working Thread em funcionamento no REST.
...
O consumo de licença por demanda deve ser habilitado na seção da URI no arquivo de configuração do AppServer, o nome da chave é “Stateless” e deve conter o valor “1” para habilitar o comportamento de consumo de licença por demanda.
Caso a chave não exista ou contenha o valor zero, o consumo de licença no inicio da thread será mantido. Como a configuração é por URI, é possível ter em uma mesma porta URIs diferentes, cada uma trabalhando com um modelo de licenciamento.
Exemplo:
[URIHTML]
URL=/rest/app
PrepareIn=All
Instances=2,2
CORSEnable=1
AllowOrigin=*
Stateless=1
04. FUNCIONAMENTO
As workings threads do pool da URI são inicializadas sem consumir nenhuma licença. Quando uma requisição de API é uma solução no Protheus para permitir o serviço REST consumir licenças somente quando uma API está em execução, ao invés de manter permanente o consumo de uma licença para cada Working Thread em funcionamento no REST.
...
| tabs | Passo 01, Passo 02, Passo 03, Passo 04 |
|---|---|
| ids | passo1,passo2 |
...
| default | yes |
|---|---|
| referencia | passo1 |
...
| default | no |
|---|---|
| referencia | passo2 |
...
iniciada a Working Thread faz uma solicitação de licença para o License Server, caso a licença seja obtida a API é executada normalmente, caso não exista licença disponível é devolvido o erro 503.
O REST permanece consumindo licença TOTVS I, exceto se a requisição tiver origem do API Manager da TOTVS e enviar na requisição o código da licença do aplicativo.
Mais informações sobre isso no tópico 8 dessa documentação.
05. FUNCIONAMENTO DAS SESSÕES
- REST_START
Função REST_START no Protheus inicializa a comunicação entre sistemas usando a arquitetura REST. é um padrão amplamente utilizado na criação de APIs para permitir a troca de dados via HTTP (como GET, POST, PUT, DELETE).
- REST_CONNECT
Função estabelece uma conexão inicial com um serviço RESTful utilizando o protocolo HTTP. Responsável por iniciar a comunicação entre cliente e API.
- REST_EXIT
Função é responsável pelo encerramento a comunicação RESTful de forma adequada, Ela garante que a conexão HTTP seja finalizada corretamente.
06. ERROS
O Erro 503 é devolvido na requisição da API caso não exista Licença disponível. Existem diversos motivos para uma licença não estar disponível, tais como:
- Todas as licenças estão em uso
- O License Server não possui nenhuma licença para o módulo/aplicativo solicitado
- O License Server não está configurado
07. CHAVES DE LOG
Caso o licenciamento apresente problemas, ative as chaves de log para análise do problema e envie o console para a equipe de suporte.
- Análise de troca de mensagens com o License Server:
A chave FWFRAME_TRACELS configurada com o valor 1 na seção do ambiente mostra no console as mensagens trocadas com o License. Deve ser ativada somente quando é necessário analisar detalhadamente o consumo de licenças.
- Análise de performance:
A chave FWFRAME_TIMELS configurada com o valor 1 na seção do ambiente mostra no console o tempo em milisegundos gasto no consumo e na liberação de licença. Ela deve ser ativada somente caso haja necessidade de analisar lentidão na troca de mensagens com o License Server.
A ativação das chaves acima implica em perda de performance, pois haverá o tempo de I/O para escrita no console, por esse motivo devem ser ativadas somente caso haja necessidade de análise de problemas.
08. PERFORMANCE
A utilização do modelo de licenciamento por demanda no REST adiciona de 50 a 80 milisegundos no tempo de cada requisição de API, referente ao tempo de comunicação com o License Server.
Nos testes executados em laboratório foi percebido uma perda de 20% de performance em relação a quantidade de requisições atendidas por segundo.
09. CONSUMO DE LICENÇAS DE APLICATIVO
O consumo de licença por demanda permite o uso de uma licença diferente da TOTVS I quando a requisição da API tem como origem o API Manager da TOTVS (WSO2 ou Mingle).
Para utilizar uma licença de aplicativo durante a requisição é necessário:
- O dono do aplicativo deve solicitar a criação de um código de aplicativo no Santo Graal
- O cliente contratar licenças de aplicativo e distribuir no License Server
- O API Manager da TOTVS (WSO2 ou Mingle) deve enviar no header da requisição o código do aplicativo na chave x-totvs-appcode
- O cliente deve utilizar um API Manager da TOTVS (WSO2 ou Mingle) para gerenciar as requisições de API no REST
Veja aqui a documentação do Mingle.
Caso o aplicativo esteja no ambiente de homologacao ou desenvolvimento do Mingle, é necessario adicionar na seção do ambiente do Protheus uma chave para configurar o Mingle.
MINGLE=DEV (Para desenvolvimento)
MINGLE=HOM (Para homologação)
10. EXEMPLO DE CONFIGURAÇÃO DO REST
| Bloco de código |
|---|
[ENVIRONMENT]
DBALIAS=DOCKER
DBDATABASE=POSTGRES
DBPORT=7801
DBSERVER=dbaccess
ROOTPATH=/app-data/
RPODB=top
RPOLANGUAGE=portuguese
RPOVERSION=120
SOURCEPATH=/app-data/apo
STARTPATH=/system/
FWFRAME_TIMELS=1
FWFRAME_TRACELS=1
[HTTPJOB]
ENVIRONMENT=ENVIRONMENT
MAIN=HTTP_START
[HTTPREST]
Port=8082
SECURITY=1
URIs=HTTPURI,APP
[HTTPV11]
Enable=1
Sockets=HTTPREST
[HTTPURI]
AllowOrigin=*
CORSEnable=1
Instances=1,1,1,1
PrepareIn=T1
Stateless=0
URL=/v1/
[APP]
AllowOrigin=*
CORSEnable=1
Instances=1,1,1,1
PrepareIn=T1
Stateless=1
URL=/app/ |
...
| Templatedocumentos |
|---|
| HTML |
|---|
<style>
div.theme-default .ia-splitter #main {
margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
display: none;
}
#main {
padding-left: 10px;
padding-right: 10px;
overflow-x: hidden;
}
.aui-header-primary .aui-nav, .aui-page-panel {
margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
margin-left: 0px !important;
}
.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after {
background: #FF9900; !important
}
.menu-item.active-tab {
border-bottom: none !important;
}
</style>
|