注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
クエリは、オプションでAPIゲートウェイを介して公開できる、関数の読み取り専用のサブセットです。オントロジーの変更や外部システムの変更などの副作用はありません。APIゲートウェイを通じて追加の編集機能が必要な場合は、アクションを使用してください。
Query
デコレータを使用するには、@foundry/functions-api
パッケージからインポートしてください。
Copied!1 2
// "@foundry/functions-api"から"Query"をインポートします。 import { Query } from "@foundry/functions-api";
デコレータは、API名を定義するために使用できる string
型のオプションパラメーター apiName
も受け入れます。
このシンプルなクエリの例は、特定の時間後に出発する航空機の数を返します。ここではAPI名は定義されていません。シンプルなクエリは、既存の @Function
デコレータでタグ付けされた関数と同様に動作します。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import { Query, Double } from "@foundry/functions-api"; import { Objects, Aircraft } from "@foundry/ontology-api"; export class PublishedQueries { // @Queryデコレーターを使用したメソッド。 // minimumTimeInMinutesよりも後に離陸する航空機の数をカウントします。 @Query() public async countAircraftTakingOffAfter(minimumTimeInMinutes: Double): Promise<Double> { // Objects.search().aircraft() を使用して航空機を検索し、 // フィルターを適用して次の飛行までの時間がminimumTimeInMinutesよりも長い航空機をフィルターします。 // その結果の数(航空機の数)をカウントします。 const aircaftCount = await Objects.search().aircraft() .filter(aircraft => aircraft.timeUntilNextFlight.range().gt(minimumTimeInMinutes)) .count(); // 航空機の数を返します。 return aircaftCount!; } }
クエリを Foundry の API 経由でアクセス可能にするために、Query
デコレータに apiName
というオプションのパラメーターを提供します。以下の例では、以前のクエリを APIゲートウェイを通じて公開する方法を示しています:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// "@foundry/functions-api" から "Query" と "Double" をインポートします import { Query, Double } from "@foundry/functions-api"; // "@foundry/ontology-api" から "Objects" と "Aircraft" をインポートします import { Objects, Aircraft } from "@foundry/ontology-api"; // "PublishedQueries" というクラスをエクスポートします export class PublishedQueries { // "getReschedulableAircraftCount" というAPI名を持つQueryを定義します @Query({ apiName: "getReschedulableAircraftCount" }) // 指定した最小時間(分)以降に離陸する航空機の数を数える非同期関数を定義します public async countAircraftTakingOffAfter(minimumTimeInMinutes: Double): Promise<Double> { // 次のフライトまでの時間が指定した最小時間よりも大きい航空機をフィルタリングして、その数をカウントします const aircaftCount = await Objects.search().aircraft() .filter(aircraft => aircraft.timeUntilNextFlight.range().gt(minimumTimeInMinutes)) .count(); // カウントした航空機の数を返します return aircaftCount!; } }
クエリのapiName
は、以下の要件を満たす文字列である必要があります。
lowerCamelCase
であること。apiName
が一意でない場合、タグ付けプロセスが失敗し、名前を変更する必要があります。さらに、API名付きクエリを含むリポジトリは、少なくとも1つのオントロジーからエンティティをインポートする必要があります。
API名付きクエリは、常に公開されたクエリの最新のタグ付きバージョンを使用し、他のFoundry関数と同様のセマンティックバージョン管理のパラダイムには従いません。
API名をクエリから切り離してAPIゲートウェイで機能しなくするには、Query
デコレータからAPI名を削除し、リポジトリから新しいタグをリリースする必要があります。
デコレータのAPI名を変更し、新しいタグを公開すると、コンシューマが機能しなくなります。クエリの最新の公開バージョンのみがサポートされています。
コンシューマが破損せずに都合の良いタイミングでアップグレードできるようにするために、同じAPI名の複数のバージョンをサポートすることを検討するかもしれません。これを行うには、リポジトリ内のクエリコードをコピーし、別のAPI名を付ける必要があります(例:getReschedulableAircraftCountV2
)。
他の関数と同様に、オントロジー・マネージャでクエリを検索し、管理することができます。クエリ名またはAPI名で検索できます。
以下の例では、API名としてのクエリはgetReschedulableAircraftCount
、クエリ名としてのクエリはcountAircraftTakingOffAfter
です。
リポジトリ内のfunctions.json
ファイルを更新して、enableQueries
プロパティをtrueに設定することで、クエリを有効にする必要があるかもしれません。
Copied!1 2 3
{ "enableQueries": true // "enableQueries"をtrueに設定します。これはクエリの実行を可能にします。 }
他の Function コードリポジトリにクエリをインポートする機能はベータ版であり、変更される可能性があります。この機能が一般に利用可能になる前に手動での移行が必要となる場合があります。
Function コードリポジトリの左サイドバーにある Resource imports タブから、クエリ(AIP Logic によって公開されたクエリ関数を含む)をインポートできます。
インポートされたクエリ関数は、他の関数と同様にコード内でインポートして呼び出すことができます。
## 例: AIP Logicによって公開されているクエリ関数
# 以下の例のクエリ関数はAIP Logicによって公開されており、「generateAText」としてAPIが定義されています:
import { Objects, Queries } from "@foundry/ontology-api";
export class MyFunctions {
@Function()
public async myFunction(subject: string): Promise<string> {
// 注意: 以下のステートメントは `Queries.generateAText({ subject: subject });` と同等です
return Queries.generateAText({ subject });
}
}
ユーザーは、インポートされたクエリを正常に実行するために、AIP Logic の依存関係にアクセスし、トリガーするための必要な権限を持っている必要があります。