Todos os produtos
Search
Central de documentação

DataWorks:Melhores práticas para usar funções Aviator como filtros

Última atualização: Aug 25, 2026

O DataService Studio permite escrever funções e associá-las a uma API para uso como filtros. Este tópico fornece exemplos de como escrever a lógica das funções usando a sintaxe do Aviator.

Cenários

  • Se você definir uma função como pré-filtro de uma API, ela pré-processará os parâmetros de solicitação da API quando esta for chamada.

  • Se você definir uma função como pós-filtro de uma API, ela reprocessará e transformará os valores de retorno da API quando esta for chamada.

Guia do usuário

Exemplos de parâmetros de entrada

Nota

No código Aviator, o nome de variável padrão $0 refere-se a toda a entrada da função.

  • Cenário 1: Uso de uma função Aviator como pré-filtro de API

    Neste cenário, os parâmetros de solicitação da API servem como entrada completa para a função em uma estrutura json de camada única. O exemplo a seguir mostra os parâmetros de solicitação como entrada da função:

    ## The request parameter is user_id
    ## Multiple parameter values are passed when the API is called: user_id = (0,1,2)
    {
      "user_id": [0,1,2]
    }
  • Cenário 2: Uso de uma função Aviator como pós-filtro de API

    Neste cenário, o valor de retorno da API serve como entrada completa para a função em uma estrutura json multicamada. O exemplo a seguir mostra um valor de retorno como entrada da função:

    ## The return result contains three columns: user_id, city, and tags
    ## After the API is called, three matching data records are returned (see rows)
    {
      "data": {
        "totalNum": 3,
        "pageSize": 10,
        "rows": [
          {
            "user_id": 2,
            "city": "BJ",
            "tags": "B,D,dongcs,ccccc"
          },
          {
            "user_id": 3,
            "city": "SH",
            "tags": "A,C,D,F"
          },
          {
            "user_id": 1,
            "city": "HZ",
            "tags": "A,B,C"
          }
        ],
        "pageNum": 1
      },
      "errCode": 0,
      "requestId": "0bb211c516357674333185698eb07b",
      "errMsg": "success",
      "apiLog": null
    }

Exemplos de uso de funções

Cenário 1: Uso de uma função Aviator como pré-filtro de API. Os exemplos a seguir mostram como usar a função:

  • Exemplo 1: A função modifica o valor de um parâmetro de solicitação enviado pelo cliente quando é chamada.

    • Função Aviator:

      ## For the request parameter user_id, the original value passed from the client is user_id=1
      ## After being processed by the filter, the actual value for the query is user_id=2
      if $0.user_id == 1
      {
          $0.user_id = $0.user_id + 1;
      }
      return $0;
    • Entrada e saída da função:

      ## Input:
      {
          "user_id": 1
      }
      
      ## Output:
      {
        "user_id": 2
      }
  • Exemplo 2: A função atribui um valor a um parâmetro de solicitação não enviado pelo cliente quando é chamada. Isso se aplica quando o parâmetro de solicitação não é obrigatório e nenhum valor é transmitido.

    • Função Aviator:

      ## For the request parameter user_id, the original value passed from the client is user_id=
      ## After being processed by the filter, the actual value for the query is user_id=1
      $0.user_id = 1;
      return $0;
    • Entrada e saída da função:

      ## Input:
      {
          "user_id": ""
      }
      
      ## Output:
      {
        "user_id": 1
      }
  • Exemplo 3: Se um parâmetro de solicitação enviado pelo cliente for um array (ou seja, múltiplos valores para um único parâmetro), a função poderá percorrer o array e modificar cada valor com base na condição do loop quando for chamada.

    • Função Aviator:

      ## For the request parameter user_id, the original value passed from the client is user_id=(0,1,2)
      ## After being processed by the filter, the actual value for the query is user_id=(1,2,3)
      user_id = $0.user_id;
      for index in user_id
      {
          user_id[index] = index + 1;
      }
      return $0;
    • Entrada e saída da função:

      ## Input:
      {
        "user_id": [0,1,2]
      }
      
      ## Output:
      {
        "user_id": [
          1,
          2,
          3
        ]
      }

Cenário 2: Uso de uma função Aviator como pós-filtro de API. Os exemplos a seguir mostram como usar a função:

  • Exemplo 1: A função modifica um registro específico no valor de retorno da API (formato json) após ser chamada.

    • Função Aviator:

      ## First, get the innermost array 'rows' from the JSON. Then, traverse the array. When a record with "city":"BJ" is found, change "tags":"" to "tags":"DataService Studio"
      rows = $0.data.rows;
      for row in rows
      {
          if(row.city == "BJ")
          {
              row.tags = "DataService Studio";
          }
      }
      return $0;
    • Entrada e saída da função:

      ## Input:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "user_id": 1,
              "city": "HZ",
              "tags": "A,B,C"
            },
            {
              "user_id": 3,
              "city": "SH",
              "tags": "A,C,D,F"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211e016357705412263266e571e",
        "errMsg": "success",
        "apiLog": null
      }
      
      ## Output:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "user_id": 1,
              "city": "HZ",
              "tags": "A,B,C"
            },
            {
              "user_id": 3,
              "city": "SH",
              "tags": "A,C,D,F"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211e016357705412263266e571e",
        "errMsg": "success"
      }
  • Exemplo 2: A função adiciona uma coluna constante a cada registro no valor de retorno da API (formato json) após ser chamada.

    • Função Aviator:

      ## First, get the innermost array 'rows' from the JSON. Then, traverse the array and add a constant column is_target= "Y" to each record.
      rows = $0.data.rows;
      for row in rows
      {
          row.is_target= "Y";
      }
      
      return $0;
    • Entrada e saída da função:

      ## Input:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "user_id": 1,
              "city": "HZ",
              "tags": "A,B,C"
            },
            {
              "user_id": 3,
              "city": "SH",
              "tags": "A,C,D,F"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211e016357705412263266e571e",
        "errMsg": "success",
        "apiLog": null
      }
      
      ## Output:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "is_target": "Y",
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "is_target": "Y",
              "user_id": 1,
              "city": "HZ",
              "tags": "A,B,C"
            },
            {
              "is_target": "Y",
              "user_id": 3,
              "city": "SH",
              "tags": "A,C,D,F"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211e016357705412263266e571e",
        "errMsg": "success"
      }
  • Exemplo 3: Se o valor de retorno da API (formato json) contiver muitos campos e você não quiser verificar o valor de cada campo individualmente, use uma função para percorrer todos os campos e modificar os valores de campos específicos após a chamada.

    • Função Aviator:

      ## First, get the innermost array 'rows' from the JSON. Then, perform a nested traversal of the 'rows' array. For each element in 'rows', get its map. If a value in the map is null, change it to "test".
      ## In Aviator syntax, 'nil' is the null constant, equivalent to 'null' in other syntaxes.
      rows = $0.data.rows;
      for row in rows
      {
          for index in row
          {
              if(index.value == nil)
              {
                  index.value = "test"
              }
          }
      }
      return $0;
    • Entrada e saída da função:

      ## Input:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "user_id": null,
              "city": "SH",
              "tags": "A,C,D,F"
            },
            {
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "user_id": null,
              "city": null,
              "tags": "A,B,C"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211f016372870359913841e52d8",
        "errMsg": "success",
        "apiLog": null
      }
      
      ## Output:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "user_id": "test",
              "city": "SH",
              "tags": "A,C,D,F"
            },
            {
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "user_id": "test",
              "city": "test",
              "tags": "A,B,C"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211f016372870359913841e52d8",
        "errMsg": "success"
      }