注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このガイドは、TypeScript OSDK 1.x を使用しているアプリケーションを TypeScript OSDK 2.0 に移行する際の支援を目的としています。以下のセクションでは、2 つのバージョン間の違いと、構文や構造の変更点を説明します。
TypeScript のドキュメントは、Developer Console の /workspace/developer-console/
でも利用可能です。バージョンピッカーを使用して、TypeScript OSDK 2.0 のドキュメントを選択します。
TypeScript OSDK 1.x は、ユーザーが Palantir プラットフォームの外部でオントロジーと対話することを可能にします。しかし、この初期バージョンにはスケーラビリティの制限がありました。
TypeScript OSDK 2.0 は、SDK の生成方法とオントロジーへのアクセス方法を見直すことで、多くのパフォーマンスと使いやすさの改善を提供します。
2 つのバージョン間の主要な設計上の違いとその背後にある理由についての詳細は、オープンソースの TypeScript OSDK リポジトリ内の開発者ドキュメントを参照してください。
新しい TypeScript バージョンの OSDK は、オントロジーとの対話能力を向上させます。これにより、新しい機能のリリース、たとえば インターフェース や メディアセット などは、TypeScript OSDK 2.0 が必要となります。
Palantir は、TypeScript OSDK 2.0 のリリース後、少なくとも 1 年間は TypeScript バージョン 1.x の OSDK をサポートします。
既存の Developer Console アプリケーションに対して、SDK バージョン タブで TypeScript OSDK 2.0 ジェネレーターを使用して新しい SDK バージョンを生成できます。既存のアプリケーションは、新たに生成された SDK を使用するために必要な依存関係も持っている必要があります。Developer Console で作成された新しいアプリケーションはデフォルトで TypeScript OSDK 2.0 ジェネレーターを使用して SDK を生成し、開発者は Start developing タブの指示に従ってすぐに開始できます。
最新バージョンの @osdk/client
パッケージを npm からインストールするか、プロジェクトの package-lock.json
を適宜更新します。
TypeScript OSDK 2.0 のクライアントは createClient
関数を使用して作成されます。この関数には ontologyRid
という追加のパラメーターが必要です。ontologyRid
パラメーターは文字列として渡すか、環境変数から読み取るか、またはSDKパッケージで生成された新しい $ontologyRid
変数から動的に読み取ることができます。
CLIを通じてユーザーのオントロジーのOSDKをインストールする場合、$ontologyRid
はSDKパッケージのルートからエクスポートされ、上記のようにアクセスできます。それ以外の場合、クライアントを構築する場所に既知のontologyRid
を渡す必要があります。この情報はFoundryのオントロジーマネージャーから取得できます。希望するオントロジーを選択し、Ontology configurationタブに移動して、Ontology metadataセクションからオントロジーRIDをコピーしてください。
TypeScript OSDK 1.xでは、クライアント上のメソッドにネストされたオブジェクト構造を通じてアクセスできます。たとえば:
Copied!1 2
legacyClient.objects.legacyObject.fetchPage(); // 古いクライアントのオブジェクトからページを取得する
TypeScript OSDK 2.0 では、クライアントが直接呼び出せるようになりました。これにより、クライアントとインターフェースし、作業したいオブジェクトやアクションを渡すことができます。新しい使用パターンは一般的に次の構文に従います。
Copied!1 2
client(myObject).fetchPage() client($Objects.myObject).fetchPage()
このコードは2つの行からなり、どちらもclient
オブジェクトのfetchPage()
メソッドを呼び出しています。
client(myObject).fetchPage()
myObject
という変数をclient
関数に渡してfetchPage()
メソッドを呼び出しています。client($Objects.myObject).fetchPage()
$Objects.myObject
というプロパティを持つオブジェクトをclient
関数に渡してfetchPage()
メソッドを呼び出しています。このコードは、オブジェクトの取得方法が異なるだけで、最終的にはfetchPage()
を呼び出すという動作を行っています。注意すべきは、$Objects
のような特殊なオブジェクトが使われている点です。
TypeScript バージョン 1.x とバージョン 2.0 のオブジェクト型の主な違いは、オブジェクトのデータにアクセスするために使用される異なる型にあります。1.x バージョンでは、myObject
型とインターフェースすることでオブジェクトのプロパティにアクセスできました。しかし、バージョン 2.0 では、ラップされた型 Osdk.Instance<myObject>
でレガシーオブジェクト型と同様の機能が提供されています。
これは、SDK 全体のメソッドの戻り値の型に反映されています。たとえば、TypeScript OSDK 1.x のページ結果型は Page<myObject>
ですが、TypeScript OSDK 2.0 のページ結果型は PageResult<Osdk.Instance<myObject>>
です。
これにより、コードを変換する際に直面する可能性のあるさまざまな互換性の問題が発生します。
Osdk.Instance<myObject>
は legacyMyObject
と同等ではない2 つのオブジェクト内のプロパティに大きな変更がありました。
GeoShape, GeoPoint
を使用しますが、TypeScript OSDK 2.0 は GeoJSON
を使用しますTimestamp, LocalDate
を使用しますが、TypeScript OSDK 2.0 はこれらの型を strings
として扱いますたとえば、新しいクライアントでオブジェクトのロードコールを置き換えたいが、レガシー TypeScript OSDK 1.x のオブジェクト型を期待するヘルパー関数を変更したくないとします。この場合、レガシー TypeScript OSDK 1.x からオブジェクト型をインポートし続けていると、2 つの型が互換性がないためエラーが発生します。
これは、Osdk.Instance<myObjectV2>
が legacyMyObject
と互換性がないためです。
TypeScript OSDK 2.0 では、オブジェクトタイプを Osdk.Instance<>
でラップすることが、さまざまなプロパティにアクセスするために重要です。Osdk
ラッパーは、これらのプロパティをタイプの最上位に引き上げ、TypeScript OSDK 1.x のレガシータイプにより類似させます。
しかし、オブジェクトタイプのインポートを TypeScript OSDK 2.0 から行うように変更すると、問題が発生します。Osdk
ラッパーがなければ、オブジェクトプロパティへの最上位アクセスができず、上記の他のフィールドがインポートに欠けてしまいます。
これは、Osdk.Instance<myObjectV2>
が myObjectV2
と互換性がないためです。
以下の方法を考慮してコードを編集し、TypeScript OSDK 2.0 の新しい OSDK オブジェクトタイプを使用します。
このセクションには、TypeScript OSDK 1.x と 2.0 クライアント間のマッピングを説明する簡単な例が含まれています。より複雑な TypeScript OSDK 2.0 構文の例については、Palantir の公開 GitHub リポジトリの OSDK 例 ↗を参照してください。
fetchOne
メソッドを使用して、結果ラッパーなしでオブジェクトを返すこともできます。
WHERE
句// `legacyClient`の`ontology`オブジェクトの中にある`legacyObject`をフィルタリング
legacyClient.ontology.objects.legacyObject
// `legacyProperty`が"foo"で始まるものを選択
.where(query => query.legacyProperty.startsWith("foo"))...
// myObject のプロパティが "foo" で始まる条件を指定して検索を行う
client(myObject).where({
myObjectProperty: { $startsWith: "foo" }
})...
orderBy
句Order-by句は、別個のフィルター処理句ではなく、fetchPage
に渡されるオブジェクト内で指定されるようになりました。
// clientオブジェクトのontologyプロパティから、レガシーオブジェクト(legacyObject)を取得
client.ontology.objects.legacyObject
// ソート基準を指定して昇順で並べ替え
.orderBy(sortBy => sortBy.OntologyProperty.asc())
// ページサイズを30に設定してデータを取得、エラーも取得する
.fetchPageWithErrors({ pageSize: 30 });
Copied!1 2 3 4
client(myObject).fetchPage({ $orderBy: { "OntologyProperty": "asc" } // "OntologyProperty" で昇順に並べ替え $pageSize: 30 // ページサイズを30に設定 });
TypeScript OSDK 2.0 の構文では、集約の順序を指定する引数を渡すことができます。これにより、groupBy
集約を指定する際に結果が返される順序を制御できます。利用可能なオプションは unordered
、asc
(昇順)、desc
(降順)です。
groupBy
)// legacyObjectをimageIdとobjectLabelでグループ化し、各グループの数を計算するコード
legacyClient.ontology.objects.legacyObject.where(...)
.groupBy(legacyObject => legacyObject.imageId.exact) // imageIdでグループ化
.groupBy(legacyObject => legacyObject.objectLabel.exact) // objectLabelでさらにグループ化
.count() // 各グループの要素数をカウント
.compute(); // 計算を実行
// クライアントオブジェクトでwhere句を使用し、集約処理を行っています。
// $select: { $count: "unordered" } は、カウントを無順序で取得することを指定しています。
// $groupBy: { imageId: "exact", objectLabel: "exact" } は、imageIdとobjectLabelで正確にグループ化することを指定しています。
client(myObject).where(...).aggregate({ $select: { $count: "unordered" },
$groupBy: { imageId: "exact", objectLabel: "exact" }});
TypeScript OSDK 2.0 でシンプルなアクションを適用するための構文は、従来の TypeScript OSDK 1.x の構文と非常に似ています。どちらも applyAction
関数を呼び出します。
Copied!1 2 3 4
await legacyClient.ontology.actions.createObject({ ...params }); // legacyClientを使ってオブジェクトを作成する非同期関数 // paramsにはオブジェクト作成に必要なパラメータが含まれる // '...'はスプレッド演算子で、paramsの内容を展開する
// createObjectのアクションを非同期で適用する
// paramsにはアクションに必要なパラメータが含まれている
await client(createObject).applyAction({ ...params });
バッチアクションは、シンプルなアクションと同様に構文の変更が必要になります。
Copied!1 2 3 4 5 6
// 'legacyClient'は古いクライアントのインスタンス // 'ontology'はオントロジー関連の機能を提供するオブジェクト // 'batchActions'はバッチでのアクションを扱うプロパティ // 'createObject'メソッドは、新しいオブジェクトを作成するためのもの // 'params'にはオブジェクト作成に必要なパラメータが含まれる await legacyClient.ontology.batchActions.createObject({ ...params });
Copied!1 2
// createObject のアクションをバッチで適用するための関数呼び出し await client(createObject).batchApplyAction({ ...params });
OSDK 1.x で入力を検証したり ActionEdits
を受信したりしていた場合、Options
オブジェクトで $returnEdits
と $validateOnly
プロパティを指定することでこれらを定義できるようになりました。編集を返すことと validateOnly を同時に行うことはできません。
// オブジェクトを作成し、検証と実行を同時に行いたい場合
await legacyClient.ontology.actions.`createObject`({ ...params },
{ mode: ActionExcecutionMode.VALIDATE_AND_EXECUTE,
returnEdits: ReturnEditsMode.ALL });
// 検証のみを行いたい場合
await legacyClient.ontology.actions.createObject({ ...params },
{ mode: ActionExcecutionMode.VALIDATE_ONLY });
Copied!1 2 3 4 5
// この呼び出しは、検証エラーが発生した場合に例外をスローします await client(createObject).applyAction({ ...params }, { $returnEdits: true }); // 検証のみを行い、実際のアクションは実行しません await client(createObject).applyAction({ ...params }, { $validateOnly: true });
TypeScript OSDK 1.x から 2.0 へのクエリ構文の変更は、Actions の変更と非常に類似しています。TypeScript OSDK 2.0 では、実行したいクエリを渡した後、クライアント上で executeFunction
オブジェクトを呼び出すことができます。
Copied!1 2 3
await legacyClient.queries.legacyQuery({ ...params }); // `legacyClient`オブジェクトの`queries`メソッドを使用して、`legacyQuery`を非同期に呼び出します。 // `params`オブジェクトのプロパティを展開して渡します。
// 'executeFunction' メソッドを非同期で呼び出し、'exampleQuery' を使ってクライアントから実行する。
// 'params' オブジェクトをスプレッド構文で展開して渡す。
await client(exampleQuery).executeFunction({ ...params });
DateTime
の取り扱いTypeScript OSDK のバージョン 1.x では、LocalDate
や Timestamp
などの日付や時刻を処理するためのカスタム型を提供していました。TypeScript OSDK 2.0 では、DateTime
の具体的な型は提供されていません。その代わりに、OSDK 内で DateTime
値を返したり受け取ったりする操作では、国際標準である ISO 8601 ↗ の形式で生の文字列を使用します。
OSDK は、DateTime
プロパティを使用する際に、正しくフォーマットされた ISO 8601 文字列を期待します。たとえば、DateTime
プロパティを使用して where
句でオブジェクトセットをフィルター処理する場合、正しくフォーマットされた文字列を指定する必要があります。
// 特定の日付より後の日付を持つオブジェクトをフィルタリングするクエリ
client(myObject).where({
"dateTimeProperty": {
"$gt": "2010-10-01T00:00:00Z", // 2010年10月1日午前0時以降の日付
}
});
DateTime
値は、さまざまな OSDK メソッドからもこの形式で返されます。たとえば、オブジェクトをロードする際、オブジェクトの DateTime プロパティは datetime 文字列で返されます。
OntologyObject
OntologyObject
型は TypeScript OSDK V2 には存在しません。文脈的に同等の型は、@osdk/api
パッケージにある OsdkBase
型です。
IsOntologyObject
IsOntologyObject
は TypeScript OSDK V2 には存在しません。