地図情報や天気など、外部サービスの情報や機能を利用する際に利用されるしくみがWeb APIです。現在主流になっているのは「REST API (RESTful API)」と呼ばれるもので、HTTP、JSONなどの標準技術を使って効率的に開発できるのが特徴です。
近年ではインターネット上のデータだけでなく、社内データの参照にも利用されるなどREST APIの活用範囲が広がっています。年々重要度は増しているものの、漠然とした認識のままでいる方も少なくないのではないでしょうか。
技術を利用するためには、ベースになる知識が不可欠です。本記事では、REST APIの特徴や、設計するにあたって知っておきたいエッセンシャルな知識を紹介します。
APIとは、さまざまなアプリケーションの機能を外部から利用できるよう設計されたインターフェースを指します。APIの一例には、プログラムがWindowsの機能を呼び出す「システムコール」や第三者に地図情報を提供する「Google Map API」があります。
APIにはさまざまな種類がありますが、開発現場で広く利用されているのが「Web API」です。これは、Web上で公開されている機能や情報をHTTP(またはHTTPS)プロトコルで通信し、利用するものを指します。近年では、APIと言えばWeb APIを指す場合が増えています。
Web APIを利用する利点は、他社が提供する豊富な機能を簡単に利用できることです。自社で全ての機能をゼロから開発するのは一定の負担がかかります。既に他社が開発している機能を利用したほうが効率的でしょう。
Web APIを提供する側のメリットとしては、自社のシステムを広く利用してもらえること、それにより利用者の増加が期待できることが挙げられます。
Web APIの主な種類として、SOAP(Simple Object Access Protocol)、RPC(Representational StateTransfer)、REST(Remote Procedure Call)の3つが挙げられます。その中でも、実装しやすい、汎用性が高いなどのメリットを持つREST APIが現在主流となっています。
RESTとは厳密には、Representational State Transferの略でWebの設計思想のひとつです。「統一インターフェース」「アドレス可能性」「接続性」「テートレス性」の原則を持ち、RESTの4原則に則ったAPIをREST API (RESTful API) と呼びます。
RESTの4原則は、アメリカの著名なコンピューターサイエンティストであるロイ・フィールディング(Roy Fielding)氏が2000年に論文で発表したものに基づいています。RESTの原則に沿うと簡潔に・効率的に情報のやりとりができます。
では、RESTは具体的にどのようなことを述べているのかを見てみましょう。
情報をやりとりする方法を統一します。あらかじめインターフェースを決めておくと設計をシンプルにできます。
それぞれの情報ごとに場所や名前を識別できるURI(Uniformed Resource Identifier)で表現します。
情報のなかに、リンク情報が含まれます。
サーバーが過去の状態(ステート)を持たず、純粋にその都度受け取った内容だけで結果(アウトプット)が導き出されます。
Web APIのなかでも、REST APIを利用するメリットとデメリットを説明します。
開発者がREST APIを使うメリットは「シンプルで効率的な開発ができること」です。REST APIはHTTPメソッドやJSON形式など一般的なWeb技術を採用しているため、開発が容易です。URIの構造が決まっているため理解しやすい点や、ステートレス性を持つため拡張可能性が向上する点もメリットです。
一方デメリットとしては、RESTは仕様ではなくあくまでも設計思想であるため、実装の際の規定がありません。そのため開発者によって記述方法がバラバラになりやすい点が挙げられます。
REST APIは、以下のような特徴を持っています。それぞれの特徴についてポイントを見てみましょう。
REST APIでは、データ形式はJSON、リクエスト〜レスポンスの処理はHTTPメソッドを利用すると決められています。また全てのリソースを独立した識別子であるURIで表現可能です。インターフェースが統一されているため、どのようなWebクライアントからでも同じように情報をやりとりできます。
RESTの原則でも挙げられているように、サーバーが過去の情報(Cookie・セッション情報等)を保持しません。これによりサーバーは余分な情報を保存する必要がなくなり、軽量化や実装のしやすさ、拡張性の高さにつながります。
REST APIではHTTPメソッドを利用しているため、HTTPのキャッシュが利用可能です。これによりサーバーへの問い合わせ回数を減らし、無駄なく通信が可能です。
REST APIでは、URIを見るだけでどのデータに何を行うのか内容が理解できます。
REST APIは、Webと同じようにクライアント・サーバー型の構造です。サーバーとクライアントは独立し、役割分担されているため、何か変更する際などでも互いに影響しません。
REST APIでは階層型構造を採用しています。これにより他の開発者がリソースの構造を理解しやすくなります。
REST APIの場合、HTTPメソッド(GET、POST、PUT、DELETE)をURIで表現するのが基本的な構造です。設計における重要項目は以下のとおりです。
REST APIでは、リソースはURIで、操作はHTTPメソッドで表現します。
HTTPメソッドの役割は以下のとおりです。
URI設計は、人間が見やすい・理解しやすいようにすることが重要です。パスの書き方は、主に以下の6項目に留意するとよいでしょう。
大文字と小文字が混在すると読みづらく間違えやすくなります。そのため全て小文字で統一するようにします。
長いURIは可読性が低下します。見やすさのため、適宜ハイフンを入れるようにします。
アンダースコアは表示が隠れてしまい見落とされる可能性があります。極力使用せず、ハイフンで代替するようにします。
階層関係を明確に表現するため、URI内で「/(スラッシュ)」を使います。URIの最後には/を使わないようにします。
URIにはファイルの拡張子を含めないで記述します。これにより可読性が高まるほかメンテナンス性も向上します。
URIにバージョン情報を含めることで、そのAPIを利用する開発者がバージョンを選択しやすくなります。
REST APIは、次のようなシーンで活用されています。
Twitter、Facebookなどの主要SNSで提供しているAPIを利用すると、直接SNSへアクセスしなくても投稿された情報を収集・取りまとめられます。それを利用して自社アプリケーション上で特定の情報を抽出して表示するなど、新たな価値が提供可能です。
REST APIは、HTTPベースで情報をやりとりします。そのためCとJavaなど、開発言語が異なるアプリケーション同士であっても情報のやりとりができます。そこで異なる言語のサービスを連携する用途でも利用されます。
現代のシステムやサービスの多くは外部サービスとの連携を前提に開発されています。一から開発しなくても、既存サービスを活用すれば工数・コストの軽減や開発スピード、利便性向上に繋がるからです。
その手段としてWeb APIの活用は不可欠であり、特に主流であるREST APIは限られた分野のエンジニアだけでなく、幅広い分野のエンジニアにスキルが求められます。良質なサービスを開発するためには、基本的な知識をしっかりと理解しておくことが必要です。知識があやふやな人は、この機会に基本を再確認してみましょう。