#この記事について
■ 対象:IT初心者しょぼん君:(´・ω・`)
・初心者向け、イメージを掴むキッカケになることが目的の記事
・砕いた理解で、一部正確ではない場合があります。
■ しょぼん君のぼやき
しょぼん君:(´・ω・`)『Restってよく聞くよね』
#RESTとは
チームで会話していると「RESTで ~...」などと耳にしたことがあるかもしれませんが。RESTとは設計原則、モデルです。
もう少し砕いた言い方をすると、型です。
食パンの型に生地を入れて焼くから食パンと呼ぶように、RESTの型で作成したAPIが、RESTful APIと呼ばれています。
しょぼん君:(´・ω・`)『みんなRESTで〜、、と言うけどね』
RESTの設計原則としては、以下4つがよく紹介されます。
1.セッションなど、状態管理を行わず、やり取りされる情報はそれ自体で完結して解釈することができること
2.HTTPメソッドなど、情報を操作する命令の体系が予め定義・共有されていること
3.すべての情報は、汎URLなどの汎用的な構文で一意に識別されること
4.情報の一部として、HTMLなど別の状態や別の情報への参照を含めることができること
実際にRESTのAPIを見てみましょう。
そもそもAPIってなんぞや。という話は少し本質と逸れるので、ここでは、パシリぐらいに思っておきましょう。
しょぼん君:(´・ω・`)『焼きそばパン買ってこいよぉ〜』
例えばQiitaのAPIを例にしますが、ブラウザから以下のURLにアクセスすることでリクエストしたデータを確認することが出来ます。
https://qiita.com/api/v2/items?page=1&per_page=2
これはAPI(パシリ)に、データを取ってくるようにブラウザ側から依頼ししたことになりますが
上の4つの設計原則に当てはめていうと、Qiitaのサーバー上にある情報を、URLなどの汎用的な構文で一意に識別し、あらかじめ操作する命令が定義されているHTTPSメソッドで状態管理などは行わずに、データを取得した。という具合ことになります。
しょぼん君:(´・ω・`)『URLの先頭ではプロトコルを指定しているのだね。』
##HTTP/HTTPS
実際に、ブラウザでどんなことが行われるのか確認してみます。
せっかくなので、今回はcurlコマンドの練習もしてみます。
ブラウザでやっていることと変わらず、画面で表示を確認するかターミナルで確認するかという違いです。curlコマンドはターミナルから実行して、サーバとのデータ転送を行うコマンドです。データをターミナルに表示させます。
先ほどと同じURL (https://qiita.com/api/v2/items?page=1&per_page=2) をcurlで取得してみましょう。同じ結果が得られるはずです。
$ curl -X GET -v https://qiita.com/api/v2/items?page=1&per_page=2
オプション説明
-X:明示的にリクエストメソッドを指定。今回はGETメソッドを指定しています。
-v:HTTP通信の詳細を出力。デバック
しょぼん君:(´・ω・`)『ほぉー、じゃあブラウザでもメソッドを指定していたの?』
メソッドには GET や POST などがありますが、ブラウザから取得した際も、実はURLは GET https://qiita.com/api/v2/items?page=1&per_page=2 となっていました。
###HTTP と HTTPS
このように、URLの戦闘ではプロトコルを指定しています。
社内ページなどでは、http://から始めるページも目にすることもあるかと思いますが、これらの主な違いは 通信が暗号化されているかどうか です。
例えば、サイトにログインする際にパスワードなどを入力するとして、暗号化されていないHTTPメソッドでは、送信情報がむき出しのまま通信の中を歩き回ってしまうことになります。これでは危険なので、暗号化された通信ではそれらを、すぐには特定できないように変換しています。
しょぼん君:(´・ω・`)『暗号化されているから安心。という訳ではないけど、一つの確認ポイントではあるね』
##PathパラメーターとQueryパラメーター
しょぼん君:(´・ω・`)『RESTful API ではプロトコルとメソッドを指定して、データのやり取りを行なっていることはわかった。URLの後ろのゴニョゴニョはなんなの。』
後ろで指定しているものはパラメーターで、PathパラメーターとQueryパラメーターの2種類があります。
先ほどから例にしているこちらのURL https://qiita.com/api/v2/items?page=1&per_page=2 ですが、この構成を見てみましょう。
Pathパラメーター
の部分では、取得対象を識別するために必要な情報を指定します。
しょぼん君:(´・ω・`)『itemsから探してくださーい!と対象を指定していて』
Queryパラメーター
の部分では、取得対象を操作する際に必要な情報を指定します。上の例では、ページ番号を表すpageパラメータと、1ページあたりに含まれる要素数を表すper_pageパラメーターを指定しています。Queryパラメータを複数指定する際は & を用います。
しょぼん君:(´・ω・`)『ページは1で、要素の数は2個でおなしゃす!という条件で絞り込んでいるのだな』
ここまでで RESTful API がどういったもので、どう利用するのかを見てきました。
基本編はここまでです。RESTful API を利用するコーディングでは上記のような形でデータを取得し活用します。
〜 END ~