Restful APIについてまとめてみた

#目次
- 概要
- RESTとは？
- サーバー、クライアントとは？
- http,httpsについて
- リクエストメソッドについて
- パラメータについて
- bodyについて
- httpメソッドにおけるheader, bodyの違いについて
- text, JSON, xmlの違いと使い所について
- パースについて
- 参考記事


#概要
APIについて、現時点で学んだことについて備忘録として纏めておきます。
#そもそも、Restful APIって何？
Restful APIとは、Webシステムを外部から利用するためのプログラムの呼び出し規約（API）の種類の一つで、「REST」（レスト）と呼ばれる設計原則に従って策定されたもので、RESTの考え方をWeb APIに適用したものの一般的な名称です。

#RESTとは？
REST（Representational State Transfer）は、2000年にロイ・フィールディング（Roy Fielding）氏が提唱した設計原則のことで、
①セッションなどの状態管理を行わず、
やり取りされる情報はそれ自体で完結して解釈することができる
②情報を操作する命令の体系が予め定義・共有されている
③すべての情報は汎用的な構文で一意に識別される
④情報の一部として、別の状態や別の情報への参照を含めることができる
の4つの項目で成り立っています。
#サーバー、クライアントとは？
サーバーとは、クライアントからの依頼を受け取り、サービスを提供するコンピュータやソフト、機能やデータのこと。
クライアントとは、サーバを利用するコンピュータのことで、
ユーザとやり取りを行って、ユーザの代わりにサーバに問い合わせる。

#http,httpsについて
まず、httpとは Hyper Text Transfer Protocolの略称で、
スマホやパソコンとサーバがやりとりを行う通信のことです。
では、httpとhttpsの違いはなんなのか？
ここで、httpsの中のsとはどんな意味を持つのか調べてみたところ、
sはsecureのsです。
これがわかるとイメージしやすいと思うんですが、
httpはデータが暗号化されていない通信で、通信が簡単に漏洩してしまいます。
それに対してhttpsは、データがしっかり暗号化された通信のことなので、
httpのセキュリティを強化したもの
といったイメージです。なので現在アプリにAPIを利用する際には、主にhttpsを使います。

#リクエストメソッドについて
リクエストメソッドとは、WebブラウザなどからURL形式で、
データのやり取りなどの指令を、役割ごとにわかりやすく定義したもので、
①GET (=参照, 指示した人の手元にデータを使えるようにデータを持ってくる。)
②POST (=新規作成, 新規作成したい情報のデータを追加で送信。)
③PUT (=更新, すでに存在しているデータを上書き、送信。)
④PATCH (=一部更新, PUTとは別で、一部更新に用いる。更新の対象や更新内容の情報を追加で送信)
の４つがあります。

#パラメータについて
パラメータには、パスパラメータとクエリパラメータがあって、
パスパラメータには、特定のリソースを識別するための情報を入れます。
一方クエリパラメータには、特定のリソースを操作し取得する際に必要な情報を入れます。
例えば、昇順降順や検索、フィルタなどに関する条件などです。
URLがあるとしたら、
```https.パスパラメータ.クエリパラメータ```
のように、前方にパスパラメータ、後方にクエリパラメータを書きます。

#bodyについて
クライアント (ブラウザなど) からAPIにデータを送信する必要があるとき、データをリクエストボディとして送ります。
リクエストボディはクライアントによってAPIへ送られるデータのことです。
また、レスポンスボディはAPIがクライアントに送るデータです。
APIはほとんどの場合,レスポンスボディを送らなければなりませんが、クライアントは必ずしもリクエストボディを送らなければいけないわけではありません。

#httpメソッドにおけるheader, bodyの違いについて
headerにはリクエスト、レスポンスの詳細情報について書かれています。
それに対してbodyには、画面での入力内容が入っています。

#text, JSON, xmlの違いと使い所について
text形式は、

```日本語,英語
"ぶどう", "grape"
"りんご", "apple"
```
のように、普通の文字を改行やスペースなどで区切り、サーバー側やクライアントで処理を行ってブラウザ上での表示を行うもので、サイズとしては小さく済むのですが、サーバー側での処理プログラムを作成するコストが大きく、特殊なケース(データ中に区切り文字が入った場合など)での不具合リスクが高いという問題点もあります。

JSON形式は、

```
[
  {"id" : "1", "name" : "tanaka"},
  {"id" : "2", "name" : "nakata"}
]
```
のように書きます。
JSONは、JavaScript Object Notation の略で、JavaScriptのオブジェクトの書き方を元にしたデータ定義方法のことです。元々はJavaScriptで使われる想定で作成されたデータ構造なので、JavaScriptと非常に相性が良いです。 JSONのフォーマットそのものは特定の言語に依存しない形式になっているので、幅広い言語で使われています。
######用途
　Ajaxでのデータ交換フォーマットとして広く利用されるようになっています。
AjaxはもともとAsynchronous JavaScript + XMLの略で、Webブラウザ上で動作するJavaScriptでサーバからXMLデータを取得し、取得したデータをDHTMLを活用してコンテンツに動的に反映するという手法で、後述のXMLの代わりにJSONが使われています。冗長なXMLと比べて通信時のデータ量を削減できるなどのメリットもあります。

xmlは、Extensible Markup Languageの略称で、

```
<?xml version="1.0" encoding="utf-8"?>
<data>
  <item>
    <日本語>犬</日本語>
    <英語>dog</英語>
  </item>
  <item>
    <日本語>猫</日本語>
    <英語>cat</英語>
  </item>
</data>
```
のように書きます。これはHTMLの記述方法に似ており、タグと呼ばれるもの(例えば\\のようなもの)によってデータを囲み、更にデータを入れて入れ子構造にすることができ、様々なデータを記述することができます。
######用途
処理系による文字化けのリスクはテキストの処理に比べると格段に減らすことができ、
文書内でデータ構造を自由に定義できる汎用性の高さが魅力で、特に情報を正確にやりとりする必要性がある場合に使います。ただ、構造が分かり易いなどの利点もありますが、コードの量が冗長になりやすい、というデメリットもあるので、JSONとxmlで場合によって使い分ける必要があります。

#パースについて
パースとは、コンピュータプログラムの機能,処理の一つで、
一定の書式や文法に従って記述されたデータを解析し、
プログラムで扱えるようなデータ構造の集合体に変換することです。

#参考文献
https://securitynews.so-net.ne.jp/topics/sec_20051.html

https://qiita.com/morikuma709/items/956d7c58908cb481d7e8#:~:text=HTTP%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A8%E3%81%AF,%E3%82%84%E3%81%99%E3%81%8F%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82

https://qiita.com/Shokorep/items/b7697a146cbb1c3e9f0b

https://sitest.jp/blog/?p=12271

https://e-words.jp/w/RESTful_API.html