Histórico da Página
...
04. Exemplo de desenvolvimento em 4GL
...
NOMES DAS FUNÇÕES
Exemplo de definição de funções e como será realizada a requisição web de execução destas funções:
Função | Requisição |
---|---|
|
|
FUNCTION sup_v1_estoque() |
|
FUNCTION man_v1_apontamento_horas() |
|
Quais funções devem sempre existir e respeitar padronização de nomenclatura:
- Função principal roteadora. Esta função não possui parâmetros e tem como objetivo a definição das rotas.
- Funções definidas na função roteadora para cada uma das rotas. Estas funções devem ter sempre a definição de 1 parâmetro do tipo VARCHAR(10) que será a referência do objeto de classe LJsonObject que é enviado no ato de toda requisição. Também sempre devem ter um retorno no formato JSON que será o retorno da requisição, utilizando para isso a classe LRestLogixResponse. Ambas classes estão detalhadas em Classes Utilitárias.
EXEMPLO DE IMPLEMENTAÇÃO
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() #---------------------------# {DEFINIÇÃO DAS ROTAS} #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() #Definição de rota onde toda requisição de método GET, que contenha o filtro a seguir, #será direcionada 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 _ADVPL_add_rest_logix_routes("GET", #--# Método #--# "/normal/*/", #--# Path Param a ser filtrado #--# "fields=*", #--# QueryParam a ser filtrado #--# "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") #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") #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") #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", "/*", "", "wms_v1_dimensoes_put") #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(). CALL _ADVPL_add_rest_logix_routes("DELETE", "/*", "", "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 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 |
...
05. Formato Mensagem JSON
A varíavel variável 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.
Através desta mensagem, o desenvolvedor poderá efetuar os devidos filtros e lógicas necessárias. Exemplo de mensagem:
EXEMPLO DE MENSAGEM JSON
Bloco de código | ||
---|---|---|
| ||
{ uri: valor, method: GET, headers: {}, pathParams: [ "param1", "param2" ], queryParams: { query1: valor1, query2: valor1}, payload: {} } |
Âncora classes classes
06. Classes Utilitárias
classes | |
classes |
...
Com o objetivo de facilitar a manipulação dos objetos JsonObject recebidos e enviados pela API 4GL, foram desenvolvidas algumas classes de utilitários:
...
Acesse a documentação referente ao componente Logix LJSONOBJECT para saber mais detalhes de como manipular informações recebidas num formato JSON.
LRestLogixResponseLRestLogixResponse
Trata a criação do JSON de response da requisição.
Acesse a documentação referente ao componente LOGIX LRESTLOGIXRESPONSE para saber mais detalhes a respeito das propriedades SET e GET disponíveis.
...