BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース OData 4.0の変更点

OData 4.0の変更点

原文(投稿日:2013/05/31)へのリンク

ODataはMicrosoftが支持するRESTの規約で使うデータ問い合わせのため標準だ。このODataの4番目のバージョンがOASISの委員会に受理された。公開レビューは6月2日に行われ、MicrosoftはOASISが今年の後半に標準としてOASISに受理されると考えている。

SAP、IBM、Progress Software、Northeastern University、CitrixもODataのスポンサーだ。SAPは現在Java向けのオープンソースのODataライブラリを提供している。JavaScript向けにはJayDataがオープンソースと商用のライブラリを両方提供している。

完全な仕様はOData.org Documentsページで読める。残念ながら、変更点の一覧はない。Michael Pizzo氏の要約によれば、

1) データモデルの変更 CSDLでのデータモデルの表現方法が変更されました。とりわけ、

a) 関連の表現の大きな変更/単純化。関連の定義がナビゲーションプロパティの一部として表現されるようになりました。一方向の関連と真のコンテインメントをサポートします。

b) トップレベルの"名前付きエンティティ"によって、エンティティコンテナ上でシングルトンのエンティティを公開するようになります。

c) ファンクション/アクションがスキーマ内で定義され、ファンクション/アクションのインポートによって、エンティティコンテナで公開される可能性があります。

d) サービスドキュメントにパラメータなしファンクションのインポートと同様、"名前付きエンティティ"が含まれます。

e) メタデータにetagを使ってバージョンを付加しました。

f) 要素の定義を見直して、分散データモデルを刷新しました。モデルのインスタンスが常にJSONやATOMを使って自身のメタデータを参照できるようにしました。

g) サービスがどのようにメタデータを提供するかについて定義する作業を始めました。これはかなり最近になって始めた取り組みで、データモデルなどについてフィードバックをもらいたいと思っています。

h) 複合型のプロパティの制約を緩めました。ナビゲーション属性や参照制約と同じように、エンティティのキー属性はエンティティを含む複合型に付加できます。複合型用の継承のセマンティクスも定義しました。

i) キーなしで抽象型を定義できるようにしました。最初の派生型には、キーが定義されていなかったら、キーを定義しなければなりません。

j) アノテーションも変更しました。特に、TypeAnnotationsとValueAnnotationsを統合しました。また、デフォルト値を追加し、モデルの振る舞いの側面(サーバが生成したアイデンティティのための属性や計算フィールドなど)を捉えるための語彙の定義を始めています。

2) データ型の変更 プリミティブ型を調整しました(特に、日付/時間型)。特筆するべきは、

a) Edm.Float (Edm.Singleの同義)とEdm.DateTime (Edm.DateTimeOffsetの同義)を削除し、Edm.Timeを非推奨にして、Edm.DurationとEdm.TimeOfDayを使うように薦めています。

b) 新しいデータ型に標準のファンクションを追加しました。

c) 列挙型のためのリテラル構文とシリアライズフォーマットを定義しました。

d) 抽象の"Edm.EntityType"、"Edm.ComplexType"、"Edm.PrimitiveType"、各型のコレクションを定義しました。エンティティ/複合/プリミティブ型が判明していないデータモデルで利用できます。そのようなモデルの場合、実際の型はペイロードで定義されます。

e) エンティティ参照という概念を導入しました。この概念は多くの場面で、エンティティの代わりに利用されます。

f) "TypeDefinition"の概念を導入しました。プリミティブ型と固定のファセットの集合を名付けるために利用します。 

3) URLの変更

a) expandの表現を変えました。$expandにオプションを追加しました。$filter、$orderbyを追加しました。expandのオプションとしての$expandと$selectネストしたexpand/projectionで、パススルーナビゲーション属性を表現する代わりに使われます。再帰的なexpandのために$levelsを追加しました。

b) リソースを横断した全文検索で利用する$searchシステムクエリオプションを追加しました。

c) $countは$inlinecountを置き換えます。コレクションやナビゲーション属性をフィルタするために利用され、エンティティそのものではなく、関連するエンティティの数を返します。

4) セマンティクス セマンティクスとリクエストの処理の仕方を見直しました。特に、

a) コンフォーマンスセクションを追加しました。異なるレベルのコンフォーマンスを記述するためです。ここにもフィードバックをもらいたいと思っています。ODataの仕様は巨大なので、実装者はすべての仕様を実装する必要はないということを知っておいてほしいです。

b) $batch関連の挙動を見直しました。非同期の結果やエラー時の継続/失敗の選択の挙動を見直しています。

c) エンティティ/複合型の更新にPUTよりもPATCHを使うことを推奨し、複合型にPATCHを使った場合の挙動を明確に説明しています。

d) Preferヘッダを最新のIETFの草案に合わせ、クライアントがサービスの望む振る舞いを判別するために多くの選択肢を提供します。

e) 存在していないリソースのURLへPUT/PATCHをすることによって、UPSERTをサポートします。

5) 新しいサービス。新しいサービスに対するサポートを追加しました。

a) 非同期実行がreturn-asyncリクエストヘッダを通じて定義されます。これは、最新のIETFの考えを反映しています。

b) Change Tracking (Delta)のサポートが定義されました。前に取得した結果との差異を戻す仕様の一部としてサポートされています。関連するエンティティセットや削除されたエンティティの表現の詳細、追加/削除されたリンクの変更を追跡するためのセマンティクスが定義されています。

6) フォーマット

a) 古い"JSON Verbose"フォーマットを非推奨にし、新しいJSONフォーマットを推奨しています。

b) ATOMをサポートするサービスを必要としません。サービスはATOMとJSONのどちらかを実装しなければなりません。私たちはJSONを薦めています。

c) ATOMはレスポンスのためのメタデータURLを含んでいます。型の情報がレスポンスのメタデータURLから取得できなければ、ナビゲーション属性のためのメタデータURLを含んでいる場合もあります。

提案された標準に対するフィードバックはODataメーリングリストに投稿するといいだろう。

この記事に星をつける

おすすめ度
スタイル

BT