REST APIとは何か?をできる限りわかりやすく説明したい | 瀬戸内の雲のように

REST APIとは何か?をできる限りわかりやすく説明したい

Posted: 2019-01-15


スポンサーリンク

目次

はじめに

前回の記事: APIとは何か?をできる限りわかりやすく説明したいではAPIそのものの説明をしました。
今回はAPIの形式の一つである REST API について説明したいと思います。

なお、今回の記事も初心者エンジニアが対象です。(少し技術的な用語を使って説明します)

 

読み方

まずはじめに読み方から。 RESTと書いて レスト と読みます。 REpresentational State Transfer の略だそうです。

 

RESTとは

システムの設計原則(設計の考え方)の一つです。元々はAPIに限らずウェブ全体に適用するための考え方です。
このRESTの考え方に従って設計されたAPIを REST API と言います。

ちなみにこのRESTという考え方は Roy Fielding という方が2000年に発表した論文で初めて提唱されたものだそうです。

論文の原文は こちら ですので、興味がある方は見て頂ければと。

 

REST と RESTful の違いは

RESTについて調べると、必ず RESTful という言葉も出てくるかと思います。
これは一言でいうと RESTなAPI、つまり REST原則に則って作られたAPI という意味だそうで、実際の現場ではRESTとRESTfulは同じ意味で使われているように思います。

 

RESTの定義とは

それでは、RESTとはどういう定義なのかを説明していきます。

厳密なRESTの定義

まずは論文で提唱されている定義です。論文にはRESTを実現するためには以下7点の制約を満たす必要があると書かれています。
論文はこちら(英語です)

  • クライアント・サーバの構成であること
  • ステートレスであること
  • キャッシュを備えていること
  • 統一的なインターフェイスであること
  • 階層化されたシステムで構成されていること
  • コードオンデマンド(プログラムをクライアント側で実行する方式。javascriptなど)であること

 
いかがでしょうか。
私は正直に言ってこれを見てもどんなものなのかさっぱりイメージできません。。

上記は厳密かつ古い(約20年前の)定義であり、現状のウェブシステムでは当たり前のようなことまで書かれており、REST APIを理解するための説明としては少しわかりづらくなっているかもしれません。
(クライアント・サーバであることやキャッシュなど)

 

一般的なRESTの特徴(主観)

ということで、理解を助けるためにより現実的なREST APIの特徴を説明したいと思います。
※大きくズレてはないと思いますが、私の主観的な内容ですのでご留意を。

 

REST APIの特徴

  • URI(HTTPのパス)が名詞形であること(動詞を含まないこと)
  • リソース(操作対象のもの)の操作(作成/閲覧/変更/削除)をHTTPのメソッドにより指定できること
  • レスポンス形式がjsonもしくはXMLであること

  
先程の厳密な定義よりは具体的になったでしょうか。
しかしこの説明だけでは、まだぼんやりしているかもしれません。具体例を交えて説明します。

 

REST APIの例

今回は、ユーザーを管理するAPIを例に上げたいと思います。

やりたいこと URL HTTPのメソッド
ユーザ一覧確認 https://APIサーバのホスト名/users GET
ユーザ新規登録 https://APIサーバのホスト名/users POST
ユーザ変更 https://APIサーバのホスト名/users/ユーザID PUT
ユーザ削除 https://APIサーバのホスト名/users/ユーザID DELETE

詳細を説明する前に、比較のため RESTではないAPIの例も出してみます。

 

RESTではないAPIの例

やりたいこと URL HTTPのメソッド
ユーザ一覧確認 https://APIサーバのホスト名/get_users GET
ユーザ新規登録 https://APIサーバのホスト名/create_user GET
ユーザ変更 https://APIサーバのホスト名/modify_users GET
ユーザ削除 https://APIサーバのホスト名/delete_users GET

いかがでしょうか。違いがわかりましたでしょうか。

 

改めてREST APIの特徴

具体例を見たところで、改めて特徴について解説していきます。

 

URI(HTTPのパス)が名詞形であること(動詞を含まないこと)

これは、先程の例で言えばREST APIの場合、URIは /users、 非RESTの場合は /get_users のようになっていました。
このように URIが名詞形だけであること がREST APIの特徴です。

一方、疑問が浮かんだ方もいらっしゃるかと思います。

「一つのURIしかないのに、どうやって作ったり消したりするの?RESTじゃないほうは get とか delete って書いてあってわかりやすいのに。。」

といった疑問です。その答えは次の特徴にあります。

 

リソースの操作をHTTPのメソッドにより指定できること

先程の疑問には HTTPのメソッドを変えることで作る、消すなどの操作を変える というのが回答となります。
つまり、同じURLにアクセスした場合でも、HTTPのメソッドが違うと異なる動作をするということです。
(ちなみにHTTPのメソッドというのは、HTTPのリクエストに含めることができる情報の一つです。)

 
具体的に言うと、

GETメソッドでアクセスする -> ユーザ一覧を返す
POSTメソッドでアクセスする -> ユーザを新規作成する

のように動作します。具体例としてcurlコマンドで言うと、

# ユーザ一覧取得
curl -X GET https://サーバのAPI/users

# ユーザ新規作成
curl -X POST https://サーバのAPI/users

のようになります。

 
ちなみに各メソッドと動作の関係ですが、一般的には先程説明したように

メソッド 動作 (参考)SQLでの動作名
GET リソース情報の取得 select
POST リソース新規作成 insert
PUT/PATCH リソース更新 update
DELETE リソース削除 delete

のようにメソッド割り当てられています。

 

レスポンス形式がjsonもしくはXMLであること

これは書いてあるまんまなのですが、サーバからのレスポンスがjsonかXML形式で返ってくることです。
ちなみに私の経験では、最近のウェブAPIはほとんどjsonになっていると思います。(XMLはあまり見ない)

 

まとめ

以上、REST APIとは をできる限りわかりやすく説明してみました。
この記事を書くにあたりいろいろ調べてみてはいますが、誤り等がございましたらコメント頂ければと思います。

 

参考文献

https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
http://restcookbook.com/Basics/codeondemand/
http://blog.sojiro.me/blog/2014/09/14/what-is-rest/


スポンサーリンク




コメント一覧


コメントを投稿する


お名前


コメント内容





TOP back