ODataって何? ODataは正式名称を”Open Data Protocol”と言って、RESTfulなWebAPI(Webサービス)プロトコルです。Microsoft主導で策定されたものですが、OASISとISOで標準化されています。 APIマネジメントとか、APIエコノミーといったキーワードが飛び交う昨今、今後重要になるものと考えています。 『RESTful』とは、簡単に言って以下の四つの原則を持つということです。 (詳細は別記事に譲ります) •Addressability → どのデータも一意なURI表現が可能 •Stateless → セッションの状態管理(ECサイトのカート等)などに依存しない •Connectability → 情報と情報をリンクさせることができる •Uniform Interface → 情報の操作はHTTPメソッド(GET,POST,PUT,DELETE..)を利用 データの取得 触ってみるには、ODataのサイトを訪れてみます。 Developersタブの”Reference Service”をクリックすると、サンプル利用できるODataサービスの紹介ページが表示されます。 2017年7月現在、最新仕様バージョンはv4でサンプルは一つだけですが、v2,v3ではいくつかのサンプルが登録されています。 せっかくなのでv4のTripPinサービスにアクセスしてみましょう。 英語ですが、基本的な使い方(Basic Usage)がこのページに記載されているので記載されているURLにアクセスすればすぐ結果が表示されます。 または、Developersタブの”Getting Started”からUnderstand OData in 6stepsというチュートリアルのようなものが用意されています。 (全ページ英語ですが、最近はGoogle翻訳の性能が向上しているので苦にならないですよね!笑) メタデータ ODataでは、提供されるサービスのメタデータを参照することができます。 ODataサービスのURLに”$metadata”と付与するだけです。 http://services.odata.org/TripPinRESTierService/$metadata 1 http://services.odata.org/TripPinRESTierService/$metadata ODataのメタデータ(≒関連情報)には、ODataサービスで取得できるデータの構造や関係性、特殊な呼び出しが必要なAPIなどの情報がXML形式で記載されています。 以下、上記URLで表示されるメタデータのXMLタグを順に見てみましょう。 1 2 3 一行目に、これから記載するXMLのスキーマ(≒記述ルール)を宣言しています。ODataのv4ですね。 Edmxは”Entity Data Model”+XML(Schema)の頭文字と思われます。 DataServicesでODataサービス本体の宣言を、Schemaでこれから記載するODataサービス構造の概念であること、各種オブジェクトの名前空間(名称領域)をNamespaceで定義しています。 (各種オブジェクトは同名オブジェクトの取り違えを避けるため “Microsoft.OData.Service.Sample.TrippinInMemory.Models”という名前で修飾されます) (中略) 1 2 3 4 5 6 7 8 (中略) EntityTypeはオブジェクトの構造の宣言で、SQLで言えばテーブル定義のようなものです。 Keyは主キーを、Propertyでオブジェクトのメンバ定義、NavigationPropertyは別の構造をメンバとして持つことの宣言となります。 ここではTripという名前(”~Models.”までは名前空間)でのコレクションを持つということです。 (PropertyRefは、Propertyで定義したメンバの参照を示します) (中略) 1 2 3 4 5 6 7 8 9 10 (中略) 通常、メンバの型はEDMであらかじめ定義されたもの(例…文字列型:Edm.String/数値型:Edm.Int32 etc)を使用しますが、ComplexType宣言を使用して複数の型の組み合わせ構造を定義したり、EnumTypeを指定してとり得る値をあらかじめ決めてしまうことができます。ここではLocationという”住所データ”の構造をComplexTypeで定義し、人や空港のメンバとして複数個所で利用しています。Cityは更なる別構造の参照です。またPersonGender=性別という列挙型を定義し、規定値以外が入らないように定義しています。 1 2 3 これまではこのODataサービスの中で扱うデータなどの構造の定義でしたが、EntityContainerタグ内は実際にAPIとして利用するために、サービスの下にURLとして指定するための定義となります。 EntitySetは、EntityTypeで定義した構造を持つデータのコレクションを定義するもので、 データ構造の名前が”Person”であったところ、コレクションでは”People”(複数形)となっていることがわかります。 内部でバインドされた別エンティティのコレクションの参照名も”Friends”(構造はPersonと同じ)となっています。 このように、XMLを見慣れない人には理解しづらいかも知れませんが、 一つ一つ紐解いていけばODataで何を定義されているのかがわかります。 クライアントツール 基本的にデータの読み出しだけであれば、通常のWebブラウザのアドレス欄だけで事足りますが、 ODataはデータの読み出し(=READ)だけでなく更新(=CREATE/UPDATE/DELETE)も可能です。 今回参照したODataサービス(TripPin)も読み書き可能なのですが、更新APIのテストにはRESTクライアントツールが便利です。 odata.orgではPOSTMANというツールを推奨しているようです。 Windowsにインストールするソフトウェアとしても存在しますが、WebブラウザにChromeを使用している場合、ブラウザのアドオン(Chromeアプリ)としてインストールすることが可能です。 是非インストールしてOData(WebAPI)に慣れ親しんでくださいね。 (余談ですが、GoogleはWindowsのChromeアプリ追加機能を2018年までに段階的に終了させるそうです。Windowsでの開発者は困りますよね。。。)