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
Para obter mais informações sobre como criar, testar, confirmar, publicar, excluir, mover e clonar funções, consulte Gerencie functions, Test, publish, and use functions e Publish functions.
Para saber mais sobre o uso de funções como pré-filtros e pós-filtros de API, consulte Crie an Aviator function.
Para obter detalhes sobre a sintaxe das funções Aviator, acesse Sintaxe de funções.
Exemplos de parâmetros de entrada
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" }
-