Logo Image

Blog Article

RESTfulとは

00
参考リンク

REST入門 基礎知識 - Qiita

RESTfulとは

RESTful (REST:Representational State Transfer) は、ウェブアプリケーションやAPIを設計するためのシンプルなルールや考え方です。これを使うと、クライアント (アプリやブラウザ) とサーバーが効率的にデータをやり取りできます。

RESTの原則

  • インターフェースの統一

    予め定義・共有された方法 (WebであればHTTPメソッドの利用)で統一されている。

  • アドレス指定可能なURI

    すべての情報が一意なURLの構文で表示される。

  • 接続性

    やりとりされる情報にはリンクを含めることができる。

  • ステートレス

    サーバーはクライアントのセッション情報を保持せず、1回ごとに完結し前のやり取りの結果に影響を受けない。

RESTfulの基本的な考え方

  1. リソースを中心に設計する
    • 「リソース」とは、データや機能のこと。たとえば、ユーザー情報や商品のデータがリソースになります。
    • 各リソースは一意の住所 (URI) を持ちます。
      • 例:
        ユーザー一覧 → /users
        特定のユーザー → /users/123

  2. HTTPメソッドを活用する
    • データ操作 (取得、作成、更新、削除) に、HTTPのメソッド (GET、POST、PUT、DELETEなど) を使います。
      • GET: データを取得
        /users でユーザー一覧を取得
        /users/123 でIDが123のユーザー情報を取得
      • POST: 新しいデータを作成
        /users に新しいユーザーを登録
      • PUT: データを更新
        /users/123 でIDが123のユーザー情報を更新
      • DELETE: データを削除
        /users/123 でIDが123のユーザーを削除

  3. ステートレス (Stateless)

    サーバーはクライアントの状態を記憶しません。
    各リクエストが独立しているため、必要な情報はすべてリクエストに含めます。
    (例: 毎回「ログイン情報」や「ユーザーID」をリクエストに含める)

  4. リソースのリンクを使う

    APIの応答には、ほかのリソースへのリンクを含めます。
    たとえば、ユーザー情報の応答にそのユーザーの投稿一覧へのリンクを追加します。
    → クライアントが必要なリソースを簡単に見つけられるようにする。

例: ユーザー情報を管理するRESTful API
  • リソース: ユーザー (/users)
  • 操作とURI:
    • 全ユーザーの一覧を取得 → GET /users
    • 新しいユーザーを登録 → POST /users
    • 特定のユーザー情報を取得 → GET /users/123
    • 特定のユーザー情報を更新 → PUT /users/123
    • 特定のユーザーを削除 → DELETE /users/123

RESTfulのメリット

  • わかりやすい: ルールがシンプルで理解しやすい。
  • 統一性: URIとHTTPメソッドを統一的に使うため、開発者がAPIの使い方をすぐ理解できる。
  • 拡張性: 新しい機能を簡単に追加できる。
  • プラットフォーム非依存: RESTfulなAPIは、ブラウザ、モバイルアプリ、他のサーバーなど、どんなクライアントからも利用できる。

まとめ

RESTfulは、「データや機能 (リソース) 」を明確に分けて、HTTPメソッドを使って操作するシンプルな設計手法です。この考え方を使うと、APIがわかりやすく、拡張性のある設計になります。

ステートフルとステートレス

"ステートフル (Stateful) "と"ステートレス (Stateless) "は、システムや通信の仕組みを説明するための言葉です。それぞれ「状態 (ステート) 」をどのように扱うかで違いがあります。

ステートフル(Stateful)

状態を覚えるシステムです。
一度のやり取り (セッション) で得た情報を次回以降の処理でも使います。

  1. Webアプリのログイン機能
    ユーザーがログインすると、サーバーは「このユーザーはログイン中だ」という情報を覚えます。次の操作で、ログイン状態を基に処理をします。
  2. オンラインゲーム
    ゲームサーバーは、各プレイヤーの現在の位置やスコアを覚えています。
特徴
  • クライアントとサーバーが連続性のある通信を行う。
  • 状態を保持するので、前後のやり取りがスムーズに繋がります。
  • デメリット: 状態を管理する分、システムが複雑になります。

ステートレス (Stateless)

状態を覚えないシステムです。
各リクエストや操作は、それだけで完結します。過去のやり取りは関係ありません。

  1. HTTP通信(ウェブの基本)
    ブラウザがサーバーにページをリクエストするとき、サーバーは「このリクエストは誰からのものか」や「前回何をしたか」を覚えていません。
  2. 簡単なAPI
    クライアントがデータを要求するたびに、必要な情報を全てリクエストに含めます (例: ユーザーIDや認証トークン)
特徴
  • 各リクエストが独立して処理されます。
  • 状態を管理しないため、システムがシンプルで拡張しやすいです。
  • デメリット: 毎回必要な情報を送り直す必要があり、効率が下がる場合もあります。

違いを簡単に比較

特性

ステートフル

ステートレス

状態の管理

サーバーが状態を覚える

サーバーは状態を覚えない

連続性

前後の操作が連続している

各操作が独立している

ログイン中のユーザー情報管理、オンラインゲーム

HTTP通信、REST API

メリット

継続的なやり取りが可能

システムがシンプルでスケールしやすい

デメリット

複雑で管理が大変

必要な情報を毎回送る手間がかかる

どちらを選ぶべき?

  • ステートフル: 状態を維持する必要がある (例: ログイン機能、チャットアプリ)
  • ステートレス: シンプルで拡張性が欲しい (例: RESTful API)

コメント

ログインしてコメントしましょう。