【SAPUI5】OData(1) ODataとは

##はじめに
SAPUI5でアプリケーションを作るにあたり、ODataは避けては通れないトピックです。
結構広いテーマなので、5～7回くらいに分けて書きたいと思います。
1回目はODataの概要について説明します。

**予定**
1. OData(1) ODataとは
2. [OData(2) ODataを構成するもの](https://qiita.com/tami/items/4853415fdc826158618d)
3. [OData(3) ODataのQuery optionを使ってみる](https://qiita.com/tami/items/181cabc4cd8c51ce87b2)
4. [OData(4) SAPでのODataサービスの作り方 環境編](https://qiita.com/tami/items/a87a6f67be928c78e4e8)
5. [OData(5) SAPでのODataサービスの作り方 開発編-1](https://qiita.com/tami/items/f49a4a6be1ffd83cc87c)
6. [OData(6) SAPでのODataサービスの作り方 開発編-2](https://qiita.com/tami/items/81dd4e185ffbc42113fa)
7. [OData(7) ODataを使ったSAPUI5アプリケーションの作り方 準備編](https://qiita.com/tami/items/510a28655ee1af6254ea)
8. [OData(8) ODataを使ったSAPUI5アプリケーションの作り方 開発編-1](https://qiita.com/tami/items/3990f98f5cb10818be52)
9. [OData(9) ODataを使ったSAPUI5アプリケーションの作り方 開発編-2](https://qiita.com/tami/items/bdbd8774ea9527ea6790)

##ODataとは
OData(Open Data Protocol)とは簡単に言えば、HTTPを使ってサーバとブラウザでデータをやり取りするためのプロトコルです。
Microsoftが作った仕組みで、それをSAPでも利用しています。

イメージ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/8da8b4bf-524a-4fc6-a392-4e6ce7368950.png)


##ODataのベースとなる考え方
ODataは"REST"の考え方がベースとなっています。
REST(REpresentational State Transfer)とは、Webサービスにおけるアーキテクチャのスタイルの一つです。
対象のリソースをURIで指定し、HTTPメソッド(GET, POSTなど)によって操作します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/ee7e7e52-750f-8eba-94a2-88296745e269.png)
[OData – Everything that you need to know (Part 2)](https://blogs.sap.com/2016/02/08/odata-everything-that-you-need-to-know-part-2/)より引用

###Representationとは
RepresentationとはURIによって指定されたリソースまたはその一部です。
たとえばPersonというリソースがあり、その人の連絡先情報を取得するODataサービスがあるとします。この場合、氏名、住所、電話番号などがRepresentationとなります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/2e80018a-dc5c-7d8b-cc08-98befd938f1f.png)

###RESTful APIとは
RESTful APIとは、RESTの6つの原則に従って作られたAPIのことです。

**6つの原則**

|原則  |説明  |
|---|---|
|Client-Server|クライアト・サーバー型であること（データの格納場所とユーザインターフェースを分離するため）  |
|Stateless|クライアントからサーバへのリクエストは、サーバがリクエストを理解するのに必要な情報をすべて含むこと。サーバ側にクライアントの情報は保存しない|
|Cacheable|サーバからのレスポンスには、明示的あるいは暗黙的にキャッシュの可否が示されること|
|Uniform Interface|コンポーネント間で統一されたインターフェースを使用すること。このために、リソースの特定方法(URI)、操作方法(HTTPメソッド)などの決まりがある。|
|Layered System|レイヤー構成を可能にすること。クライアントはサーバではなく中間レイヤーと通信する場合もあるが、何とやり取りをしているかを意識する必要はない|
|Code on Demand|サーバから送信されたコードをクライアントで実行することで、クライアント側の機能を一時的に拡張できるこ|

##ODataの特徴
ODataには次のような特徴があります。

1. URIを使ってデータを読み書きする
2. 言語に依存せずに利用できる
3. JSONまたはXML形式でレスポンスを返す

###1. URIを使ってデータを読み書きする
URI(Uniform Resource Identifier)とは、その名の通りインターネット上のリソースを一意に特定するための名前、または場所、またはその両方のことを指します。（ちなみに、URLもURIの一部です）
ODataにアクセスする際は、以下のようにURIを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/cbe605f8-f811-629e-dc04-424a1c19a13e.png)
[OData Version 4.0 Part 2: URL ConventionsInformation published on non-SAP site](http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc453752335)より引用

ひとまず、「URLのような形式でデータの取得や更新ができる」という理解で十分だと思います。

###2. 言語に依存せずに利用できる
ODataはHTTPをベースとした仕組みなのでクライアント側、サーバ側とも言語の制約がありません。（HTTPリクエスト、レスポンスを作れればよい）
参考までにODataの[公式リファレンス](https://www.odata.org/getting-started/understand-odata-in-6-steps/)には、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)](https://blogs.sap.com/2016/02/08/odata-everything-that-you-need-to-know-part-1/)
[OData – Everything that you need to know (Part 2)](https://blogs.sap.com/2016/02/08/odata-everything-that-you-need-to-know-part-2/)
[OData – Everything that you need to know (Part 3)](https://blogs.sap.com/2016/02/08/odata-everything-that-you-need-to-know-part-3/)
[OData and SAP Netweaver Gateway. Part I. Introduction](http://www.sapyard.com/odata-and-sap-netweaver-gateway-part-i-introduction/)
[RESTとは何か](https://qiita.com/aosho235/items/125af74e2eab66c7a816)
[Architectural Styles and the Design of Network-based Software Architectures](https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm)