Representational State Transfer(REST)は、APIの動作に関するガイドラインを提供するソフトウェアアーキテクチャルスタイルです。RESTは、インターネットのような複雑なネットワーク上での通信を管理するためのガイドラインとして作成されました。RESTは、従うことでスケーラブルで効率的で保守可能なWebサービスの作成を可能にする原則と制約のセットです。
RESTful APIsまたはREST APIsは、Webサービスの設計とやり取りにRESTアーキテクチャルスタイルに従うAPIです。ソフトウェアやアプリケーション間でデータを通信や共有するためにAPIを使用するだけでなく、RESTful APIsはWebアプリケーションの効率性、スケーラビリティ、柔軟性に貢献し、Web開発において重要な役割を果たしています。Web開発の観点におけるRESTful APIsの他の利点には、ステートレス性、互換性と相互運用性、簡素化された統合、改善されたセキュリティ、およびシンプリシティがあります。
RESTful APIsがどのように機能するかを理解する上で中心的な2つの概念は、エンドポイントとリソースです。
-
リソース:リソースとは、識別、命名、および操作が可能なすべての情報です。APIを介して公開される主要な抽象化です。
-
エンドポイント:エンドポイントとは、クライアントがAPIとやり取りするためのリソースまたはリソースのコレクションを表すアクセスポイントまたは特定のURL(Uniform Resource Locator)またはURIです。
RESTfulアーキテクチャの主な原則
RESTfulアーキテクチャの主要な原則であるREST制約は、RESTfulアーキテクチャを定義し、これらの制約に従うWebサービスの設計を指導します。これらの原則には次のものが含まれます:
-
ステートレス性: クライアントからサーバーへのすべてのリクエストには、リクエストを理解し処理するために必要なすべての情報が含まれていなければなりません。ステートレス性は拡張性を向上させ、サーバーの実装を簡素化します。
-
一貫したインターフェース: URLによるリソースの識別、表現によるリソースの操作、自己記述メッセージ、およびHATEOAS(Hypermedia as the Engine of Application State)として一般的に知られるクライアントとアプリケーションとの相互作用をハイパーメディアを通じてのみ可能にするリソースの一貫したインターフェースを実現します。
-
クライアントサーバーアーキテクチャ: RESTfulシステムは、クライアントとサーバーがネットワークを介して通信する構造に従います。クライアントはユーザーインターフェースとユーザーエクスペリエンスに責任があり、一方、サーバーはリクエストの処理、リソースの管理、およびアプリケーションのビジネスロジックの維持に責任があります。この関心の分離により、スケーラビリティと柔軟性が向上します。
-
レイヤードシステム: RESTアーキテクチャにおいて、それぞれの層には特定の機能があり、複数のレイヤーが存在します。各層は隣接する層とやり取りして、モジュラリティとスケーラビリティを促進します。
-
コードオンデマンド:この原則は、クライアントアプリケーションがサーバーから提供されたコードを読み込んで実行する方法を提供し、クライアントの機能を向上させます。 “コードオンデマンド”は柔軟性を提供できるが、セキュリティ上の考慮事項やクライアントとサーバーの間の結合度の増加の可能性により、すべてのシナリオに適しているわけではありません。 “コードオンデマンド”を使用するかどうかの決定は、開発中のアプリケーションの具体的な要件と制約に依存します。
-
キャッシュ可能性:キャッシュ可能性は、クライアントが以前に取得した表現を再利用できるようにすることで、パフォーマンスを向上させます。これにより、サーバーに対する繰り返しのリクエストの必要性が低減します。
RESTful APIのエンドポイント
エンドポイントは、リソース上で実行される機能やアクションを定義します。たとえば、アイテムのリストを取得したり、新しいアイテムを作成したり、既存のアイテムを更新したり、アイテムを削除したりします。RESTful APIには、しばしば同じリソースで異なる操作を実行したり、異なるリソースと連携したりするための複数のエンドポイントがあります。
エンドポイントは、クライアントがAPIとやり取りするアクセスポイントとしての役割を果たし、APIの設計において重要な役割を果たします。API設計における重要なエンドポイントのいくつかは次のとおりです:
-
リソース公開: エンドポイントは、APIによって公開されるリソースまたはリソースのコレクションを定義し、各エンドポイントは特定のリソースまたはリソースのセットを定義し、クライアントがどのリソースまたはリソースのセットとやり取りできるかを明確にします。
-
操作の定義: エンドポイントは、クライアントがリソース上で実行できるアクションを指定します。 GET、POST、PUT、DELETEなどのHTTPメソッドがそのアクションを定義するのに使用されます。
-
モジュラリティと拡張性: エンドポイントは、特定のリソースまたはリソースセットに関連する特定の機能を要約することで、モジュラリティを促進します。 モジュラリティはAPIの保守性を高め、拡張性のある開発を可能にします。
-
明確で直感的なデザイン: エンドポイントに意味のあるかつ一貫した命名規則を選択することで、開発者は各エンドポイントの目的と機能を簡単に理解でき、APIの明確さと直感性のデザインに貢献します。
機能とサポートする操作の種類に基づいてカテゴリ分けされた異なるタイプのエンドポイントがあります。 異なるタイプのいくつかは次のとおりです:
-
読み取りおよび取得エンドポイント: HTTP GETメソッドを使用してサーバーからリソースを取得するために使用されます。
-
作成またはPOSTエンドポイント: HTTP POSTメソッドを使用してサーバー上に新しいリソースを作成するために使用されます
-
削除エンドポイント:HTTP DELETEメソッドを使用してサーバー上のリソースを削除するために使用されます。
-
更新またはPUTエンドポイント:HTTP PUTメソッドを使用してサーバー上の既存のリソースを更新するために使用されます。
-
検索またはクエリエンドポイント:指定された基準に基づいてクライアントがHTTP GETメソッドを使用してリソースのサブセットを取得することを可能にします。
-
リストエンドポイント:HTTP GETメソッドを使用してリソースのコレクションまたはリストを取得します。
RESTful API内のリソース
リソースは、識別、名前付け、操作可能な情報を表す主要な抽象化です。リソースの例には、ユーザープロファイル、記事、アプリケーションが扱う他のデータエンティティなどがあります。リソースは一意のURI(Uniform Resource Identifier)で識別されます。通常、リソースはJSONやXML形式であり、標準のHTTPメソッドを使用して作成、取得、更新、削除できます。
RESTfulアーキテクチャを構築する基盤は、そのリソースを識別することです。API設計でリソースを識別するための主要なガイドラインには、次のものがあります:
-
リソース名には名詞を使用します:リソース名に「get」や「retrieve」といった動詞を使用せず、「users」や「products」といった名詞を使用します。
-
リソースの命名規則:リソースに対する一貫した命名規則に従います。理解しやすく覚えやすい名前を使用します。
-
リソースのコレクションには複数形の名詞を使用します: たとえば、’/users’ はユーザーリソースのコレクションであり、’/products’ は製品リソースのコレクションです。
-
ドキュメント: APIは、利用可能なリソースとそれらとのやり取り方法をユーザーが理解できるように明確に文書化されるべきです。
リソースとエンドポイントの関係
リソースとエンドポイントの関係は、RESTful APIの設計と機能に基本的です。それらの間のいくつかの関係には次のようなものがあります:
-
アクセスポイントとしてのエンドポイント: エンドポイントは、リソースまたはリソースのコレクションに対応する特定のURIまたはURLです。クライアントがリソースとやり取りする具体的なアクセスポイントを提供します。
-
エンドポイントはリソースを識別します: エンドポイントは、リソースまたはリソースのセットを識別します。たとえば、ユーザーを表すリソースがある場合、エンドポイントは’/users’かもしれません。
-
HTTPメソッドは操作を定義します: エンドポイントは特定のHTTPメソッド(GET、POST、PUT、DELETEなど)と関連付けられており、対応するリソースに対して実行できる操作を定義します。
-
リソース表現: クライアントがそれとやりとりするとき、エンドポイントはリソースの表現をサーバーと交換します。これらの表現はJSONやXMLなどの異なる形式であり、リソースに関する状態や情報を含んでいます。表現はHTTPリクエストまたはレスポンスのペイロードです。
-
一貫したインターフェース: リソースとエンドポイントの間の関係はRESTの一貫したインターフェースの制約に従います。リソースとエンドポイントの組み合わせは一貫性があり予測可能なAPI構造を作成します。
-
HATEOAS(Hypermedia as the Engine of Application State):これには、リソース表現にハイパーメディアリンクを含めることが含まれ、クライアントがAPIを動的にナビゲートできるようにします。
結論
リソースとエンドポイント間の相互作用は、統一された効率的なアーキテクチャを開発するためのRESTful API設計で重要です。概念的なエンティティを表すリソースは、ユーザーや製品などのシステムの基本的なエンティティを定義します。URIで表されるエンドポイントは、指定されたHTTPメソッドを介してクライアントがこれらのリソースとやり取りするためのゲートウェイとして機能します。RESTfulの原則に従うことで、この共生関係は一貫したインターフェース、自己記述型のコミュニケーション、ハイパーメディアリンク(HATEOAS)を介した動的ナビゲーションを確保します。リソースとエンドポイントの注意深い整合は、技術的な詳細を超えたものであり、APIの明瞭さ、拡張性、適応性を促進し、開発者やユーザーにとってもシームレスで直感的なエクスペリエンスをもたらします。
Source:
https://inioluwa2003.hashnode.dev/demystifying-restful-apis-a-deep-dive-into-endpoints-and-resources