はじめに
前回の記事では、ODataの概要について説明しました。
今回は、ODataを構成する要素(Entity type, Entity setなど)について書きます。
※OData関連の投稿一覧は以下の記事をご参照ください。
【SAPUI5】OData(1) ODataとは
ODataの構造
ODataは、データ構造をmetadataとして記述します。
metadataには以下のようなものが含まれます。
要素 | 説明 |
---|---|
Entity Type | データの構造を定義したもの。Entityを一意に特定するkeyを持つ。Entity Typeを構成する要素のことをpropertyという |
Entity | Entity Typeのインスタンス |
Entity Set | Entityの集合 |
Navigation property | Entity同士の関係。カーディナリティを持つ |
Action | 元のデータに変更を加えうる操作 |
Function | 元のデータに変更を加えない操作。たとえばフィルタなど |
ABAPに親しんだ人にとっては、Entity Type=構造の型、Entity Set=内部テーブル、Entity= 内部テーブルの1行と考えるとわかりやすいと思います。
Entity Type, Entity, Entity Setのイメージ
実際のmetadataを見てみる
metadataを見る際はブラウザに <サービスURL>/$metadata
と入力します。
試しにTripPin Serviceというサンプルサービスのmetadataを見てみましょう。
https://services.odata.org/TripPinRESTierService/(S(jiypl3wubcokjjg4zf40jtvx))/$metadata
なんだかびっしり書かれていてわかりづらいですね。
それもそのはず、機械が読めるように記述してあるのですから。
あと、TripPin Serviceで利用可能なインターフェースがすべて書いてあるので、大量になっています。
ここでは、Personに関係する部分について、少し詳しく見てみましょう。
※個々の要素の使い方については私もまだわかっていないので、metadataの構成要素がここにあるなあ、というのを確認する程度です。
PersonというEntity TypeはUserNameがキーになっています。このほかにFirstName, LastNameなどの属性を持っています。
一番下にNavigation Propertyとして、FriendsとBestFriendへのリンクを持っています。Friendsは友達のリスト、BestFriendは一人だけの親友につながっています。(Tripsについては割愛)
スクロールダウンすると、GetPersonWithMostFriendsというファンクションがあります。このファンクションはPerson型の1件のデータを返すようです。
一番下までスクロールすると、EntityContainerというタグがあります。
この中にEntity Setが定義されています。
Person型のEntity Setとして、Peopleが定義されています。(複数形になっていることに注意)
PeopleはNavigationPropertyBindingとして、Friends, BestFriendなどを持っています。
その下にFunctionImportとして、上で定義されいてたファンクション"GetPersonWithMostFriends"が載っています。
どうやらファンクションを使えるようにするには、FunctionImportにも記載する必要があるようです。
ブラウザからEntity Setを取得してみる
実際のデータはどのようになっているのでしょうか。
ブラウザから<サービスURL>/<Entity Set>
と入力すると、Entity Setの中身を見ることができます。
以下のように入力してみます。
https://services.odata.org/TripPinRESTierService/(S(jiypl3wubcokjjg4zf40jtvx))/People
文字が詰まっていて見づらいですが、Peopleの中身を見ることができます。
2019/1/2追記
Chromeの場合、拡張機能のJSON Formatterを入れると見やすい形で表示されます。
参考:http://www.atmarkit.co.jp/ait/articles/1611/09/news036.html
まとめ
- ODataを構成する要素には、Entity Type, Entity, Entity Set, Navigation propertyなどがある
- どのようなEntityが使えるかは、metadataに記載されている
- metadataは
<サービスURL>$metadata
で見ることができる
##参考
OData Version 4.0. Part 1: Protocol Plus Errata 03