DataService Studio では、関数を作成し、単一の関数または同じタイプの複数の関数を API に関連付け、関数を API のフィルターとして使用できます。このトピックでは、Aviator 関数の構文に基づいて特定のロジックを持つ Aviator 関数を作成する方法の例を示します。
シナリオ
関数を API のプリフィルターとして使用する場合、API の呼び出し時に、関数は API のリクエストパラメーターを前処理します。
関数を API のポストフィルターとして使用する場合、API の呼び出し時に、関数は API のレスポンスを処理して再構築します。
関連情報
関数の作成、テスト、送信、公開、削除、移動、および複製方法の詳細については、「関数の管理」、「関数のテスト、公開、および使用」をご参照ください。
API のプリフィルターまたはポストフィルターとして関数を使用する方法の詳細については、「Aviator 関数の作成」をご参照ください。
Aviator 関数の構文の詳細については、「関数の構文」をご参照ください。
関数の入力パラメーター
Aviator 関数のコードのデフォルト変数の名前は、$0 です。これは、Aviator 関数の入力全体を示します。
シナリオ 1: Aviator 関数を API のプリフィルターとして使用します。
API のリクエストパラメーターとリクエストパラメーターの値は、Aviator 関数の入力全体として使用されます。入力は単層 JSON 形式です。例:
## user_id はリクエストパラメーターです。 ## user_id = (0,1,2) は、API の呼び出し時にリクエストパラメーターに複数の値が渡されることを示します。 { "user_id": [0,1,2] }シナリオ 2: Aviator 関数を API のポストフィルターとして使用します。
API のレスポンスは、Aviator 関数の入力全体として使用されます。入力は多層 JSON 形式です。例:
## 返されるデータには、user_id、city、tags の 3 つの列が含まれています。 ## API の呼び出し後、条件を満たす 3 つのデータエントリが返されます。行のコードを確認してください。 { "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 }
Aviator 関数の使用
シナリオ 1: Aviator 関数を API のプリフィルターとして使用します。例:
例 1: クライアントから渡されたリクエストパラメーターの値を変更するために Aviator 関数が呼び出されます。
Aviator 関数:
## リクエストパラメーター user_id に対してクライアントから渡された元の値は 1 です。 ## プリフィルターとして Aviator 関数を使用してリクエストパラメーター user_id を前処理した後、クエリするリクエストパラメーターの値は 2 になります。 if $0.user_id == 1 { $0.user_id = $0.user_id + 1; } return $0;Aviator 関数の入力と出力:
## 入力: { "user_id": 1 } ## 出力: { "user_id": 2 }
例 2: クライアントから値が渡されていないリクエストパラメーターに値を割り当てるために Aviator 関数が呼び出されます。リクエストパラメーターがオプションで、リクエストパラメーターの値が使用できない場合、リクエストパラメーターに値を割り当てることができます。
Aviator 関数:
## user_id= は、クライアントでリクエストパラメーター user_id が指定されていないことを示します。 ## プリフィルターとして Aviator 関数を使用してリクエストパラメーター user_id を前処理した後、クエリするリクエストパラメーターの値は 1 になります。 $0.user_id = 1; return $0;Aviator 関数の入力と出力:
## 入力: { "user_id": "" } ## 出力: { "user_id": 1 }
例 3: リクエストパラメーター user_id に対してクライアントから渡された配列のすべての値をトラバースし、値を変更するために Aviator 関数が呼び出されます。
Aviator 関数:
## リクエストパラメーター user_id に対してクライアントから渡された元の値は 0、1、2 です。 ## プリフィルターとして Aviator 関数を使用してリクエストパラメーター user_id を前処理した後、クエリするリクエストパラメーターの値は 1、2、3 になります。 user_id = $0.user_id; for index in user_id { user_id[index] = index + 1; } return $0;Aviator 関数の入力と出力:
## 入力: { "user_id": [0,1,2] } ## 出力: { "user_id": [ 1, 2, 3 ] }
シナリオ 2: Aviator 関数を API のポストフィルターとして使用します。例:
例 1: API によって返される JSON データの特定のデータエントリを変更するために Aviator 関数が呼び出されます。
Aviator 関数:
## JSON データの rows という名前の最も内側の配列を取得してトラバースし、city が BJ であるデータエントリを見つけます。次に、データエントリの "tags":"" を "tags":"DataService Studio" に変更します。 rows = $0.data.rows; for row in rows { if(row.city == "BJ") { row.tags = "DataService Studio"; } } return $0;Aviator 関数の入力と出力:
## 入力: { "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 } ## 出力: { "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" }
例 2: API によって返される JSON データの各データエントリに定数列を追加するために Aviator 関数が呼び出されます。
Aviator 関数:
## JSON データの rows という名前の最も内側の配列を取得してトラバースし、各データエントリに定数列 is_target= "Y" を追加します。 rows = $0.data.rows; for row in rows { row.is_target= "Y"; } return $0;Aviator 関数の入力と出力:
## 入力: { "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 } ## 出力: { "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" }
例 3: API によって返される JSON データには多数のフィールドが含まれており、フィールドの戻り値を 1 つずつ決定したくありません。特別な値を持つフィールドの値を変更するために Aviator 関数が呼び出されます。
Aviator 関数:
## JSON データの rows という名前の最も内側の配列を取得します。rows 配列のネストされたデータをトラバースして、各データエントリのマップを取得します。次に、値が null のマップの値を test に変更します。 ## Aviator 構文では、nil は null 定数を指定します。これは、他の構文の null と同等です。 rows = $0.data.rows; for row in rows { for index in row { if(index.value == nil) { index.value = "test" } } } return $0;Aviator 関数の入力と出力:
## 入力: { "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 } ## 出力: { "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" }
フィルターの使用効果
公開済みの関数のみを API のフィルターとして使用できます。
API の入力と出力:
## API 入力:
{
"user_id": ""
}
## API 出力:
{
"data": {
"totalNum": 1,
"pageSize": 10,
"rows": [
{
"is_target": "Y",
"user_id": 2,
"city": "BJ",
"tags": "DataService Studio"
}
],
"pageNum": 1
},
"errCode": 0,
"requestId": "0be30a8716357721257118118e2b0f",
"errMsg": "success"
}