Atenção!
Recurso disponível somente em: APPSERVER 24.3.0.X + TLPPCORE 01.04.10
Através da função de callback onBlock, o usuário/desenvolvedor pode definir quais serviços REST (endpoints + método) serão bloqueados para uso ou somente ocultados na listagem de serviços disponíveis.
Esse recurso é útil quando queremos manter disponíveis somente alguns serviços REST para determinado ambiente.
Informações Importantes
A função informada em onBlock será executada somente na subida do REST, antes da criação do mapa de serviços que serão disponibilizados no serviço.
A chave OnBlock só será lida quando informada diretamente na Thread Pool, pois ela está diretamente relacionada ao serviço. Portanto, as demais chaves serão ignoradas e não terão uso algum para o ambiente REST.
Parâmetro Recebido
A função customizada recebe somente 1 (um) parâmetro, sendo:
1 - oList
Classe contendo valores da execução e métodos para informar que determinado endpoint + método deve ser bloqueado ou oculto.
Métodos Gets
---------------------------
oList:getServiceName()
Retorna o nome do serviço REST o qual foi configurado o onBlock.
ex:
[HTTPSERVER]
Servers=SERVIDOR_REST_01
-------------------------
oList:getServicePort()
Retorna a porta do serviço REST o qual foi configurado o onBlock.
Ex:
[HTTPSERVER]
Servers=SERVIDOR_REST_01
[HTTP_DBMONITOR]
port=8080
--------------------------------
oList:getThreadPoolName()
Retorna o nome do Thread Pool do serviço REST o qual foi configurado o onBlock.
Ex:
[HTTPSERVER]
Servers=SERVIDOR_REST_01
[SERVIDOR_REST_01]
port=8080
locations=LOC_SRV_01
[LOC_SRV_01]
ThreadPool=THREAD_POOL_SRV_01
-----------------------
oList:getUserData()
Retorna o JSON informado em UserData do serviço REST o qual foi configurado o onBlock.
Ex:
[HTTPSERVER]
Servers=SERVIDOR_REST_01
[HTTP_DBMONITOR]
userData={"sua_chave":"seu_valor"}
Métodos Sets
--------------------------------------------------------------------
oList:block( cEndpoint as character, cMethod as character )
Responsável por adicionar um Endpoint e Método que será bloqueado no ambiente REST.
-------------------------------------------------------------------
oList:hide( cEndpoint as character, cMethod as character )
Responsável por adicionar um Endpoint e Método que será somente ocultado no ambiente REST, ou seja, ele não aparece em nenhuma listagem de serviços disponíveis, porém, quem conhecer a sua assinatura poderá acessá-lo.
Retorno
Sugerimos que o retorno seja NULL pois todo e qualquer retorno será ignorado.
Exemplo
function U_onBlock( oList )
local cEndpoint as character
local cServiceName as character
local nServicePort as numeric
local cThreadPoolName as character
local cUserData as character
// Use os valores abaixo conforme sua necessidade de implementação
// Embora você sempre receberá tais valores, seu uso é opcional.
cServiceName := oList:getServiceName()
nServicePort := oList:getServicePort()
cThreadPoolName := oList:getThreadPoolName()
cUserData := oList:getUserData()
// Para bloquear ou ocultar algum serviço, utilize os métodos Sets
cEndpoint := '/exemplo1/urn'
oList:block( cEndpoint, 'get' )
oList:block( cEndpoint, 'post' )
oList:hide( cEndpoint, 'put' )
cEndpoint := '/exemplo2/urn'
oList:block( cEndpoint, 'get' )
return
É muito simples bloquear/ocultar um serviço REST, basta utilizar um dos métodos mencionados acima indicando a ação (block | hide), o endpoint e seu método.
Note que sempre é preciso informar o endpoint e método para cada ação; sendo assim, poderemos bloquear todos os métodos de um mesmo endpoint ou somente alguns, conforme necessidade.
Importante: Devido à criticidade de disponibilizar dados indesejados, caso ocorra alguma "exception" na criação da lista, o AppServer não será iniciado.
Porém, se essa criticidade não for a sua realidade e ainda assim queira que o AppServer seja iniciado, mesmo que disponibilizando todos os serviços REST, é possível configurar o REST indicando que o OnBlock seja executado em modo "Soft", conforme abaixo:
[HTTPSERVER]
Servers=SERVIDOR_REST_01
[SERVIDOR_REST_01]
port=8080
locations=LOC_SRV_01
[LOC_SRV_01]
ThreadPool=THREAD_POOL_SRV_01
[THREAD_POOL_SRV_01]
TlppData={"OnBlockSoft":false}