Histórico da Página
...
Bloco de código | ||||
---|---|---|---|---|
| ||||
DATABASE Logix { Função roteadora principal que será executada pelo Logix REST quando feito uma requisição que combine com o módulo, a versão e o recurso da função. } #---------------------------# FUNCTION wms_v1_dimensoes() #---------------------------# {FUNÇÃO PRINCIPAL QUE FAZ DEFINIÇÃO DAS ROTAS} CALL _ADVPL_create_rest_logix_routes() CALL _ADVPL_add #Inicia a técnica para definição das rotas de execução das funções conforme a requisição recebida. CALL _ADVPL_create_rest_logix_routes("GET", ) #Definição de rota onde toda requisição de método GET, que contenha o filtro a seguir, #será direcionada #--# Método #--# para função wms_v1_dimensoes_get_normal(). #FILTRO: # - Serão capturadas todas as requisições que possuírem um parâmetro Path "/normal" # e um parâmetro Query "fields" com qualquer conteúdo (*). CALL "/normal/*/",_ADVPL_add_rest_logix_routes("GET", #--# Path Param a ser filtradoMétodo #--# "fields=/normal/*/", #--# Path QueryParamParam a ser filtrado #--# "wms_v1_dimensoes_get_normal")fields=*", #--# FunçãoQueryParam a ser executadafiltrado #--# CALL _ADVPL_add_rest_logix_routes("GET", "wms_v1_dimensoes_get_normal") #--# Função a ser executada #--# #Definição de outra rota, onde toda requisição de método GET, que contenha o filtro a seguir, #será direcionada para função wms_v1_dimensoes_get_ordenado(). #FILTRO: # - Serão capturadas todas requisições que contenha qualquer parâmetro Path ("/*" indica "Todos Paths" ou "/*nenhum",) # e um parâmetro Query "order" com valor "dimensao" CALL _ADVPL_add_rest_logix_routes("GET", "order=dimensao", "/*", "wms_v1_dimensoes_get_ordenado") CALL _ADVPL_add_rest_logix_routes("GET", "order=dimensao", "/*", "wms_v1_dimensoes_get_ordenado") #Definição de outra rota, onde todas as requisições de método GET, que possuírem quaisquer parâmetros "", #(Query e/ou Path) informados, serão direcionadas para a função wms_v1_dimensoes_get(). CALL _ADVPL_add_rest_logix_routes("GET", "wms_v1_dimensoes_get") /*", CALL _ADVPL_add_rest_logix_routes("POST", "", "/*", "wms_v1_dimensoes_get") "", #Definição de rota onde todas as requisições de método POST, que possuírem quaisquer parâmetros (Query e/ou Path) informados, #serão direcionadas para a função wms_v1_dimensoes_post(). CALL _ADVPL_add_rest_logix_routes("POST", "wms_v1_dimensoes_post") "/*", CALL _ADVPL_add_rest_logix_routes("PUT", "", "/*", "wms_v1_dimensoes_post") "", #Definição de rota onde todas as requisições de método PUT (update), que possuírem quaisquer parâmetros (Query e/ou Path) informados, #serão direcionadas para a função "wms_v1_dimensoes_put"() . CALL _ADVPL_add_rest_logix_routes("PUT", CALL _ADVPL_add_rest_logix_routes("DELETE", "/*", "/*", "", "", "wms_v1_dimensoes_put") "wms_v1_dimensoes_delete") END FUNCTION #------------------------------------------------------# FUNCTION wms_v1_dimensoes_get_normal(l_json_reference) #------------------------------------------------------# {FUNÇÃO GET COM PATH PARAM "NORMAL" ADICIONADA COMO ROTA NA FUNÇÃO#Definição de rota onde todas as requisições de método DELETE, que possuírem quaisquer parâmetros (Query e/ou Path) informados, #serão direcionadas para a função wms_v1_dimensoes_delete()} DEFINE l_json_reference VARCHAR(10) DEFINE l_json VARCHAR(1000) . . . RETURN l_json END FUNCTION #-------------------------------------------------------# FUNCTION wms_v1_dimensoes_get_ordenado(l_json_reference) #-------------------------------------------------------# {FUNÇÃO GET COM PATH PARAM "ORDENADO" ADICIONADA COMO ROTA NA FUNÇÃO wms_v1_dimensoes()} DEFINE l_json_reference VARCHAR(10) DEFINE l_json VARCHAR(1000) . . . RETURN l_json END FUNCTION |
No exemplo acima, temos os seguintes pontos:
01. Função Roteadora
Bloco de código | ||
---|---|---|
| ||
FUNCTION wms_v1_dimensoes() |
É a função roteadora, que será executada pelo Logix REST quando feito uma requisição que combine com o módulo, a versão e o recurso da função.
Bloco de código | ||
---|---|---|
| ||
CALL _ADVPL_create_rest_logix_routes() |
Inicia a técnica para definição das rotas de execução das funções conforme a requisição recebida.
Bloco de código | ||
---|---|---|
| ||
CALL _ADVPL_add_rest_logix_routes("GET", #--# Método #--# . CALL _ADVPL_add_rest_logix_routes("DELETE", "/*", "", "/normal/*/", #--# Path Param #--# "wms_v1_dimensoes_delete") "fields=*", #--# QueryParam # END FUNCTION #------------------------------------------------------# "wms_v1_get_dimensoes_normal") |
Neste exemplo está sendo definida uma rota onde toda requisição de método GET, que contenha os filtros informados, será direcionada para função wms_v1_get_dimensao_normal.
Bloco de código | ||
---|---|---|
| ||
"/normal/*/", #--# Path Param a ser filtrado #--#
"fields=*", #--# QueryParam a ser filtrado #--# |
Em relação ao filtro informado, serão capturadas todas as requisições que possuírem um parâmetro Path "/normal" e um parâmetro Query "fields" com qualquer conteúdo (*).
Dica | ||
---|---|---|
| ||
Para PATH com valor obrigatório informe ?* (interrogação seguido de asterisco), que determina que o PATH tem ao menos 1 caracter qualquer (?), seguido de 0 ou mais caracteres (*). Exemplo: "/normal/?*/", #--# Path Param obrigatório a ser filtrado #--# |
Bloco de código | ||
---|---|---|
| ||
CALL _ADVPL_add_rest_logix_routes("GET",
"/*",
"order=dimensao",
"wms_v1_get_dimensoes_ordenado") |
Neste exemplo, está sendo definido uma outra rota, sendo que toda requisição de método GET, que contenha qualquer parâmetro Path ("/*" indica "Todos Paths" ou "nenhum") e um parâmetro Query "order" com valor "dimensao" será direcionada para a função wms_v1_get_dimensoes_ordenado.
Bloco de código | ||
---|---|---|
| ||
CALL _ADVPL_add_rest_logix_routes("GET",
"/*",
"",
"wms_v1_get_dimensoes") |
Neste exemplo, todas as requisições de método GET, que possuírem quaisquer parâmetros (Query e/ou Path) informados, serão direcionadas para a função wms_v1_get_dimensoes.
Bloco de código | ||
---|---|---|
| ||
CALL _ADVPL_add_rest_logix_routes("POST",
"/*",
"",
"wms_v1_update_dimensoes") |
...
FUNCTION wms_v1_dimensoes_get_normal(l_json_reference)
#------------------------------------------------------#
{FUNÇÃO GET COM PATH PARAM "NORMAL" ADICIONADA COMO ROTA NA FUNÇÃO wms_v1_dimensoes()}
DEFINE l_json_reference VARCHAR(10)
DEFINE l_json VARCHAR(1000)
.
.
.
RETURN l_json
END FUNCTION
#-------------------------------------------------------#
FUNCTION wms_v1_dimensoes_get_ordenado(l_json_reference)
#-------------------------------------------------------#
{FUNÇÃO GET COM PATH PARAM "ORDENADO" ADICIONADA COMO ROTA NA FUNÇÃO wms_v1_dimensoes()}
DEFINE l_json_reference VARCHAR(10)
DEFINE l_json VARCHAR(1000)
.
.
.
RETURN l_json
END FUNCTION
|
IMPORTANTE
Dica |
---|
Para PATH com valor obrigatório informe ?* (interrogação seguido de asterisco), que determina que o PATH tem ao menos 1 caracter qualquer (?), seguido de 0 ou mais caracteres (*). Exemplo: "/normal/?*/", #--# Path Param obrigatório a ser filtrado #--# |
OBSERVAÇÕES
Informações |
---|
Algumas considerações sobre o uso de roteamento através da função _ADVPL_add_rest_logix_routes():
FILTRO 1: order=dimensao FILTRO 2: cliente=*
|
...
05. Formato Mensagem JSON
A varíavel de referência de um objeto LJSONOBJECT, recebida pela requisição na função 4GL conterá informações completas da requisição, desde informações do HEADER, QUERY PARAMs, PATH PARAMs e o próprio PAYLOAD.
...
Bloco de código | ||
---|---|---|
| ||
{ uri: valor, method: GET, headers: {}, pathParams: [ "param1", "param2" ], queryParams: { query1: valor1, query2: valor1}, payload: {} } |
...
06. Classes Utilitárias
...
Com o objetivo de facilitar a manipulação dos objetos JsonObject recebidos e enviados pela API 4GL, foram desenvolvidas algumas classes de utilitários:
...