注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
クエリは、オプションでAPIゲートウェイを通じて公開できる、Functionsの読み取り専用のサブセットです。オントロジーを変更したり、外部システムを変更したりするような副作用は持つことができません。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 20 21 22
// "@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 { // Queryデコレータを使用して、公開クエリを定義します @Query() // 指定した時間(分)以降に離陸する航空機の数をカウントする非同期関数を定義します public async countAircraftTakingOffAfter(minimumTimeInMinutes: Double): Promise<Double> { // Objects.search().aircraft()を使用して航空機を検索し、 // filter関数を使用して指定した時間よりも長い時間が経過するまで離陸しない航空機をフィルタリングします // 最後にカウントします 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({ 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 Functions と同じセマンティックバージョン管理のパラダイムには従いません。
API 名をクエリから切り離し、API ゲートウェイで機能しなくするには、Query
デコレータから API 名を削除し、リポジトリから新しいタグをリリースする必要があります。
デコレータ内の API 名を変更し、新しいタグを公開すると、コンシューマが壊れます。クエリの最新の公開バージョンのみがサポートされています。
コンシューマが壊れることなく自分の都合でアップグレードできるようにするために、同じ API 名の複数のバージョンをサポートすることが望ましい場合があります。これを行うには、リポジトリ内のクエリコードのコピーを作成し、別の API 名を付ける必要があります(例:getReschedulableAircraftCountV2
)。
他の Functions と同様に、オントロジーマネージャ でクエリを検索し、管理することができます。クエリ名や API 名で検索できます。
以下の例では、API 名のクエリは getReschedulableAircraftCount
で、クエリ名は countAircraftTakingOffAfter
です。
リポジトリ内の functions.json
ファイルを更新して、enableQueries
プロパティを true に設定し、クエリを有効にする必要がある場合があります:
Copied!1 2 3
{ "enableQueries": true // クエリを有効にする }