REST APIとは REST APIの設計とメリット

REST API(RESTful API)とは、汎用性の高いWebサービスアプリケーション同士の通信を支援するAPIの1つの種類です。REST APIは、シンプルかつ柔軟で、互換性に優れているため、さまざまな種類のデータの取り扱いや、最も著名なアプリケーションとのやり取りに最適というメリットがあります。この記事では、REST(またはRESTful)APIとは何かを定義し、それ以前に使用されていたSOAPとの違いを比較します。さらに、REST
APIの仕組みとメリット、クラウド統合へと向かう流れの中で、REST APIが今日の企業にとって欠かせないものとなっている理由について探ります。

REST APIとは

REST(Representational State Transfer) API、あるいはRESTful APIは、API(アプリケーションプログラミングインターフェイス)の一種で、Webサービスアプリケーション同士の通信を支援します。RESTは理論上、あらゆるプロトコルやデータ形式と互換性がありますが、多くの場合HTTPを使用しており、JSON(JavaScript Object Notation)を使用してデータを転送します。その柔軟性とスピード、そしてシンプルさから、RESTはWeb上のデータを取得する際に最もよく使用される選択肢となっています。

2000年までは、クライアントとサーバーの間のやり取りを行うプラットフォームとして、Microsoft社が開発したSOAP(Simple Object Access Protocol)が最も広く使用されていました。SOAPも有用で一般的でしたが、そのプロトコルには2つの短所がありました。1つは、ユーザーがサーバーとの対話方法に関する厳格なルールを守る必要があったことです。もう1つは、扱いにくいXML形式に依存していたことです。

SOAPの手法に不満を持っていたコンピューターサイエンティストのRoy Fielding氏は、2000年に自身の博士論文で「REST」という代替案を提唱しました。RESTは、データ形式に関する柔軟性や速度の向上、帯域幅の削減といった特徴を持っている点で、従来とは一線を画していました。今日では、RESTは最も一般的なAPIの1つとなっており、AmazonやFacebook、Twitter、Googleなど、多くの主要なWebプロバイダーによって使用されています。

REST APIの設計

REST APIは他のすべてのAPIと同じく、ユーザーとアプリケーションの間のデータの移動を可能にします。たとえば、ユーザーがWebサイトにログインしたり、スマートフォンのアプリにアクセスしたりするたびに、APIはクライアントとホストサーバーの間の通信をサポートします。REST APIは、ユーザーからのリクエストをサーバーに届け、サーバーからのレスポンスを返す仲介役として機能します。

クライアントのリクエスト

対話のプロセスは、RESTアーキテクチャーのクライアントがHTTPコマンドを使用して、サーバーにリクエストを送信するところから始まります。たとえば、URLを入力してWebページを開く場合、実際には「GET + URL」のようなHTTPリクエストが送信されています。RESTクライアントも同様に、こうしたコマンドを使用して要求された情報にアクセスします。代表的なHTTPコマンドには、以下のものがあります。

  • GET – 指定したリソースを取得する
  • POST – 新しいリソースを作成する
  • PUT – 既存のリソースを更新する
  • DELETE – 既存のリソースを削除する

たとえば、HTTPコマンドの “GET https://api.bookseller.com/customers/”は、書店のWebサイトからすべての顧客の名前を取得します。

REST APIとサーバーのレスポンス

Webサービスにおいて、クライアントのリクエストが開始されたら、REST APIはレスポンスを取得して配信します。レスポンスには、データや画像、動画、Webアドレス、コメント、ブログ記事、ツイートなど、さまざまなリソースが含まれます。クライアントからサーバーにリソースが要求されると、サーバーはリソース自体を返すのではなく、リソースの表現を使用して応答します。

ほとんどの場合、これらのレスポンスはJSON形式で提供されます。JSON形式は人と機械のどちらも読むことができ、ほとんどのプログラミング言語と互換性があることから、柔軟性が必要なREST APIにおける理想的な選択肢となっています。

REST APIのメリットと6つの制約

REST APIの大きな利点メリットの1つは、構文の要件がシンプルであることです。しかしその動作は、「制約」と呼ばれる一連の設計規則に従います。APIがRESTfulであると見なされるためには、以下の6つの制約に従う必要があります。

統一されたインターフェイス

インターフェイスが統一されているとは、ブラウザーやJavaScriptコード、モバイルアプリケーションなど、どんなRESTクライアントであっても同じ方法でサーバーを呼び出し、リソースにアクセスできるということを意味します。これは、URI(Unique Resource Identifier)を使用することで可能となります。URIは多くの場合、“https://api.twitter.com/” のようなURLです。

Webサービスにおけるリクエストとレスポンスは、それ自体で完結している必要があります。すなわち、クライアントはサーバーでのリクエスト処理に必要となるすべての情報を送信し、サーバーは要求されたリソースを変更または削除する、または単にリソースにアクセスするための情報を含むレスポンスを返します。

サーバーには、クライアントがリソースを変更できるようにするハイパーリンクを含めるための機能が必要です。この機能は、「Hypermedia as the Engine of Application State」(HATEOAS)として知られています。

クライアント・サーバーアーキテクチャー

RESTアーキテクチャーでは、クライアントとサーバーのコンポーネントは明確に定義され、分離されています。このモジュール式のデザインにより、どちらのコンポーネントも互いに影響を与えることなく、別々に変更できます。ほとんどのWebクライアントとサーバーはこのように設計されていますが、RESTでは単にこの制約を明文化しています。

ステートレス

RESTfulな設計では、クライアントとサーバーの間のやり取りはステートレスです。すなわち、サーバーはクライアントの状態をメモリやデータベースに保存して、覚えておく必要がないということです。そのため、サーバーがデータを返すために必要となるすべての情報が、リクエストに含まれている必要があります。

