Management」について説明します。Managementの特徴と使い方について説明していきます。APIを使ったアプリケーション間連携のためのアーキテクチャのひとつです。ゲートウェイという名前の通り、データを要求するクライアントとデータを提供するサーバーの間に位置しており、サービスが提供するAPIを一括で管理し様々な処理を仲介する役割を担っています。マイクロサービスアーキテクチャのように、一つの処理がクライアントから各マイクロサービスのAPIを数回に渡って呼び出すことで成立するようなケースでは、クライアント側で各APIの管理を行う必要が出てしまい、クライアント側のコードが煩雑になってしまいます。APIゲートウェイを導入することで、クライアントはAPIゲートウェイに対して1回だけAPIの呼び出しを行い、APIゲートウェイ側に各マイクロサービスへのAPI呼び出しを委ねることができます。APIとして公開することができなかった、企業やサービスが持つデータ資産をAPIとして世界に公開することができ、企業の価値を高めることができます。クライアントとサーバーが直接やりとりするAPI連携の課題点APIゲートウェイの必要性を理解するためには、クライアントとサーバー間で直接APIのやりとりを行う、従来の連携方法における課題点を知る必要があります。連携する場合、クライアントとサーバー双方において自ら解決すべき課題が生じます。クライアント側では、複数のAPIの呼び出し方(URLやプロトコル等)の違いを考慮した実装をする必要があるため、API呼び出しの管理コストが増大します。一度の操作で複数のAPIを呼び出す必要がある場合は、エラーハンドリングをクライアント側に組み込む必要が出てきてしまいます。サーバー側では各APIに対する認証・認可や監査の設定といったセキュリティ面での保護やクライアントのAPI使用量制限などAPIの健全性を保つ仕組みを自前で構築する必要があります。APIゲートウェイの導入によりクライアントとサーバーを分離し、APIにまつわる横断的な検討事項をAPIゲートウェイに集約することで、クライアントとサーバーは本来の責務に集中することができるようになります。APIゲートウェイの機能APIゲートウェイが有する機能は多岐に渡り、その中から必要なものを選択して利用していくことになります。APIゲートウェイの機能は以下の3パターンに分類することができます。・ルーティングAPIゲートウェイは、ルーティング機能を提供することで、複数のAPIの中からクライアントが指定したAPIへと要求を渡すリバースプロキシサーバー(クライアントとサーバーの中間に位置して負荷を肩代わりするサーバー)として機能します。これによって、クライアントに対して単一のエンドポイントを提供することができ、クライアントとAPIの結合を疎に保つことができるようになります。以下の図では、異なるクライアントからの異なるAPIリクエストをAPIゲートウェイが受信し、適切なバックエンドAPIにルーティングを行っている様子を表しています。APIゲートウェイによるルーティングAPIゲートウェイ内部にあるURLの対応表(ルーティングテーブル)によってAPIゲートウェイが公開するAPIのパスとバックエンドAPIのパスを異なるものに変更することも可能となっています。・APIの集約APIゲートウェイを使用することにより、複数のAPI呼び出しを1回に集約できます。クライアントは一つのAPIを呼び出すだけになり、APIゲートウェイ側で各APIの呼び出しを実行して結果をまとめてクライアントに返却します。これによって通信回数を削減でき、またクライアント側でのエラーハンドリングの実装を削減することができます。以下の図では、クライアントからの1回のリクエストに対してAPIゲートウェイが2つのバックエンドAPIを呼び出しています。・横断的機能の集約APIゲートウェイに横断的な機能を集約することで、これまで各自で実装する必要のあったさまざまな機能をAPIゲートウェイにまとめられるようになります。APIゲートウェイに集約できる横断的機能には、以下のようなものがあります。画像などの静的コンテンツを保持これらの横断的な機能を各サービスに実装するのは骨が折れる作業ですが、APIゲートウェイを挟むことでこれらの構築や設定を一括管理することができるようになります。APIゲートウェイのユースケースAPIゲートウェイの利用シーンには、以下のものが挙げられます。企業が保有するデータやサービスといったデジタル資産をAPIとして公開し、多くのクライアントに提供することでデジタル資産の価値を高めることが期待できます。APIゲートウェイを利用することで、一貫した形式でのデータの提供ができたり、認証・認可機能によってアクセスできるデータの範囲を制限できるようになります。・APIのマネタイジング価値の高いデジタル資産であれば、APIに利用料金を設けることでマネタイジングを行うことも可能です。APIゲートウェイが提供するログ記録と監視機能によって課金のしくみを設けたり、流量制限によって利用プランに応じたデータ量の調整などが可能となります。・多様なクライアントデバイスのサポートスマートフォンやタブレットなどのモバイルアプリケーションからのデジタル資産へのアクセスもAPIを提供することにより可能となります。デバイスの増加によるアクセス数の増加に対しても、APIゲートウェイのスケールや流量制限を設けることによって柔軟に対応できます。企業やサービスがシステムの一部としてクラウドサービスを利用している場合、クラウドサービスを管理するためにAPIゲートウェイを活用できます。クラウドサービスは管理用のAPIを提供しているため、仮想マシン(VM)インスタンスの起動・停止などのオペレーションやオートスケールの設定などをAPIから行うことができます。APIゲートウェイと組み合わせることで、クラウドサービスの操作や監査といった管理を一本化することができます。Managementは、Azureが提供するAPIゲートウェイのサービスです。ManagementはAzure上でPaaSの形態で提供されており、Azureポータルに統合されている管理コンソールからAPIの設定や管理を行うことができます。Managementには大きく分けて2つのロールが存在します。APIの作成や公開などを行う「管理者」とAPIを利用する側の「開発者」です。管理者は作成した1つ以上のAPIをまとめ、「成果物」としてAPIの製品化を行います。開発者はこの成果物に含まれているAPIを利用してアプリケーションを構築することができます。Managementは以下の3つの主要なコンポーネントから構成されています。Managementの中核となる機能です。横断的機能を備えています。・Azureポータル管理者がAPIをセットアップするために、Azureポータルを使用します。具体的には、APIスキーマの定義やインポート、APIの製品化、APIのポリシー設定、分析、ユーザー管理などを行います。Managementは開発者用のポータル画面を提供しています。開発者ポータルではAPIのドキュメントの参照やAPIのテスト、APIキーの取得などを行うことができます。Managementを操作しながら、APIの公開を行っていきます。Managementのサービスを新規作成します。サービスを選択します。サービスの作成」ボタンからサービスの新規作成画面に遷移します。サービスの作成」を選択する新規作成画面で必須項目を入力していきます。「名前」には任意の名前を入力します。ここで入力した名前がAPIゲートウェイとして公開されるエンドポイントURLとなります。「サブスクリプション」には、自分のサブスクリプションを選択します。「リソースグループ」、「場所」は任意のものを、「組織名」は開発者ポータルやメールでの通知に使用される名称です。任意の分かりやすい名称を入力します。「管理者のメールアドレス」にはデフォルトでは現在Azureにログインしているユーザーのメールアドレスが入力されています。管理者となる方のメールアドレスを入力します。Managementの利用プランを選択します。今回はサンプルのため「開発者」プランを選択します。サービスの作成を開始します。作成には少々時間がかかりますが、完了すると管理者宛にメールで通知されるのでしばらく待ちます。サービスのダッシュボード画面に遷移することができます。続いてAPIの定義を行っていきます。Managementから呼び出されるバックエンドAPIとして、Microsoftからサンプル用として提供されている「カンファレンスAPI」というAPIを利用していきます。このAPIは、技術カンファレンスのセッション内容やトピック、講演者などの情報を取得することができるサンプル用のAPIです。サービスのダッシュボード画面上のメニューから「API」の項目を選択すると、APIの追加画面が表示されます。Managementに追加することができるようになっています。specification」を選択します。App)からAPIをインポートすることも可能です。specification」というAPI追加画面が表示されますので、項目を入力していきます。specification」にはOpenAPIの仕様に沿って記述されたAPI仕様のURLあるいはファイルを選択します。今回は「http://conferenceapi.azurewebsites.net/?format=json」というカンファレンスAPIのOpenAPI仕様が記述されたURLを入力します。name」、「Name」、「Description」が入力されます。これらはAzureポータルや開発者ポータル上で表示されるAPIの名称や説明文として表示されるものです。suffix」には「conference」と入力します。suffix」は、URLのパスに使用されるもので必須項目ではありませんが、入力しておくことで今後別のAPIを追加する際にパス名が衝突してしまうといったトラブルを回避するために指定することをおすすめします。「Tags」はAPIに自由にタグを付けることで、Azureポータルや開発者ポータルからAPIを探す際のフィルター条件として使用することができる機能ですが、今回は未入力とします。「Products」では作成するAPIを含める製品を選択します。製品については後の手順で作成するので、ここでは未入力のままとします。API?」ではAPIにバージョンを持たせるかを選択することができます。APIにバージョンを持たせることによって、クライアントとサーバーのアプリケーション更新タイミングを分離できるようになります。今回はチェックを入れず、最後に右下の「Create」ボタンを選択してAPIの追加を実行します。API」が追加されているかと思います。API名の部分を選択すると、APIが持つすべての操作が表示されます。Managementに追加されました。管理者の場合、この画面からAPIの設定やテストの実行などを行うことができます。現時点ではカンファレンスAPIはどの成果物にも属していないためまだAPIを実行することはできません。先に成果物として、カンファレンスAPIを含む製品の作成を行います。Managementでは、1つ以上のAPIを含む「成果物」を作成することを製品化と呼びます。製品化された成果物に含まれたAPIを管理者、開発者が呼び出すことができるようになります。サービスのダッシュボードから「製品」を選択した画面で、「追加」ボタンを選択して「製品の追加」画面に遷移します。「表示名」、「ID」、「説明」に任意の内容を入力し、「状態」は「発行済み」を選択します。「発行済み」を選択した場合は開発者にもAPIが公開され、「未発行」を選択した場合は管理者のみがAPIを呼び出すことができます。この設定は後から変更可能です。次に「サブスクリプションを要求する」のチェックを外します。サブスクリプションを要求すると、開発者が成果物をを利用する前に、管理者による審査が行われるようになり、承認された開発者のみが成果物を利用できるようになる仕組みです。最後に「APIの選択」ボタンを選択して、この製品に追加するAPIを選択します。API」のみ選択します。製品の作成ここまで入力して「作成」ボタンを選択すると、製品が作成されます。これでAPIを呼び出すことができるようになりました。APIのテスト呼び出しカンファレンスAPIを成果物に含めたので、APIの呼び出しが可能になりました。API」を選択します。画面上部のタブから「Test」タブを選択して、「GetTopics」というAPIを選択します。APIクライアントが表示されます。ここではAPIにリクエストする際のリクエストパラメーターやリクエストヘッダーの編集を行うことができ、さまざまなパラメーターを使ってAPIの動作確認をすることができるようになっています。URL」に表示されているURLの通り、このクライアントが呼び出すのはカンファレンスAPIではなくAPIゲートウェイのAPIです。そのため、複数のバックエンドAPIをAPIゲートウェイで1つに集約したAPIや、APIゲートウェイによってレスポンス内容を書き換えているAPIなどの検証もここから行うことができるのです。今回はシンプルに単一のバックエンドAPI(GetTopics)が呼び出せるかを確認します。リクエストパラメーターやヘッダーは何も編集せずに画面下部にある「Send」を選択します。待つとAPIのレスポンスが表示されます。Response」という項目の下にAPIからのレスポンス内容が表示されています。OK」と表示されていれば、APIの呼び出しは成功です。このようにAzureポータル画面上から非常に簡単にAPIの呼び出しができることが分かったかと思います。この機能を使うことで、APIゲートウェイの構築、テスト、リファクタリングといった開発サイクルをスムーズに回すことができるようになっています。次は開発者ポータルからAPIを実行してみましょう。サービスのダッシュボードで「概要」を選択した画面の上部の「開発者ポータル」を選択すると、別タブで開発者ポータルの画面が表示されます。「API」タブを選択すると、参照可能なAPIの一覧が表示されます。API」を選択し、「GetTopics」のAPIを選択します。するとAPIの仕様を確認することができます。APIのクライアントツールが使用できるようになります。「Send」ボタンを選択すると、管理者ポータルと同様にAPIのレスポンスを確認することができます。開発者ポータルからAPIのテストを実行するこのように開発者ポータルでも、APIの仕様と動作確認を行えることが分かりました。現在は管理者としてAzureポータルにログインした状態から開発者ポータルに遷移したため、開発ポータル上も管理者権限でログインした状態となっています。サービスのダッシュボードの「ユーザー」からユーザーを追加し、「グループ」で追加したユーザーを「Developers」グループに追加させることで行うことができます。最後にAPIに流量制限を設定してみましょう。サービスのダッシュボードから「API」を選択し、「GetTopics」APIを選択して「Design」タブを表示します。Designタブには4つの大きな枠があります。ManagementがAPIゲートウェイとして公開するAPIに関する設定を行うエリアです。Managementを経由して実際に呼び出されるバックエンドAPIに関する設定を行うエリアです。Managementからクライアントへ返却するまでの間で差し込むことができる処理について設定を行うエリアです。Processing」の処理として設定を追加していきます。editor」を選択します。Editor」を選択すると、「GetTopics」APIのポリシー編集画面が表示されます。ここではXML形式でポリシーを記述していきますが、右側にあるポリシーのメニューから設定したいポリシーを選択することで、テンプレートを挿入することができます。XMLの編集画面で「inboundタグ」内の「base」タグの末尾でエンターキーを押して改行し、空白行にカーソルが置かれている状態にします。key」を選択して流量制限のポリシーテンプレートを挿入します。Editorでの流量制限の設定例テンプレート挿入後は、上図のように値を設定していきます。ここでは「calls」に「3」、「renewal-period」に「30」を設定しています。これにより30秒間に3回のAPI呼び出しまでは許可し、4回目以降は制限する設定となります。「counter-key」に設定した「context.Subscription.Id」によって、サブスクリプションID単位での流量制限のカウントとなるようにしています。ここまで記入したら、画面下部の「Save」を選択して編集を完了させます。開発者ポータルに戻り、流量制限がかかるかどうか確認してみます。it」を選択してAPIのテスト実行画面に移ります。パラメータはそのままで「Send」ボタンを選択します。Requests」となっていることを確認します。開発者ポータルでの流量制限の確認これで流量制限を確認することができました。content」に含まれるJSONの「message」フィールドには、流量制限が解除されるまでの時間が表示されています。記載されている時間が経過した後に再度「Send」を選択すると、再びAPIからデータが取得できるようになっていることも確認することができます。Managementについて説明しました。Managementには多岐に渡る機能が用意されていますので、サンプルのAPIを使って色々と試行錯誤して要件に合ったAPIゲートウェイの構築に近づけていくことをお勧めします。著/山田祥寛監修<WINGSプロジェクトについて>テクニカル執筆プロジェクト(代表山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・雑誌/Web記事の執筆、講演等を幅広く手がける。※本記事は掲載時点の情報であり、最新のものとは異なる場合があります。Corporation。