Árvore de páginas

Versões comparadas

Chave

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

Recurso disponível somente em:

Estado
subtletrue
colourBlue
titleAppServer 24.3.0.01
+
Estado
subtletrue
colourGreen
titletlppcore 01.0405.1000


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

serviço
  • servidor REST. Portanto,

as demais chaves
  • 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.

Incluir Página
OnAllow e OnBlock
OnAllow e OnBlock

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.

Section

Métodos

Gets---------------------------

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 )
Section

Métodos Gets

Expandir
titleoList:getServiceName()

oList:getServiceName()

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

ex:
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.

Ex:
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.

Ex:
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.

Ex:
Bloco de código
[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.
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
{
    "required": true,
    "success": true,
    "annotation": [
        { "/exemplo1/annotation": ["GET","POST","PUT"] },
        { "/exemplo2/annotation": ["GET"] }
    ],
    "json": [
        { "/exemplo1/loadurn": ["GET"] }
    ]
}

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
  local jApis as json

  // 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()
  jApis           := oList:getApiList() 


  // 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}