A funcionalidade Call API permite que um campo do inquérito faça um pedido HTTP a um serviço externo e use a resposta para preencher um valor calculado ou validar a entrada do utilizador. Isto permite pesquisas em tempo real, verificação de ID, pesquisas de código de barras e qualquer outra verificação do lado do servidor durante a recolha de dados.

Existem duas funções:

  • callapi() — obtém um valor de uma API e armazena-o num campo calculate ou text
  • callapi-verify() — chama uma API e bloqueia o progresso se a resposta não corresponder ao valor esperado (usado em constraint)

callapi() — Obter e armazenar uma resposta de API

Sintaxe

Coloque callapi() na coluna calculation de um campo calculate ou text:

  callapi(method, url, allowed_auto, max_retry, no_overwrite, extract_expr, timeout, lifetime, response_q, call_type, post_body)
  

Parâmetros

#ParâmetroDescrição
1methodMétodo HTTP: 'GET' ou 'POST'
2urlURL do endpoint da API
3allowed_auto1 para chamar automaticamente quando o campo é alcançado; 0 para exigir um botão de acionamento manual
4max_retryNúmero máximo de tentativas de repetição em caso de falha
5no_overwrite1 para manter o valor existente se o campo já tiver um; 0 para sempre substituir
6extract_exprExpressão JSONPath para extrair o valor desejado da resposta (por ex., $.data.name)
7timeoutTempo limite de pedido em milissegundos
8lifetimeQuanto tempo (ms) a resposta em cache permanece válida antes de ser novamente obtida
9response_qNome de um campo para armazenar o código de resposta HTTP bruto (por ex., ${response_status})
10call_type(Opcional) Modo de chamada especial: 'lazy-upload' ou 'lazy-upload-multiple'
11post_body(Opcional) Cadeia de corpo POST. Referencie campos do formulário com ##fieldname##

Exemplo: Pedido GET para pesquisar um agregado familiar por ID

typenamelabelappearancecalculation
texthousehold_idID do Agregado Familiar
calculatehh_namecallapicallapi('GET', concat('https://api.example.com/households/', ${household_id}), 1, 3, 0, '$.name', 10000, 0, '')
notehh_displayAgregado familiar: ${hh_name}

Exemplo: Pedido POST com corpo JSON

  callapi('POST', 'https://api.example.com/lookup', 1, 2, 0, '$.result.value', 15000, 0, '', '', '{"id": "##household_id##"}')
  

No post_body, use ##fieldname## para injetar o valor atual de qualquer campo do formulário.

Aparência: callapi

Adicione callapi à coluna appearance do campo para ativar a integração de chamada de API:

typenamelabelappearancecalculation
calculateapi_resultcallapicallapi('GET', ...)

Quando allowed_auto é 0, o rtSurvey mostra um botão “Obter” que o enumerador toca manualmente.


callapi-verify() — Validar um valor contra uma API

callapi-verify() bloqueia a submissão de um campo até que uma API confirme que o valor introduzido é válido. Use-o na coluna constraint.

Sintaxe

  callapi-verify(method, url, extract_expr, match_expr, timeout, constraint_mode, post_body, message)
  

Parâmetros

#ParâmetroDescrição
1methodMétodo HTTP: 'GET' ou 'POST'
2urlEndpoint de API de verificação
3extract_exprJSONPath para extrair o valor esperado da resposta
4match_exprExpressão que compara o valor extraído com o valor do campo (por ex., $.status = 'valid')
5timeoutTempo limite de pedido em milissegundos
6constraint_mode'soft' apenas para aviso; 'hard' para bloquear progressão
7post_body(Opcional) Corpo POST com substituições ##fieldname##
8message(Opcional) Mensagem de erro. Suporta múltiplos idiomas: <en>Invalid!</en><vi>Không hợp lệ!</vi>

Exemplo: Verificar um código de barras contra um registo de ativos

typenamelabelappearanceconstraintconstraint_message
barcodeasset_codeDigitalize o código de barras do ativocallapi-verifycallapi-verify('POST', 'https://api.example.com/assets/verify', '$.valid', ". = 'true'", 10000, 'hard', '{"code": "##asset_code##"}')Ativo não encontrado no registo

Aparência: callapi-verify(...)

A coluna appearance num campo com callapi-verify() em constraint deve conter callapi-verify(params) ou callapi-verify(dynamicParams) para sinalizar ao rtSurvey que este campo usa verificação de API.


Usar dados da App API juntamente com callapi

Combine callapi() com pulldata('app-api', 'user.token') para injetar o token do utilizador autenticado no seu pedido de API:

  callapi('POST', 'https://api.example.com/data', 1, 2, 0, '$.value', 10000, 0, '', '',
  concat('{"token":"', pulldata('app-api','user.token'), '","id":"##item_id##"}'))
  

Melhores Práticas

  1. Defina sempre um timeout razoável (5000–15000 ms) — não use 0 ou valores muito altos.
  2. Defina allowed_auto=0 para verificações que o enumerador deve acionar conscientemente (por ex., verificações de ID).
  3. Defina no_overwrite=1 quando o campo pode ser editado posteriormente e não pretende que a nova obtenção substitua correções manuais.
  4. Use extract_expr com um JSONPath específico em vez de depender do texto de resposta bruto.
  5. Teste as chamadas de API em modo offline — callapi falhará graciosamente e mostrará um erro, mas o formulário deve ainda ser completável para campos não críticos.

Limitações

  • Requer conectividade de rede no momento da chamada — as chamadas falharão quando o dispositivo estiver offline.
  • As respostas da API devem ser JSON — as respostas XML ou de texto simples requerem análise adicional.
  • Alta frequência de chamadas (por ex., uma chamada de API por instância de repetição) pode abrandar a navegação do formulário.
Esta página foi útil?