Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Aviso
titleAtenção!

Recurso disponível somente em:

Estado
subtletrue
colourBlue
titleAppServer 24.3.0.1
+
Estado
subtletrue
colourGreen
titletlppcore 01.05.00


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.

Nota
titleInformaçõ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 na Thread Pool, pois ela está diretamente relacionada ao servidor REST. Portanto, caso seja configurado OnBlock nas sessões destinadas aos Slaves, estas 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.

Column
width2%


Column
width48%
Section

Métodos Sets

Expandir
titleoList:block()

oList:block( cEndpoint as character, cMethod as character )

Responsável por adicionar um Endpoint e Método que será bloqueado no ambiente REST.

Ex:

Bloco de código
languagecpp
titleSintaxe
linenumberstrue
oList:block( cEndpoint, cMethod )
Expandir
titleoList:hide()

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.

Ex:

Bloco de código
languagecpp
titleSintaxe
linenumberstrue
oList:hide( cEndpoint, cMethod )
Column
width2%


Column
width48%
Section

Métodos Gets

Expandir
titleoList:getServiceName()

oList:getServiceName()

Retorna o nome do serviço REST o qual foi configurado o onBlock.

Bloco de código
[HTTPSERVER]
Servers=SERVIDOR_REST_01
Expandir
titleoList:getServicePort()

oList:getServicePort()

Retorna a porta do serviço REST o qual foi configurado o onBlock.

Bloco de código
[HTTPSERVER]
Servers=SERVIDOR_REST_01
 
[HTTP_DBMONITOR]
port=8080
Expandir
titleoList:getThreadPoolName()

oList:getThreadPoolName()

Retorna o nome do Thread Pool do serviço REST o qual foi configurado o onBlock.

Bloco de código
[HTTPSERVER]
Servers=SERVIDOR_REST_01
 
[SERVIDOR_REST_01]
port=8080
locations=LOC_SRV_01

[LOC_SRV_01]
ThreadPool=THREAD_POOL_SRV_01
Expandir
titleoList:getUserData()

oList:getUserData()

Retorna o JSON informado em UserData do serviço REST o qual foi configurado o onBlock.

Bloco de código
[HTTPSERVER]
Servers=SERVIDOR_REST_01
 
[HTTP_DBMONITOR]
userData={"sua_chave":"seu_valor"}
Expandir
titleoList:getApiList()

Retorna um Json contendo os endpoints que foram encontrados para serem disponibilizados neste ambiente. A lista contém endpoints criados via annotation e via inicialização dinâmica do server através de LoadURNs.

O recebimento dessa lista é opcional pois pode degradar a performance da subida da aplicação (AppServer), portanto o comportamento padrão é o não recebimento da lista de APIs.

Para ativar o recebimento, informe através da configuração do REST na chave TlppData, conforme abaixo:

  • INI
Bloco de código
TlppData={"OnBlockGetApiList":true}
  • Inicialização Dinâmica
Bloco de código
jTP_TlppData := {"OnBlockGetApiList":true}
jREST['ThreadPool']['TlppData'] := jTP_TlppData


JSON enviado ao callback

Bloco de código
languageyml
titleJSON retornado quando não requisitada a lista
{
    "required": false,
    "success": false,
    "annotation": [],
    "json": []
}
Bloco de código
titleJSON contando APIs

oList:getUserData()

Retorna o JSON informado em UserData do serviço REST o qual foi configurado o onBlock.

Bloco de código
{
    "required": true,
    "success": true,
    "annotation": [
        { "/exemplo1/annotation": ["GET","POST","PUT"] },
        { "/exemplo2/annotation": ["GET"] }
    ],
    "json": [
        { "/exemplo1/loadurn": ["GET"] }
    ]
}
Expandir
titleoList:getUserData()
[HTTPSERVER]
Servers=SERVIDOR_REST_01
 
[HTTP_DBMONITOR]
userData={"sua_chave":"seu_valor"}


Retorno

Sugerimos que o retorno seja NULL pois todo e qualquer retorno será ignorado.

Exemplo

Bloco de código
languagecpp
linenumberstrue
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

Conclusão

É 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.


Informações
titleImportante!

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:

Bloco de código
[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}