devdevdevReports

dev系開発開発者の開発日記

【WEBを支える技術】~RESTを構成する6要素~

RESTの全体像

f:id:gentlemans:20201107115948p:plain
REST全体概要

「REST」の構成要素

①クライアント/サーバー構成

f:id:gentlemans:20201107115821p:plain
クライアント/サーバー構成

②ステートレス性

f:id:gentlemans:20201107115824p:plain
ステートレス性

  • ①リクエストのたびにすべての情報を送信

    • クライアント側にメリットはない
  • ②クライアントの状態を管理しない

    • 毎回違うサーバーがリクエストを受取可能となり、実装が簡略化
    • レスポンス返却後、リソースを開放可能となり、パフォーマンスが向上
      Cookieを使用してセッション管理、認証を行う場合がある

③キャッシュ

f:id:gentlemans:20201107115827p:plain
キャッシュ

  • ①同じリクエストの結果を再利用する

    • サーバーとクライアント間の通信料を低減できる
    • ネットワーク帯域の利用、処理時間を短縮し、パフォーマンスを向上できる
    • 古いキャッシュデータによって情報の信頼性が低下する可能性がある
  • ②クライアントに再利用可能かを伝達

    • 有効期限などキャッシュ可能な条件も伝達

④統一インターフェース

f:id:gentlemans:20201107115830p:plain
統一インターフェース

  • ①使用可能な8つのHTTPメソッド
    • RESTの代表的な特徴
    • リソースに対する操作を限定する
    • サーバーとクライアントの独立性が向上し、マルチプラットフォームに対応しやすくなる

⑤階層化システム

f:id:gentlemans:20201107115815p:plain
階層化システム

  • ①クライアントはサーバ構成を意識せず、リクエストを送信

    • サーバー構成を変更してもクライアントには影響がない(クライアントはサーバ構成がわからない)
    • オブジェクト指向カプセル化と同じ性質
  • ②サーバ側のアーキテクチャを階層的に分離

    • サーバ間の通信はHTTP通信のため、さらなるサーバ構成変更などの拡張性が高い

⑥コードオンデマンド

f:id:gentlemans:20201107115818p:plain
コードオンデマンド

  • ①サーバにプログラムを保持

    • JavaScriptFlashのプログラムを保持
    • サーバ側の変更のみで機能追加が可能となり、拡張性が高い
      スマホアプリなどはクライアントアプリの更新が必要な場合がある
  • ②ダウンロードしたプログラムをそのまま実行