Páginas filhas
  • 2. Parâmetros de Entrada

Importante

O conteúdo relacionado na página abaixo foi substituído e será descontinuado em releases futuras.

A nova técnica para desenvolvimento de API poderá ser consultada através do seguinte endereço (http://tdn.totvs.com/x/6BE4Fw) e esta disponível a partir da release 12.1.22 do Logix.

A nomenclatura dos parâmetros de entrada irá definir como serão recuperados seus valores. Em uma requisição web, por exemplo, estes valores podem ser obtidos de três diferentes origens:

  • PathParam: o valor faz parte da URL de execução.
    Exemplo:
    http://<servidor>:<porta>/logixrest/logr2/companies/01
    ;
    http://<servidor>:<porta>/logixrest/manr1/item/01/ITEMXPTO.

  • QueryString: o valor virá como parâmetro da URL, indicado pelo sufixo ? ou & sempre acompanhado do nome do parâmetro.
    Exemplo:
    http://<servidor>:<porta>/logix-rest/manr1/item/XX?order=asc&visible=true.

  • PayLoad: o valor virá no cabeçalho da requisição web e não será visível na URL.
    Exemplo:

    POST http://<servidor>:<porta>/logixrest/manr1/item/XX HTTP/1.1
    Content-Type: application/json
    
    {
    	"item": {
    		"cod_empresa": "XX",
    		"cod_item": "ITEMXPTO"
    	}
    }

Importante

O nome das variáveis devem ser sempre definidas com letras minúsculas, não é permitido utilizar letras maiúsculas ou "Camel Case".


Abaixo será demonstrado como definir cada um destes tipos de parâmetros de entrada na função 4GL de sua API.

Tipos de Variáveis

Para este desenvolvimento, alguns tipos de dados 4GL não são suportados como parâmetros de entrada, como:
INTERVAL, DATETIME, ARRAY multidimensional e RECORD com atributos complexos (RECORD, ARRAY ou ARRAY OF RECORD).

As variáveis devem ser definidas uma por linha sem "atalhos".

Nunca crie RECORD com estruturas diferentes, porém com o mesmo nome no mesmo código fonte.

2.1. PathParam

O PathParam é um valor contido na própria URL da requisição web e é utilizado para definir identificadores (chave primária). Para definir um parâmetro de entrada do tipo PathParam é necessário nomeá-lo com o prefixo _pp_ conforme abaixo:

# Recupera as informações de uma determinada empresa.
# GET http://<servidor>:<porta>/logixrest/logr2/empresa/01
#------------------------------------------------------------------------------#
FUNCTION logr2_pub_get_empresa(l_pp_cod_empresa)
#------------------------------------------------------------------------------#
    DEFINE l_pp_cod_empresa LIKE empresa.cod_empresa
    CALL CONOUT(l_pp_cod_empresa) # l_pp_cod_empresa = "01"
END FUNCTION
# Valida a existência de um item na base de dados.
# POST http://<servidor>:<porta>/logixrest/manr1/validaItem/01/ITEMXPTO
#------------------------------------------------------------------------------#
FUNCTION manr1_pub_process_validaItem(l_pp_cod_empresa,l_pp_cod_item)
#------------------------------------------------------------------------------#
    DEFINE l_pp_cod_empresa LIKE empresa.cod_empresa
    DEFINE l_pp_cod_item    LIKE item.cod_item

    CALL CONOUT(l_pp_cod_empresa) # l_pp_cod_empresa = "01"
    CALL CONOUT(l_pp_cod_item)    # l_pp_cod_item = "ITEMXPTO"
END FUNCTION

Não é possível definir variáveis complexas como RECORDARRAY, ou ARRAY OF RECORD como PathParam.

Para mais de um parâmetro do tipo PathParam, defina-os na ordem de utilização na URL e não utilize outro tipo de parâmetro entre eles.

Nunca utilize valores que possuam caracteres especiais, vírgulas, acentos ou espaços em branco como um PathParam da URL, isto ocasionará valores inválidos.

2.2. QueryString

A QueryString é um parâmetro vindo na URL da requisição web caracterizado pelo sinal ? e posteriormente por & sempre acompanhado pelo nome do parâmetro e um valor, geralmente representando parametrizações de execução ou exibição de dados. Para definir um parâmetro de entrada do tipo QueryString é necessário nomeá-lo com o prefixo _qp_ e com o nome utilizado na URL conforme abaixo:

# Pesquisa por itens de uma determinada empresa, permitindo ordenar por um determinado campo.
# GET http://<servidor>:<porta>/logixrest/manr1/itens/01?order=cod_item
#------------------------------------------------------------------------------#
FUNCTION manr1_pub_get_itens(l_pp_cod_empresa,l_qp_order)
#------------------------------------------------------------------------------#
    DEFINE l_pp_cod_empresa LIKE empresa.cod_empresa
    DEFINE l_qp_order       CHAR(100)
    
    CALL CONOUT(l_pp_cod_empresa) # l_pp_cod_empresa = "01"
    CALL CONOUT(l_qp_order)       # l_qp_order = "cod_item"
END FUNCTION
# Pesquisa por empresas permitindo ordenar e limitar a quantidade de resultados.
# GET http://<servidor>:<porta>/logixrest/logr2/empresas?order=cod_empresa&limit=100
#------------------------------------------------------------------------------#
FUNCTION logr2_pub_get_empresas(l_qp_order,l_qp_limit)
#------------------------------------------------------------------------------#
    DEFINE l_qp_order CHAR(100)
    DEFINE l_qp_limit INTEGER 
    
    CALL CONOUT(l_qp_order) # l_qp_order = "cod_empresa"
    CALL CONOUT(l_qp_limit) # l_qp_limit = 100
END FUNCTION

Não é possível definir variáveis complexas como RECORD ou ARRAY OF RECORD como QueryString.

2.3. Payload

Payload são os valores enviados no cabeçalho da requisições e não são visíveis na URL, utilizado para envio de informações grandes, em lote ou com conteúdo sensível. Todo parâmetro de entrada que não possuir sufixo de identificação (_pp_ ou _qp_) será considerado do tipo Payload e o nome do objeto JSON enviado na requisição deve ser exatamente igual ao nome da variável definida no código fonte, conforme abaixo:

# Efetua a inclusão de uma nova empresa.
# POST http://<servidor>:<porta>/logixrest/logr2/empresa
# BODY:
# {
#     "empresa": {
#         "cod_empresa": "02",
#         "den_empresa": "TESTE",
#         "den_reduz": "TESTE",
#         "end_empresa": "RUA TENENTE ANTÔNIO JOÃO",
#         "den_bairro": "Bom Retiro",
#         "den_munic": "JOINVILLE",
#         "uni_feder": "SC",
#         "ins_estadual": "304.726.052",
#         "num_cgc": "672.796.280/0014-9",
#         "num_caixa_postal": null,
#         "cod_cep": "89223-100",
#         "num_telefone": null,
#         "num_telex": null,
#         "num_fax": null,
#         "end_telegraf": null,
#         "num_reg_junta": null,
#         "dat_inclu_junta": null,
#         "ies_filial": "N",
#         "dat_fundacao": "2012-04-23T18:25:43.511Z",
#         "cod_cliente": null
#     }
# }
#------------------------------------------------------------------------------#
FUNCTION logr2_pub_create_empresa(empresa)
#------------------------------------------------------------------------------#
    DEFINE empresa RECORD LIKE empresa.*
END FUNCTION
# Efetua a modificação de um determinado item.
# PUT http://<servidor>:<porta>/logixrest/manr1/item/01/ITEMXPTO
# BODY:
# {
#     "item": {
#         "cod_empresa": "01",
#         "cod_item": "ITEMXPTO",
#         "den_item": "ITEM TESTE",
#         "den_item_reduz": "ITEM",
#         "cod_unid_med": "PC",
#         "pes_unit": 1,
#         "ies_tip_item": "T",
#         "dat_cadastro": "2009-05-20T00:00:00.000Z",
#         "ies_ctr_estoque": "N",
#         "cod_local_estoque": null,
#         "ies_tem_inspecao": "N",
#         "cod_local_insp": null,
#         "ies_ctr_lote": "N",
#         "cod_familia": "FAN",
#         "gru_ctr_estoq": 7,
#         "cod_cla_fisc": "0",
#         "pct_ipi": 0,
#         "cod_lin_prod": 1,
#         "cod_lin_recei": 2,
#         "cod_seg_merc": 0,
#         "cod_cla_uso": 0,
#         "fat_conver": 1,
#         "ies_situacao": "A"
#     }
# }
#------------------------------------------------------------------------------#
FUNCTION manr1_pub_update_item(l_pp_cod_empresa,l_pp_cod_item,item)
#------------------------------------------------------------------------------#
    DEFINE l_pp_cod_empresa LIKE item.cod_empresa
    DEFINE l_pp_cod_item    LIKE item.cod_item
    DEFINE item             RECORD LIKE item.*
END FUNCTION
  • Sem rótulos