はじめに
SAPUI5でアプリケーションを作るにあたり、ODataは避けては通れないトピックです。
結構広いテーマなので、5~7回くらいに分けて書きたいと思います。
1回目はODataの概要について説明します。
ODataとは
OData(Open Data Protocol)とは簡単に言えば、HTTPを使ってサーバとブラウザでデータをやり取りするためのプロトコルです。
Microsoftが作った仕組みで、それをSAPでも利用しています。
イメージ
ODataのベースとなる考え方
ODataは"REST"の考え方がベースとなっています。
REST(REpresentational State Transfer)とは、Webサービスにおけるアーキテクチャのスタイルの一つです。
対象のリソースをURIで指定し、HTTPメソッド(GET, POSTなど)によって操作します。
OData – Everything that you need to know (Part 2)より引用
Representationとは
RepresentationとはURIによって指定されたリソースまたはその一部です。
たとえばPersonというリソースがあり、その人の連絡先情報を取得するODataサービスがあるとします。この場合、氏名、住所、電話番号などがRepresentationとなります。
RESTful APIとは
RESTful APIとは、RESTの6つの原則に従って作られたAPIのことです。
6つの原則
Client-Server | クライアト・サーバー型であること(データの格納場所とユーザインターフェースを分離するため) |
Stateless | クライアントからサーバへのリクエストは、サーバがリクエストを理解するのに必要な情報をすべて含むこと。サーバ側にクライアントの情報は保存しない |
Cacheable | サーバからのレスポンスには、明示的あるいは暗黙的にキャッシュの可否が示されること |
Uniform Interface | コンポーネント間で統一されたインターフェースを使用すること。このために、リソースの特定方法(URI)、操作方法(HTTPメソッド)などの決まりがある。 |
Layered System | レイヤー構成を可能にすること。クライアントはサーバではなく中間レイヤーと通信する場合もあるが、何とやり取りをしているかを意識する必要はない |
Code on Demand | サーバから送信されたコードをクライアントで実行することで、クライアント側の機能を一時的に拡張できるこ |
ODataの特徴
ODataには次のような特徴があります。
- URIを使ってデータを読み書きする
- 言語に依存せずに利用できる
- JSONまたはXML形式でレスポンスを返す
1. URIを使ってデータを読み書きする
URI(Uniform Resource Identifier)とは、その名の通りインターネット上のリソースを一意に特定するための名前、または場所、またはその両方のことを指します。(ちなみに、URLもURIの一部です)
ODataにアクセスする際は、以下のようにURIを指定します。
OData Version 4.0 Part 2: URL ConventionsInformation published on non-SAP siteより引用
ひとまず、「URLのような形式でデータの取得や更新ができる」という理解で十分だと思います。
2. 言語に依存せずに利用できる
ODataはHTTPをベースとした仕組みなのでクライアント側、サーバ側とも言語の制約がありません。(HTTPリクエスト、レスポンスを作れればよい)
参考までにODataの公式リファレンスには、HTTP, C#, JavaScript, C++, Node.jsのサンプルがあります。
3. JSONまたはXML形式でレスポンスを返す
ODataのレスポンスの形式はJSON、またはXML形式です。
どのようなデータ形式で欲しいかはリクエストで指定します。
まとめ
- ODataはRESTの考え方をもとに作られている
- URIを指定してリソースを操作する
- どのような言語でも使え、レスポンスはJSONまたはXML
参考
OData – Everything that you need to know (Part 1)
OData – Everything that you need to know (Part 2)
OData – Everything that you need to know (Part 3)
OData and SAP Netweaver Gateway. Part I. Introduction
RESTとは何か
Architectural Styles and the Design of Network-based Software Architectures