IBM Bluemix だけの環境を使って、Web API を作り、公開して、更に API Management 機能を使って管理/監視する、というシステムを作ってみます。

これまでこのブログでも個別の機能を個別に紹介したりしていましたが、全てまとめたシステムを Bluemix 提供サービスだけを使って(外部サービスに頼らずに)行う、という前提条件で紹介します。もちろん実際には外部との連携も可能です、データベースは既存のものを使う、とかも可能、という意味です。


システム概要としての完成図は下図のような感じを想定します。まず格納するデータのデータベース(MySQL)と、その管理ツールとして phpMyAdmin(PHP ランタイム)を用意します。次にデータベース内のモデルを API として公開する LoopBack(Node.js ランタイム)。ここまでで CRUD の REST API ができますが、このサーバーは直接公開しません。加えてこの API を管理するため、API Management サービスでラッピングし、カスタム API を作って、これを利用者向けに公開します。それぞれ Bluemix 上のサービスアイコンと併せてのシステム図になっています:
2016020701


ではそれぞれのパーツを順に Bluemix 上に作っていきます。全部で3段階あります:

(1) MySQL と phpMyAdmin でデータベース環境を準備
2016020801

Bluemix 環境内に MySQL のデータベースサーバーを用意し、この中に API として管理するデータのモデル(テーブル)を作成します。MySQL の選択肢として ClearDB を使うこともできる(その場合は外部の MySQL コマンドラインクライアントから直接参照できる)のですが、今回はオープンソース版を使うことにします。オープンソース版では外部の MySQL コマンドラインクライアントからは参照できないので、テーブル定義のために PHP ランタイムと、そこで実行する phpMyAdmin の環境を構築します。そして phpMyAdmin から create table の SQL を実行して、モデルを作成します。

この Bluemix 環境内に MySQL データベースサーバーと phpMyAdmin アプリケーション環境を構築する際の手順についてはこちらで詳しく紹介しているので参照ください:
Bluemix で phpMyAdmin を動かす


(2) StrongLoop LoopBack で REST API 化

2016020802

StrongLoop LoopBack インスタンスを作り、先程作成した MySQL データベースをバインドして、モデルを CRUD 可能な REST API 化します。

StrongLoop 環境の構築方法や Bluemix ランタイムへのプッシュ方法、そしてデータベースとして MySQL を指定する場合の手順などは以下を参照ください:


ただし、この REST API はこのまま公開はしません。あくまでプライベートな REST API として作成し、公開する時は参照系 API のみ(GET リクエストの API のみ)を公開するようにします。


(3) API Management で公開する API を絞り、カスタム API 化して管理
2016020701

LoopBack で作成した REST API の参照系 API のみをプロキシー URL とするようなカスタム API を API Management サービスを使って作成し、このカスタム API を Bluemix ユーザー向けに公開します。

API Management サービスでカスタム API を作って公開する手順はこちらを参照ください。(2) で作成した LoopBack の REST API を、ここで公開するカスタム API のプロキシーとして利用するための手順です:
IBM Bluemix の API Management サービス



と、こんな感じ。特別に目新しい情報ではないのですが、Bluemix のランタイムやサービスを組み合わせるだけで負荷に合わせてオートスケールする API を生成し、かつその API の制御管理を行う、という仕組みが構築できました。