ステートレスでは、アプリケーションの状態の維持管理は、完全にクライアントの責任になります。サーバー側では、将来のリクエストに対応するために、クライアントの呼び出しに関するオーバーヘッドデータを保存する必要がなくなるため、サーバーが軽量化されます。

ステートレスアーキテクチャーでは、拡張も比較的容易です。しかし、クライアントはデータ取得のために、サーバーを複数回呼び出す必要がある場合があり、パフォーマンスの低下につながるおそれがあります。Web開発者は通常、サーバーまでのホップ数を減らすことで、クライアントアプリケーションのパフォーマンスを最適化する方法を見つけます。

階層型システム

階層型システムとは、クライアントとサーバーを完全に切り離すことを意味します。クライアントアプリケーションがエンドポイントURLを使用してリクエストを行う場合、そのリクエストを処理するサーバーを正確に把握している必要はありません。複数のサーバーの階層が存在し、それぞれが負荷分散やキャッシュ処理といった独自の機能を実行しているかもしれませんが、クライアントはこうした水面下の動きを気にしません。

階層化により、攻撃やイベントを個々の階層内に隔離して封じ込めることが可能となり、REST APIのセキュリティが強化されます。また、アーキテクチャー全体が露出することがなくなります。

キャッシュ可能

RESTサーバーはデータをキャッシュできます。サーバーはCache-Controlヘッダーを使用して、送信されたデータがキャッシュされているかどうか(またはされていないか)と、そのレスポンスの有効期間をクライアントに通知します。最初の期間が終了すると、クライアントは更新のために再びサーバーに問い合わせます。要求されたリソースの状態が最新かどうかをクライアントが判断するために、バージョン番号も使用されます。

コードオンデマンド

これはRESTfulなAPIの設計において、唯一オプションである制約です。コードオンデマンドは、サーバーがコードのスニペットを送信し、クライアント側でそれを実行できる機能です。たとえば、HTMLレスポンス内のJavaScriptとしてコードが送信されます。

SOAPとRESTful APIの違い

RESTとSOAPの間の論争は、この20年間ほぼ休むことなく続いています。それぞれのインターフェイスには適した用途があり、それぞれメリットとデメリットがあります。多くの企業は依然としてSOAPに依存していますが、RESTはその適応性と軽量なアーキテクチャーにより、最も人気のあるAPIとしての地位を確立しました。RESTとSOAPの違いを理解するためには、両者を比較するのが有効です。

SOAPがプロトコルであるのに対して、RESTは設計スタイルです。SOAPでははるかに厳格な 通信の標準と構文が要求されている一方、RESTでは大まかなアーキテクチャーのガイドライン(6つの制約)が定められているだけであり、より柔軟な実装が可能になるというメリットがあります。

RESTは帯域幅とリソースの消費が少なく、高速なパフォーマンスを発揮します。 SOAPではXMLデータ形式のみを扱うため、ファイルサイズが大きくなります。RESTではHTMLやJSON、プレーンテキストといった、より小さい形式を扱うことができます。

SOAPではクライアントとサーバーのより強固な連結が必要となります。SOAPサーバーの関数が呼び出されるとき、SOAPクライアントはこれらの関数の正確なシグネチャを把握している必要があります。シグネチャが変わってしまうと、インターフェイスは破損してしまいます。

RESTクライアントの場合はリソース名を呼び出すだけなので、APIの実装の詳細を把握しておく必要はありません。サーバーの実装が変わったとしても、クライアントには何の変更も必要ありません。 これにより、RESTではSOAPよりも明確に、クライアントとサーバーを分離できるメリットがあります。

RESTの呼び出しはキャッシュ可能です。REST APIがキャッシュ可能であるとは、サーバーに複数回の呼び出しを行うことなく、Webブラウザーでデータを再利用できるということを意味します。これは、帯域幅を節約するのに役立つ、洗練された設計オプションとなります。

SOAPは一般に、安全性が高いと考えられています。SOAPはWS-SecurityとSSL規格に対応しています。また、ACID(不可分性、一貫性、独立性、永続性)コンプライアンスが組み込まれているため、決済ゲートウェイや通信サービスなど、機密データを扱う安全性の高いエンタープライズ向けのアプリケーションやシステムに適しています。ただし、RESTでもSSLやHTTPS規格はサポートされています。

SOAPとRESTful APIの違いを理解した上で、自社にとってどちらの方がメリットがあるのかを見極めましょう。

REST APIとクラウド統合

クラウド統合への移行は、今日のデータ管理における大きなトレンドとなっています。ユーザーはAPIを使用することで、クラウド上の複数のサーバーにまたがってさまざまな形式で保管された情報にアクセスできます。REST APIはSaaS(ソリューションとしてのソフトウェア)プラットフォームで最も多く使用されていますが、PaaS(サービスとしてのプラットフォーム)プロバイダーにとっても重要な役割を果たしています。RESTful APIを使用している著名なプロバイダーの例を挙げると、Oracle、Jira、Google、Adobe、Amazon、GitHubなどがあります。

クラウドコンピューティングに対して多額の投資を行ってきた企業は、クラウドの機能を十分に発揮できるように自社の製品とサービスを準備する方法を模索し続けています。多くの場合、REST APIのコネクタと機能を提供するクラウド統合ツールを使用することが、その答えとなります。

Talendが提供するCloud API Servicesは、APIの作成プロセスを簡素化することにより、データを最大限に活用できるようにします。データクオリティを確保する完全なツールセットと900を超えるコネクタにより、これまでにない速さでAPIの稼働を開始できます。今すぐ無償試用版をダウンロード いただき、統合がどれほど簡単になるのかをご確認ください。

Talendを使う準備はできていますか?