スポンサーリンク
前回の記事: APIとは何か?をできる限りわかりやすく説明したいではAPIそのものの説明をしました。
今回はAPIの形式の一つである REST API について説明したいと思います。
なお、今回の記事も初心者エンジニアが対象です。(少し技術的な用語を使って説明します)
まずはじめに読み方から。 RESTと書いて レスト
と読みます。 REpresentational State Transfer
の略だそうです。
システムの設計原則(設計の考え方)の一つです。元々はAPIに限らずウェブ全体に適用するための考え方です。
このRESTの考え方に従って設計されたAPIを REST API
と言います。
ちなみにこのRESTという考え方は Roy Fielding という方が2000年に発表した論文で初めて提唱されたものだそうです。
論文の原文は こちら ですので、興味がある方は見て頂ければと。
RESTについて調べると、必ず RESTful
という言葉も出てくるかと思います。
これは一言でいうと RESTなAPI
、つまり REST原則に則って作られたAPI
という意味だそうで、実際の現場ではRESTとRESTfulは同じ意味で使われているように思います。
それでは、RESTとはどういう定義なのかを説明していきます。
まずは論文で提唱されている定義です。論文にはRESTを実現するためには以下7点の制約を満たす必要があると書かれています。
論文はこちら(英語です)
いかがでしょうか。
私は正直に言ってこれを見てもどんなものなのかさっぱりイメージできません。。
上記は厳密かつ古い(約20年前の)定義であり、現状のウェブシステムでは当たり前のようなことまで書かれており、REST APIを理解するための説明としては少しわかりづらくなっているかもしれません。
(クライアント・サーバであることやキャッシュなど)
ということで、理解を助けるためにより現実的な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の例も出してみます。
やりたいこと | 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は /users
、 非RESTの場合は /get_users
のようになっていました。
このように URIが名詞形だけであること
がREST APIの特徴です。
一方、疑問が浮かんだ方もいらっしゃるかと思います。
「一つのURIしかないのに、どうやって作ったり消したりするの?RESTじゃないほうは get とか delete って書いてあってわかりやすいのに。。」
といった疑問です。その答えは次の特徴にあります。
先程の疑問には 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形式で返ってくることです。
ちなみに私の経験では、最近のウェブ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/
スポンサーリンク