REST API は、インターネットなどのネットワークを介して 2 つのシステム (クライアントとサーバー) 間のデータ表現と通信を行うRepresentational State Transfer (REST) モデルに準拠したアプリケーション プログラミング インターフェイス(API) の一種です。 REST API は、社内アプリケーションとサードパーティ アプリケーション間の情報交換をサポートし、企業が複数のエンドポイントをアプリケーション エコシステムに統合できるようにします。
注記: 厳密に言えば、 REST はモデルを指し、それに準拠する API を指す形容詞ではありません。その正しい用語はRESTful APIです。ただし、 REST API の方が一般的な用法であるため、この記事でもそれを使用します。
REST は前述のようにRepresentational State Transferの略で、2000 年にコンピューター科学者 Roy Fielding によって作成されたアーキテクチャ スタイルです。 REST は開発者に柔軟性を提供するため、マイクロサービス アーキテクチャでアプリケーションを接続するのに最適です。
REST では、アプリと API が RESTful であるとみなされるために従わなければならない 6 つの制約が定義されています。
これらの制約の詳細については、 Wikipedia を参照してください。
統一されたインターフェースにより、システム全体のアーキテクチャが簡素化され、インタラクションの可視性が向上します。 また、情報が標準形式で転送されることを保証するための特定の要件もあります。
次の 4 つの制約により、REST インターフェースを統一することができます。
クライアント サーバー アーキテクチャは、クライアント、サーバー、およびリソースで構成されます。 ユーザー インターフェイス (クライアントによって制御) とデータ ストレージ (サーバーによって制御) を分離すると、クライアント コンポーネントとサーバー コンポーネントが自律的に進化できるようになります。 また、複数のプラットフォーム間でのクライアント ユーザー インターフェイスの移植性とサーバーのスケーラビリティも簡素化されます。
インターネットでは、クライアントとサーバーのやり取りはHTTP 経由で行われます。
クライアント サーバー通信において、ステートレスとは、サーバーがクライアントまたはクライアントと確立されたセッションに関する情報を一切保存しないことを意味します。 各メッセージ内のセッション関連情報のクライアントによる表現は、サーバーが以前のメッセージのコンテキストなしでそれを単独で理解できるようにする必要があります。 これにより、サーバーの負荷が軽減され、大容量アプリケーションのパフォーマンスが向上します。
クライアントは、サーバーに直接接続されているのか、リバース プロキシやロード バランサーなどの仲介者に接続されているのかを知る必要はありません (通常は判別できません)。 中間サーバーはスケーラビリティの向上に役立ち、サーバーがビジネス ロジックのみを担当するようにセキュリティを処理するために使用できます。
HTTP クライアントと仲介者は、サーバーの応答をキャッシュしてサーバーの負荷を軽減し、エンドユーザーへのデータ配信速度を向上させることができます。 サーバーは、応答がキャッシュ可能かキャッシュ不可能かを示す必要があります。キャッシュ不可能であることは、後続のエンドユーザー要求に対する応答が正しく、最新のものであること(潜在的に「古くなった」ものではないこと)を保証します。 クライアントは一意の識別子である URL によってリソースにアクセスするため、リソース レベルで何をキャッシュするかを決定できます。
コードオンデマンドとは、サーバーが実行可能コードを送信してクライアントの機能を一時的に拡張またはカスタマイズできるため、クライアントが機能自体を実装する必要がなくなることを意味します。 コードオンデマンド制約はオプションです。
REST における最も重要なデータ表現または抽象化はリソースです。 REST リソースは、デジタル ドキュメントから非デジタル オブジェクトまで、あらゆる種類の抽象化された情報になります。 特定の時点でのリソースの状態は、リソース表現と呼ばれます。
リソース表現には 3 つの部分があります。
REST API は、一意の URI でアクセス可能な相互にリンクされたリソース (またはそのリソース モデル) のアセンブリで構成されます。 クライアントは、応答内で関連リソースや URI にリンクすることで柔軟な機能を実現できます。 一般に、REST API へのリクエストは HTTP GET リクエストの形式で送信され、サーバーは応答を JSON としてフォーマットすることがよくあります。
次の HTTP リクエスト メソッドは、指定された方法でリソースを操作するために使用されます。
REST アーキテクチャ スタイルでは、リソース識別子によって、クライアントとサーバーのやり取りに関与する各リソースが一意に指定されます。
「メディア タイプ」またはデータ形式の表現は、リソースの処理方法を定義します。 REST API では、すべてのメディア タイプは JSON に基づいており、ハイパーメディア(ハイパーテキストと呼ばれることもありますが、少し異なります) です。 ハイパーメディアとは、他のメディアへのリンクを持つコンテンツのことです。 アプリケーション状態のエンジンとしてのハイパーメディア (HATEOAS) は、REST アーキテクチャをユニークなものにしています。
注記: Roy Fielding によれば、API が REST API と見なされるためには、ハイパーメディアを使用する必要があります。 しかし、今日では多くの API 設計者が、ハイパーメディアやハイパーテキストを使用していないにもかかわらず、その API を流行語として「REST[ful]」と呼ぶことがよくあります。
リソース表現は自己記述的であることを目指しており、API は独自のコンテキスト内でそれ自体が理解されることを意味します。 自己記述的な表現を使用すると、クライアントはリソースがどのカテゴリに属しているかを知る必要がなくなり、代わりにリソースに関連付けられたメディア タイプに基づいて動作します。
現在、ほとんどの企業は、基本的な機能、革新的な機能、重要な機能を提供するアプリ間の通信に、社内で開発された API とサードパーティの API を使用しています。 これらの API の大部分は REST API です。これは、REST によって義務付けられた特定の通信標準により、安全で効率的かつ信頼性の高い情報交換が可能になるためです。 REST API は任意のプロトコルでも動作します。
REST API は、RESTful Web サービスが応答を送信する前に要求を認証するため、安全です。 ユーザー ID を確認するために、REST API は HTTP 認証 (基本トークンとベアラー トークンの両方)、API キー、およびログイン アクセス用の OAuth を使用します。
REST API のその他の利点は次のとおりです。
REST は依然としてクライアント アプリケーションとサーバー アプリケーションを接続するための最も一般的なアーキテクチャですが、 GraphQL (2012 年に Facebook によって開発され、2015 年にオープンソース化) は REST の代替として設計されました。 GraphQL API は、必要なすべてのデータが単一のリクエストで標準化された形式で要求されるため、REST API よりも効率的ですが、REST が優れている領域はまだいくつかあります。 GraphQL は学習曲線が急峻で、REST に比べてキャッシュ性がはるかに低くなります。 さらに、アプリケーションはリソースによって駆動されることが多く、GraphQL のようなクエリ言語は必要ありません。 とはいえ、それぞれのモデルには長所と短所があり、組織は両方を使用することを選択できます。
REST API の柔軟性は確かに利点です。 しかし、柔軟性が高すぎると、潜在的に低速または壊れた API の設計につながる可能性もあります。そのため、多くの開発者はOpenAPI 仕様を使用して API のドキュメントを公開、管理、生成することを選択しています。
F5 NGINX Management Suiteの一部であるAPI Connectivity Manager は、REST API の OpenAPI 仕様をサポートしています。 API Connectivity Manager は、API 開発者のエクスペリエンスを中核として設計されました。 これは、開発者ポータルと API ゲートウェイに API を公開するためのシームレスな統合を備えた、軽量のクラウドネイティブ API 管理ソリューションです。
API Connectivity ManagerとInstance Managerを含むNGINX Management Suite の 30 日間無料トライアルを開始します。