【れすとえーぴーあい】

REST API とは?

最終更新:
💡 Webの仕組みに沿った「自然な」API

RESTという設計原則に沿って、URLで識別したリソースをHTTPメソッドで操作するAPI。Webサービス間の連携で広く使われている。

📌 このページのポイント
URLでリソースを指定し、HTTPで操作 クライアント ブラウザなど サーバー リソース GET /users/1 200 OK JSONなどの表現 POST:処理・作成 PUT:置換 DELETE:削除 (設計例) 形式やURLの命名慣習だけでRESTとは決まらない
HTTPによる取得の一例。RESTにはステートレスや統一インターフェースなどの制約がある。
ひよこ ひよこ
RESTfulってどういう意味?
ペンギン先生 ペンギン先生
RESTの制約に沿って設計されたAPIのことだよ。①リソースをURLで識別(/users/123)、②表現(JSONなど)をやり取りして操作、③ステートレス(各リクエストが完結)、④キャッシュできるかを応答で示す、⑤統一インターフェース。RESTという名前やHTTPメソッドの使用だけで、これらの制約を満たすとは判断できないよ
ひよこ ひよこ
GraphQLとの違いは?
ペンギン先生 ペンギン先生
REST APIはエンドポイントごとに返すデータの形がほぼ決まっていて、画面によっては不要な項目まで受け取ったり、何度もリクエストしたりすることがあるんだ。GraphQLはクライアントが欲しいフィールドをクエリで指定して、関連データも1回で取得できる。そのぶんスキーマ設計やキャッシュの考え方を学ぶ必要があるよ。シンプルなCRUDならREST、画面ごとに必要なデータが大きく違うならGraphQLも検討する価値があるね
ひよこ ひよこ
REST API設計のベストプラクティスは?
ペンギン先生 ペンギン先生
よく使われる慣習として、①URLは名詞(/users)で、動詞はHTTPメソッドで表現、②コレクションは複数形(/users)、③ネストは浅く(/users/123/posts程度)、④ページネーション(?page=1&limit=20)、⑤バージョニング(/v1/users)、⑥エラーレスポンスにメッセージとエラーコードを含める、があるよ。これはRESTの必須ルールではないから、チーム内で一貫させることが大事。OpenAPIで仕様を文書化するのも役立つよ
ひよこ ひよこ
REST APIのセキュリティは?
ペンギン先生 ペンギン先生
①HTTPSだけで公開、②エンドポイントごとの認証・認可(OAuth 2.0のアクセストークンなど)、③レートリミット(超えたら429 Too Many Requestsを返す)、④入力の型・長さ・範囲の検証、⑤CORSは必要なオリジンだけに絞る。APIキーは利用量の管理には便利だけど、重要なデータを守る手段をAPIキーだけに頼らないのが基本だよ
もっと詳しく知りたい人へ

PUTとPOSTはどう使い分けるの?同じリクエストを再送しても大丈夫?

HTTPの仕様では、PUTとDELETEは同じリクエストを何回送っても意図する結果が1回と同じになる「冪等」なメソッドで、POSTは冪等とされていない。つまりPOSTを通信エラー後にそのまま再送すると、注文や投稿が二重に作られる恐れがある。決まったURLのリソースを丸ごと置き換えるならPUT、サーバーに新しいリソースを作らせるならPOSTが基本で、POSTを安全に再送したい場合は重複を判定する仕組みをAPI側で用意しよう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「REST API」って出てきたら「URLで指したリソースをHTTPメソッドで操作するAPI設計スタイル」と思えればだいたいOK!
📖 おまけ:英語の意味
「Representational State Transfer API」 = 表現状態転送API
💬 Roy Fieldingが2000年の博士論文で、Webのアーキテクチャを説明するスタイルとして定義した言葉だよ

参考資料

← 用語集にもどる