オントロジーファンクションAPIゲートウェイ経由の関数クエリ

注: 以下の翻訳の正確性は検証されていません。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!; } }

例:API名付きクエリ

クエリを 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!; } }

API 名のバリデーション

クエリの apiName は、以下の要件を満たす文字列である必要があります。

  • lowerCamelCase であること。
  • 100 文字以下であること。
  • 先頭に数字を含まないこと。
  • リポジトリにインポートされたすべてのオントロジーの中で一意であること。
    • apiName が一意でない場合、タグ付けプロセス が失敗し、名前を変更する必要があります。

また、API名でクエリされるリポジトリは、少なくとも1つのオントロジーからエンティティをインポートする必要があります。

API 名付きクエリのバージョンと更新

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 // クエリを有効にする }