Histórico da Página
...
O desenvolvimento de APIs permite a exposição e o consumo de dados com o objetivo da para integração (front-end, portais, customizações, etc) ao com o back-end do produto Logix, de maneira segura e padronizada. A
A estrutura de integração de APIs Logix suporta o envio de requisições no estilo de arquitetura REST com o desenvolvimento da regra de negócio em 4GL . Esta funcionalidade e está disponível para utilização conforme apresentado no quadro abaixo:
...
Para "publicar" a funcionalidade 4GL basta criar o programa (.4gl) com o seguinte caminho: <módulo>/api/<versão API>/<recurso>.4gl.
A sub-pasta "api" passa então a concentrar todas as funcionalidades de integração do módulo em questãodos módulos existentes. Outros caminhos e parâmetros podem ser adicionados a URL, mas sempre de acordo com o Guia de Implementação de APIs.
Informações | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Os programas 4GL disponibilizados, deverão seguir o padrão de localização abaixo: Exemplos:
|
Dentro do programa 4GL a definição da função principal (roteadora) é de fundamental importância, pois é ela que será primeiramente chamada e que definirá como será a execução das outras funções com base na requisição solicitada. Segue abaixo um exemplo de definição:
...
Bloco de código | ||
---|---|---|
| ||
DATABASE Logix #------------------------------# FUNCTION wms_v1_dimensoes() #------------------------------# CALL _ADVPL_create_rest_logix_routes() CALL _ADVPL_add_rest_logix_routes("GET", #--# Método #--# "/normal/*/", #--# Path Param a ser filtrado #--# "fields=*", #--# QueryParam a ser filtrado #--# "wms_v1_get_dimensoes_normal") #--# Função a ser executada #--# CALL _ADVPL_add_rest_logix_routes("GET", "/*", "order=dimensao", "wms_v1_get_dimensoes_ordenado") CALL _ADVPL_add_rest_logix_routes("GET", "/*", "", "wms_v1_get_dimensoes") CALL _ADVPL_add_rest_logix_routes("POST", "/*", "", "wms_v1_update_dimensoes") CALL _ADVPL_add_rest_logix_routes("PUT", "/*", "", "wms_v1_update_parc_dimensoes") CALL _ADVPL_add_rest_logix_routes("DELETE", "/*", "", "wms_v1_delete_dimensoes") END FUNCTION #------------------------------------------------------# FUNCTION wms_v1_get_dimensoes_normal(l_json_reference) #------------------------------------------------------# DEFINE l_json_reference VARCHAR(10) DEFINE l_json VARCHAR(1000) . . . RETURN l_json END FUNCTION #-------------------------------------------------------# FUNCTION wms_v1_get_dimensoes_ordenado(l_json_reference) #-------------------------------------------------------# DEFINE l_json_reference VARCHAR(10) DEFINE l_json VARCHAR(1000) . . . RETURN l_json END FUNCTION |
No exemplo acima, temos os seguintes pontos:
...
Informações |
---|
Algumas considerações sobre o uso de roteamento através da função _ADVPL_add_rest_logix_routes():
|
Formato mensagem JSON
FILTRO 1: order=dimensao FILTRO 2: cliente=*
|
Formato mensagem JSON
...
A varíavel de referência de um objeto LJSONOBJECT, 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.
...
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.
Exemplos de utilização
Bloco de código | ||||
---|---|---|---|---|
| ||||
#----------------------------------------------# FUNCTION wms_v1_get_dimensao(l_json_reference) #----------------------------------------------# DEFINE l_json_reference VARCHAR(10) DEFINE l_logix_response VARCHAR(10) DEFINE l_json CHAR(1000) #--# Utilização do método SERIALIZE da classe LJSONOBJECT #--# LET l_json = _ADVPL_get_property(l_json_reference,"SERIALIZE") #--# Criação da resposta padronizada utilizando a classe LRestLogixResponse #--# LET l_logix_response = _ADVPL_create_component(NULL,"LRestLogixResponse") CALL _ADVPL_set_property(l_logix_response,"PAYLOAD",l_json,"payload") #--# Propriedades opcionais #--# CALL _ADVPL_set_property(l_logix_response,"MESSAGE","Erro Msg","Erro Detail", "10") CALL _ADVPL_set_property(l_logix_response,"STATUS",'200',"status") #--# Opcional, utilizada quando o conteúdo de retorno for um JSONArray #--# CALL _ADVPL_set_property(l_logix_response,"HAS_NEXT",TRUE) RETURN _ADVPL_get_property(l_logix_response,"GENERATE") END FUNCTION |
...
Bloco de código | ||||
---|---|---|---|---|
| ||||
#--------------------------------------------------#
FUNCTION vdp_v1_clientes_nacionais(l_json_reference)
#--------------------------------------------------#
DEFINE l_json_reference VARCHAR(10)
DEFINE l_logix_response VARCHAR(10)
DEFINE l_query_param CHAR(200)
DEFINE l_path_param CHAR(200)
DEFINE l_json_retorno CHAR(1000)
#--# Carrega o valor da primeira entrada do Query Param #--#
#--# Exemplo: '{"queryParam1":["codigo","valor"]}'
LET l_query_param = _ADVPL_get_property(l_json_reference,"VALUE","queryparams[1][2]")
#--# Carrega o primeiro Path Param #--#
#--# Exemplo: '{"pathparams":["path1","path2"]}'
LET l_path_param = _ADVPL_get_property(l_json_reference,"VALUE","pathparams[1]")
LET l_json_retorno = '{"queryParam":"',LOG_alltrim(l_query_param),'","pathParam":"',LOG_alltrim(l_path_param),'"}'
LET l_logix_response = _ADVPL_create_component(NULL,"LRestLogixResponse")
CALL _ADVPL_set_property(l_logix_response,"PAYLOAD",l_json_retorno,"payload")
CALL _ADVPL_set_property(l_logix_response,"STATUS",'200',"status")
RETURN _ADVPL_get_property(l_logix_response,"GENERATE")
END FUNCTION |