RESTful APIについて
RESTとは
「REpresentational State Transfer」の略で分散型システムを構築するための考え方
RESTの考え方に従って設計されたAPIをREST APIと言う
”RESTful APIはただのルール” と考えると良い!
イメージ図↓
Q.RESTとRESTful APIの違いは何?
A.RESTの原則に従って作られたAPIと言う意味でRESTとRESTfulは同じ意味で使われている。
ファイルのイメージ↓
Model→リソース
Controller→Modelを動かす(GET,PUTなどで)
1.RESTの特徴
1)Uniform(ユニフォーム・インターフェース)
情報の操作(取得、作成、更新、削除)は全てHTTPメソッド(GET、POST、PUT、DELETE)を利用すること
2)Stateless(ステートレス)
HTTPをベースにしたステートレスなクライアント/サーバプロトコルであること。セッション等の状態管理はせず、やり取りされる情報はそれ自体で完結して解釈できること
3)Cacheable(キャッシュ可能)
4)Self-descriptiveness(自己表現構造)
REST APIメッセージだけ見ても簡単に理解できる独自の表現構造になっている
5)Client – Server構造
RESTサーバーはAPIを提供し、クライアントはユーザー認証やコンテキスト(セッション、ログイン情報)などを直接管理する構造になっている。それぞれの役割が確実に区別されており、クライアントとサーバーで開発すべき内容が明確になり、相互依存関係が低減される
6)階層型構造
2.REST APIの規則
1)URLはリソースを表現しなければならない(リソース名は動詞ではなく、名詞を使用)
✖️ PUT /boards/create/1
上記のような方式は、RESTを正しく適用していないURIで、URLはリソースを表現することに重点を置かないといけない。createのような操作の表現が入らないようにする。
2)リソースの操作は、HTTPメソッド(GET、POST、PUT、DELETEなど)で表現する
1)の例を、HTTPメソッドで変更すると下記のようになる。
PUT /boards/1
会員情報を読み込む際はGET、会員情報を追加したい場合はPOSTメソッドを使って表現する。
//会員情報の取得
✖️ GET /members/show/1
○ GET /members/1
//会員情報の追加
✖️ GET /members/insert/2 - GETメソッドはリソースの生成に適さない
○ POST /members/2
3.HTTPメソッドの適切な役割(ここが重要!)
POST、GET、PUT、DELETE、4つのメソッドを使ってCRUD(Create,Read,Update,Delete)できる。
メソッド | 内容 |
---|---|
POST | 対応するURLをリクエストし、リソースを作成する |
GET | リソースを照会して、当該ドキュメントの詳細情報を取得する |
PUT | 当該リソースを変更する |
DELETE | リソースを削除する |
URIはリソースの表現に集中して、操作の定義はHTTPメソッドを使って処理する
4.URI設計時の注意点
1)スラッシュ区切り記号(/)は、階層関係を表すのに使用する
http://example.com/boards/name
↑上記で言えば、boardsの下の階層にあるname
2)URIの最後の文字にスラッシュ(/)を含めない
URLに含まれるすべての文字は、リソースの唯一の識別子として使用する。
REST APIは、明確なURLを作成して通信する必要があるため、混同しないようにURLパスの最後にスラッシュ(/)を使用してはいけない。
✖️ http://example.com/boards/name/
○ http://example.com/boards/name
3)ハイフン( – )は、URI可読性を高めるために使用
URIを簡単に読み取って解釈できるように、止むを得ず長いURIパスを使用する場合は、ハイフンを使って可読性を高める。
4)アンダースコア(_)は、URIに使用しない
下線は表示が難しかったり、下線によって文字が隠れたりすることがあったりするため、このような問題を回避するために、アンダースコアの代わりにハイフン( – )の使用が推奨される。
5)URIパスは小文字が適している
大文字と小文字に基づいて別のリソースとして認識してしまうため、URIパスに大文字を使うのは避ける。RFC 3986(URI文法形式)は、URIスキームとホストを除き、大文字と小文字を区別するように規定している。
RFC 3986 is the URI (Unified Resource Identifier) Syntax document
6)ファイルの拡張子は、URLに含めない
✖️ http://restapi.example.com/members/soccer/345/photo.jpg
REST APIは、メッセージ内容のフォーマットを表すファイルの拡張子をURLの中に含めない。
GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg
5.HTTPステータスコード
ステータスコード | 内容 |
---|---|
200 | クライアントのリクエストを正常に遂行 |
201 |
ステータスコード | 内容 |
---|---|
400 | クライアントのリクエストが不十分な場合に使用するコード |
401 | クライアントが認証されていない状態で保護されたリソースをリクエストしたときに使用するコード |
403 | ユーザー認証の状態に関わらず、応答したくないリソースをクライアントがリクエストしたときに使用するコード(403より400や404の使用を推奨) |
405 | クライアントがリクエストしたリソースが、使用できないメソッドを用いた場合に使用するコード |
ステータスコード | 内容 |
---|---|
301 | クライアントがリクエストしたリソースのURIが変更されたときに使用するコード(応答時、Location headerに変更されたURIを書かなければならない) |
500 | サーバーに問題がある場合に使用するコード |
[参考] RESTなAPIを作る上でのルール
①ひと目でAPIと分かるようなURLにする
②URLにAPIのバージョンを含める
③URLに動詞を含めず、複数形の名詞のみで構成する→下で説明
④アプリケーションや言語に依存する拡張子は含めない
⑤リソースの関係性がひと目で分かるようにする
⑥長くしすぎない
ルール③ URLに動詞を含めず、複数形の名詞のみで構成する
REST APIにおいてはリソースに対し一つのURLを割り当てていくことがポイント
//好ましくないURL
http://api.example.com/v1/createArticle
http://api.example.com/v1/article/create
http://api.example.com/v1/article/126/create
http://api.example.com/v1/article/createComment
http://api.example.com/v1/article/126/comment/10/create
上記の問題点
1.リソースに対して一意ではない
2.一つのリソースに対してCRUDの操作が必要になった場合にその操作の分だけURLが増え
てしまう
3.URLが長くなりがち
//複数形の名詞のみの場合(好ましいURLの例)
http://api.example.com/v1/articles article全てを指す
http://api.example.com/v1/articles/126 articlesの中のID:126を指す
http://api.example.com/v1/articles/126/comments
articlesの中のID:126についたcomment全てを指す
http://api.example.com/v1/articles/126/comments/10
articlesの中のID:126についたcommentsの中のID:10を指す
このURLを見ただけで何のリソースなのかが分かり、IDをURLに含めることでリソースごとに一意のURLを割り当てることができている。
名詞を複数形にすることで全てのリソース(複数)を指す場合と、全てのリソース(複数)の中からIDを指定している場合を表現することができ、表現に一貫性を持たせることができる。
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 |
参考資料
RestfulなWebAPIの設計(Qiita)
https://qiita.com/kawasukeeee/items/70403129f5a5338cd4ad
RESTful APIとは何なのか(Qiita)
https://qiita.com/NagaokaKenichi/items/0647c30ef596cedf4bf2
Author And Source
この問題について(RESTful APIについて), 我々は、より多くの情報をここで見つけました https://qiita.com/mayu_w1223/items/43508b86cbccc1564734著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .