設計

REST(Representational State Transfer)とは?【基礎知識】

2020年10月31日

REST(Representational State Transfer)とは?

Wikipediaでは、以下のように紹介されています。

RESTは、APIの定義に使用されるアーキテクチャスタイルであり、同時にウェブのような分散ハイパーメディアシステムのためのソフトウェアアーキテクチャのスタイルのひとつでもある。この語はHTTPプロトコル規格の主要著者の一人であるロイ・フィールディング(英語版)がウェブについて書いた2000年の博士論文で初めて現れ、ネットワーキングコミュニティの中ですぐに広く使われることになった。

※ロイ・フィールディング氏が書いた論文は>>こちら<<

難しいですね。簡単に纏めると、以下です。

RESTは、Representational State Transferの略で、Webサービス設計モデルの一つということです。

HTTPプロトコルを最大限活用できる設計モデルだと言われており、WebサービスのURIにHTTPメソッドでアクセスすることにより、データ・リソースの送受信を行うモデルです。

RESTful Web Service Model

RESTful Webサービス

 

現在では、以下のようなWebサービスにRESTが使用されています。(知ってました?)

  • Facebook、Twitter
  • Google (検索)、Amazon、Yahoo
  • LinkedIn、MySpace
  • など

 

Webサービスを提供するサーバーとクライアントとのインターフェースを「REST API」と言い、RESTの設計原則に基づいて提供されるサービスのことを 「RESTful サービス」と言ったりします。

 

RESTの設計原則

RESTの設計原則は、以下の4つに集約することができます。

  1. アドレス指定可能なリソース
  2. 統一されたインターフェイス
  3. ステートレス
  4. 表現指向とハイパーリンク

それぞれ、詳しく見ていきましょう。

 

【原則①】アドレス指定可能なリソース

RESTでは、HTTPサーバーとクライアントでやり取りするデータを全て「リソース」という考え方で表現します。そのリソースは、URIを通じてリソースを一意に指し示すことができることをRESTの原則としています。REST APIのバージョン、どのようなリソースなのか等が一目でわかるように、URIを設計することがポイントです。

例えば、以下のようなURIの場合、どのような情報が取得できるかが一目で分かると思います。

 REST APIの例
https://progzakki.sanachan.com/api/v2/author/info

 

【原則②】統一されたインターフェイス

サーバーが提供するリソースの作成、取得、更新、削除といった操作は、全てHTTPメソッドを利用することを原則としています。作成「POST」、取得「GET」、更新「PUT」、削除「DELETE」のHTTPメソッドを使用します。

例えば、以下のようなREST APIは、RESTの原則を守っていないことになります。

 REST APIの悪い例
https://progzakki.sanachan.com/api/v2/author/info/get
https://progzakki.sanachan.com/api/v2/author/info/update

また、クライアントからの要求に対する処理結果は、HTTPステータスコードを使用することを原則としています。クライアントからの要求がHTTPメソッドなので、処理結果をHTTPステータスコードで返すのは自然ですね。

以下に、代表的なHTTPステータスコードをまとめておきます。

コード 状態 説明
200 OK 要求が正常に処理された
201 CREATED 要求が正常に処理され、リソースが新規に生成された
400 BAD REQUEST サーバーが理解できない無効な要求
401 UNAUTHORIZED 要求したリソースの操作は認証が必要
403 FORBIDDED 要求が拒否された
404 NOT FOUND 要求されたリソースはサーバーに存在しない
500 INTERNAL SERVER ERROR 要求を処理中にサーバーでエラーが発生した

 

【原則③】ステートレス

ステートレスとは、「状態が無いこと」です。RESTでは、基本的にクライアント側で状態を保持し、サーバーとのやり取りで必要な情報は、全てURIとHTTPメソッドで表現することを原則としています。すなわち、HTTPサーバー側では、クライアントの状態を保持するためにセッションスコープを用いないことを意味しています。

 

【原則④】表現指向とハイパーリンク

リソース情報を応答する際、関連する情報はハイパーリンクとして情報に含めることができることをRESTの原則としています。そのため、リソースの表現は JSON、XML形式の場合が多いです。

 

RESTで設計するメリットとデメリット

メリット

  • 原則①②により、シンプルで一貫性のあるAPIを実現(開発者が直感的に理解できる)
  • 原則③により、サーバー側システムが複雑にならず、負荷も少ない
  • 原則④により、他のサービスとの連携やクライアントとの互換性が高い

 

デメリット

  • 原則④により、テキストベースで送受信を行う場合が多く、ネットワーク帯域を食う
  • RESTは設計の自由が高い反面、APIの動作仕様で認識ずれが発生しやすい
  • 認証を要する場合は、RESTの原則から逸脱(セッション管理)してしまう

 

RESTfulサービスの設計手順

  1. ドメインとデータを定義する(要素定義)
  2. データをグルーピングする(リソース化)
  3. リソースをURIへマッピングする(リソース配置)
  4. リソースの表現方法を定義する(レスポンス・フォーマット定義)
  5. リソース間のデータをリンクする(連携)
  6. HTTPメソッド(操作)とマッピングするためのユースケースを検討する

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-設計
-,