目次


IBM API Connect 入門

APIの作成・実行・カスタマイズを実践してみる

この記事では、APIを簡単に作成・公開・利用するためのプラットフォームであるIBM API Connect (以下API Connect)の利用イメージを解説します。APIエコノミーの中で、API管理系のソフトウェアが実際にどのように使われるかを具体的な手順を交えてご紹介することで、APIと、API Connectを身近に感じて頂く事を目的としています。また、API Connectは特に構成コンポーネントと提供形態およびコンポーネント間の関連が多様で、柔軟に組み合わせて構成が可能である一方、全体像の理解に時間がかかると言えなくもありません。この記事は読者の皆さんの理解の一助となる事をもうひとつの目的としています。それでは、エンジョイAPI !

1

API Connect とは?

(ア) そもそもAPIとは?

近年では、様々な記事でAPIについての解説を見ることが出来ます。それらが揃って指摘しているのは、より速くなるビジネスのライフサイクルにシステム側の変革も追いつく必要があり、そのイネーブラーとなる技術要素のひとつとしてAPIが挙げられている、という点です。ここでのAPIのコンテキストは、既存のアセットを公開して、REST APIを介してそのアセットを利用するというものです。概念自体は、アセットの再利用を目的としたもので特に新しいものではありませんが、今このタイミングで話題となっているのは、APIの作成、公開、管理が非常に洗練されたやり方で利用できるようになってきているという技術的な背景や、DevOpsの概念の浸透、マイクロサービスの概念の隆盛とも関わりがあると考えられます。より詳細な概念の理解については、以下のシリーズ記事が参考になります。

マイクロサービスの実際

(イ) API Connect で何ができるのか?

さて、IBMにおいては、API管理を行うための製品として、2016年3月にIBM API Connect 5.0をリリースしています。

API Connectは、API 管理のための機能を、以下のようにCreate / Run / Manage / Secure という4つの視点でまとめています。

図1 IBM API CONNECTが提供する4つの機能カテゴリ

APIを新規で作成する場合と、既存のAPIを利用・公開する場合では、ツールに求められる要件も当然変わってきます。APIの管理を行う際に求められる機能を、このAPI Connectは統合的に提供しています。

まず、新規でAPIを作成する場合には、最近のモダンなWebアプリケーションと同じ様に、短いサイクルで継続的な改修を行うようなライフサイクル管理機能がツールに求められます。

また、既存システムAPIを利用する場合は、これらが提供する機能をAPIを介して呼び出せるように公開し、呼び出しの結果を会話的APIが操作できるような形に変更する必要があります。

更に、APIの処理を支えるランタイムもAPIコールの量に応じて拡張可能である必要があります。APIがどれくらいコールされるのかというのはある程度予想は出来ても、実際のビジネスの伸び具合によっては予想を大幅に上回る可能性も出てきます。

このようなAPIのフル・ライフサイクルの管理を、全てAPI connectの管理機能で担う事ができるわけです。この記事の後半では、特にCreate / Run の部分に特化してAPI Connectを解説します。

(ウ) API Connect全体像

まずは、API Connectをコンポーネント / トポロジーの視点から見ることで、全体像を把握していきましょう。

①コンポーネント視点

API Connectを構成するコンポーネントには、以下があります。簡単な説明を交えて列挙します。

  1. APIランタイム

    APIを実行するランタイムです。API Connectでは、Node / Javaが利用できます。また、これらをクラスター化して可用性、拡張性を持たせる構成とするために、コレクティブという構成をとることも可能です。コレクティブを管理するコンポーネントとして、コレクティブ・コントローラーがあります。

  2. API ゲートウェイ

    APIゲートウェイはアーキテクチャー・スタイルとして一般化されて扱われていますが、API Connectにおいてももちろん登場します。APIのトラフィックをセキュアに制御できるように、ポリシーを適用します。

  3. 管理サーバー

    構成される各サーバーの運用および、各サーバー管理のインターフェースとなるツールを提供します。APIやユーザー情報の管理、分析機能も提供します。具体的には、以下の様なインターフェースを提供しています。

    (ア) APIマネージャー
    API管理インターフェースを提供します。このUIを通じて、APIを外部に公開するために必要な管理を行います。

    (イ) 開発者ポータル
    開発者がAPIの検出、使用のために利用するインターフェースです。その他、追加機能 (フォーラム、ブログ、コメント、およびレーティング) も提供しています。

    (ウ) Cloud マネージャー
    オンプレミスで運用する場合にAPI Connectクラウドの構成・管理・モニターを行うためのUIです。

  4. デベロッパー・ツールキット

    デベロッパー・ツールキットには、API Designer ユーザー・インターフェースとコマンドラインインターフェースが含まれており、これらを使用して、Node.jsで稼動する API アプリケーションを開発します。APIの作成には、LoopBackというフレームワークを使用し、容易にAPIを作成できます。

いかがでしょうか?APIの統合管理を行うという事で、複数のコンポーネントがそれぞれの役割・機能を連携する必要が出てきます。統合管理として何をする必要があるか、例のCreate / Run / Manage / Secureの観点で捉えると、どんな役割を担うコンポーネントが必要か連想しやすいのではないでしょうか。

そして・・・上記のCloudマネージャーなどの記述から、薄々気がついている方もいらっしゃるかもしれませんが、API Connectは、オンプレミスの環境に構成して利用する形態と、Bluemix上のパブリックなサービスを利用する形態をとることが出来ます。当然ですが、どちらの利用形態をとるかによって、上記のコンポーネントの構成や提供形態も大きく変わってきます。次にトポロジー視点から見てみる事によって、どのようにコンポーネントの構成が変わってくるか見てみます。

②トポロジー視点

次に、これらのコンポーネント配置、それぞれどのように連携するのか、および、各コンポーネントはどのような形態で提供されるのか、という観点で見てみましょう。これらを図2に示してみました。

図2 コンポーネントの配置と実装

管理サーバーは、Bluemixなどのパブリックなサービスを利用するか、オンプレミスで構築する場合は仮想イメージから起動して利用することになります。開発者は、この管理サーバーが提供する各種ユーザー・インターフェースにアクセスすることで、APIの管理を行うことになります。Bluemix利用の場合は、これらの管理インターフェースもBluemixのサービスが提供します。

実際のAPIランタイムとしては、WASの新しい形態の軽量ランタイムLibertyを利用するか、Node.jsを利用することになります。Node.js上では、LoopBackを利用して実に簡単にAPIを作成することが出来ます。(この記事の後半はこの簡単さを実感して頂くためのものです。)

API Connectのエディションは、Essentials、Professional、Enterpriseの3つがありますが、Professional、Enterpriseでは、これらランタイムをコレクティブと呼ばれるクラスター構成することによって可用性を確保することが出来ます。また、トラフィックが増えた場合には動的にサーバーを追加して拡張を行うことも可能です。もちろん、Bluemixを利用する場合はランタイムも雲の上のBluemix上で提供されることになります。

もうひとつ、APIゲートウェイも2種あります。エディションによって利用するAPIゲートウェイも異なります。基本的にオンプレミスでの開発用や小規模の利用など、Essentials、Proessionalエディションの利用においてはマイクロゲートウェイを、Enterpriseエディションなどの大規模構成においてはDataPowerゲートウェイを利用します。

さあ、なんとなく、APIを作って管理して実行する仕組みに馴染んできたでしょうか?次はいよいよ本記事のメインコンテンツである、API作成の実践です。

2

作ってみようAPI

では、実際にAPIを作ってみましょう。お手元のPCをAPI Connectを利用したAPI開発環境とする前提で話を進めます。

本記事では、IBMが提供するPaaS (Platform as a Service)のクラウド・ソリューションであるBluemix (参考リンク[1])上のdashDBと呼ばれるDB2互換のデータベース・ソリューションをバックエンドのRDB (リレーショナル・データベース)リソースとして利用し、APIを作成・外部公開するまでのステップをご紹介していきます。

事前準備

(ア) Bluemixのアカウント取得とバックエンド・サービスの作成
Bluemixを利用するためには、まずはアカウント登録が必要です。Bluemixのトップ・ページ (図3)にアクセスし、「無料アカウントの作成」をクリックし、指示に従ってアカウントを作成してください。

図3 Bluemixのトップページ

アカウント作成が完了し、BluemixにログインできたらdashDBサービスのインスタンスを作成します。カタログ画面の「データ&分析」カテゴリーにあるdashDBを選択し、デフォルトの設定のまま画面をスクロールして「作成」をクリックしてください。

図4 Bluemixのカタログ画面(データ&分析カテゴリー)

dashDBのインスタンスが作成されたら緑色の「LAUNCH」ボタンが画面に表示されるので、クリックします。すると、dashDBの管理画面が表示されます。

図5 dashDBコンソールのトップ画面

今回利用するテーブルを作成しましょう。まず、左側の「Tables」をクリックし、テーブルの管理画面を表示します。次に、「Add table」ボタンをクリックし、テーブルの新規作成を行います。

図6 dashDBコンソールのテーブル管理画面

作成画面で、Devテーブルを作成するためのDDLを貼り付け、「Run DDL」をクリックします。

表1. 実行するDDL
CREATE TABLE "Dev" 
 (
   "id" INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CACHE),
   "NAME" VARCHAR(5),
   "MSG" VARCHAR(10) 
 ) ORGANIZE BY ROW;

DDLの実行が完了したら、画面右の「Table Name」のプルダウンリストから「Dev」を選択すると、テーブルの定義が表示されていることが確認できます。これでテーブルの準備は完了です。

図7 作成したテーブルのテーブル定義

最後に、dashDBへの左側のメニューから、[Connect] > [Connect Information]を選択します。「Connection without SSL」タブにデータベースへの接続情報が表示されますので、以下のように手元にメモしておきます。

表2. dashDBへの接続情報
項目
ホスト名 awh-yp-small02.services.dal.bluemix.net
ポート 50000
ユーザー名 dash111015
パスワード XXXXXXX
データベース BLUDB
スキーマ名 DASH111015 (ユーザー名を大文字に変更)

(イ) API Connectサービスのインスタンスの作成
次に、BluemixのAPI ConnectサービスのインスタンスをdashDBと同様に作成します。再びBluemixのコンソールに戻り、カタログ画面の「API」カテゴリーを表示して「API Connect」を選択します。その後、デフォルトの設定のまま、画面をスクロールし、「作成」をクリックしてください。

図8. Bluemixのカタログ画面(API)

作成が完了すると、以下のようなAPI Connectの管理画面が表示されます。「Launch API Manager」をクリックし、API Managerコンソールが表示されることを確認してください。

図9. API Connectの管理画面

API Managerコンソールのダッシュボード画面が表示されます。デフォルトでSandboxカタログが表示されています。

図10. API Managerコンソールのダッシュボード画面

本記事では、このSandboxを使用せず、新規にカタログを作成します。画面左上の[作成] > [カタログの追加]を選択します。そして、表示名/名前を入力し、「追加」をクリックします。本記事では、「developerWorks」という名前のカタログを作成しておきます。

図11. カタログの作成画面

作成完了後、ダッシュボード画面に追加したカタログが表示されます。このカタログは、APIをユーザーに公開する際に使用します。

図12. API Managerコンソールのダッシュボード画面にカタログが追加される

ここまでが下準備です。それでは、実際にAPIを作成してみましょう。

APIの作成

(ア) 準備: デベロッパー・ツールキット(The developer toolkit)の導入
まず、デベロッパー・ツールキットを導入します。このToolkitには以下が含まれます:

API Connect command line tool (apic)
API Connect graphical editor
Local API Connect Micro-gateway

実際にこれらを導入する前に、Node.js (バージョン0.12あるいは4.x)を導入し、PATHを事前に通しておきます。コマンドプロンプト(ターミナル)でnpmコマンドが実行できれば、準備は完了です。以下のnpmコマンドを叩きます。

 
$ npm install -g apiconnect

コマンドの実行が完了したら、apicコマンドを打鍵してみましょう。コマンド・ヘルプが出力されればひとまず導入は完了です。

 
$ apic

なお、実行中にnode-gypモジュールがエラーを出力する場合がありますが、それは導入に必要な依存モジュールが導入されていないために表示されるエラーであり、導入されていない依存モジュールはその場で導入されることになりますので、慌てないように。

(イ) LoopBackプロジェクトの作成
次に、LoopBackプロジェクト、すなわち開発したいAPIを提供するアプリの雛形を作成します。適当なディレクトリー上で以下のコマンドを打鍵します:

 
$ apic loopback

そして、以下のように対話形式でプロジェクトのセットアップを行います。

1. アプリケーション名を入力し、[Enter]を打鍵します

今回のアプリ名は「devWorks」とします。

 
? What's the name of your application? (XXXX) devWorks

2. プロジェクト名を入力し、[Enter]を打鍵します

プロジェクト名を任意に指定します。本記事では「devWorks」とします。プロジェクト名に全角文字や、スペース(“ ”)、スラッシュ("/"), アンド("&"), プラス("+"), パーセント("%"), コロン(":")は使用しないように注意してください。

 
? Enter name of the directory to contain the project: devWorks
   create devWorks/
     info change the working directory to devWorks

3. アプリのテンプレートを[>]で選択し、[Enter]をクリックします

ビルトインのサンプル・プロジェクト(hello-world, notes)か、空のプロジェクト(empty-server)かが選べます。本記事では空のプロジェクトを選択します。

 
? What kind of application do you have in mind? 
> empty-server (An empty LoopBack API, without any configured models or datasources) 
  hello-world (A project containing a controller, including a single vanilla Message and a single remote method) 
  notes (A project containing a basic working example, including a memory database)

1 - 3.の処理が完了すると、あとはツールが自動で関連npmモジュールの導入やディレクトリーを作成してくれます。以下のような結果が返ることを確認します。

 
I'm all done. Running npm install for you to install the required dependencies. If this fails, try running the command yourself.

   create .editorconfig
   create .eslintignore
   create .eslintrc
   create server/boot/root.js
   create server/middleware.json
   create server/middleware.production.json
   create server/server.js
   create .gitignore
   create client/README.md
:
Created devWorks-product.yaml product definition [devworks:1.0.0]

Next steps:

  Change directory to your app
    $ cd devWorks

  Create a model in your app
    $ apic create --type model

  Compose your API, run, manage, enforce and deploy it with API Connect
    $ apic edit

  Run the app
    $ apic start

これで、LoopBackプロジェクトが作成されました。空のプロファイルの場合、以下のようなディレクトリー構造のプロファイルが作成されます。

 
/<Loopback プロジェクト・ディレクトリー>
├── /client
│   └── README.md
├── /definitions
│   ├── devWorks-product.yaml
│   └── devWorks.yaml
├── /node_modules
│   ├── /compression
│   ├── /cors
│   ├── /eslint
│   ├── /helmet
│   ├── /loopback
│   ├── /loopback-boot
│   ├── /loopback-datasource-juggler
│   ├── /nsp
│   └── /serve-favicon
├── package.json
└── /server
    ├── /boot
    ├── config.json
    ├── datasources.json
    ├── middleware.json
    ├── middleware.production.json
    ├── model-config.json
    └── server.js

(ウ) LoopBack Connectorを追加する

次に、バックエンド・リソースに合わせて適切なLoopBack Connector をプロジェクトに追加します。

LoopBack Connectorとは、APIを提供するアプリがDB2やOracle DBなどのバックエンド・リソースにアクセスするためのモジュールです。代表的なものとして、以下のものが挙げられます:

表3. データソースとコネクター
データソースコネクター・パッケージ
データベース・コネクター
Cloudantloopback-connector-cloudant
DB2 / dashDBloopback-connector-db2
Microsoft SQL Serverloopback-connector-mssql
MongoDBloopback-connector-mongodb
MySQLloopback-connector-mysql
Oracleloopback-connector-oracle
PostgreSQLloopback-connector-postgresql
その他のコネクター
SOAP web servicesloopback-connector-soap
REST web services loopback-connector-rest
SOAP web servicesloopback-connector-soap
REST web services loopback-connector-rest

DB2やOracle DB, SQLLiteなど、一部のConnectorを導入する場合、C/C++コンパイラー環境を追加で整える必要があります。環境別に、以下のモジュールを追加で導入します:

表4. DB2コネクター導入のために必要な追加モジュール群
WindowsLinuxMac OS X
Microsoft .NET Framework 4Python v2.7Python Releases for Mac OS X
Visual Studiomake  
Python v2.7.10C/C++ コンパイラー・ツールチェーン (例えば、GCC)。  
Microsoft Windows SDK for Windows 7  

この他にもコミュニティー版のLoopBうack Connectorも提供されています。もし、使用したいConnectorがない場合、loopback-datasource-jugglerをベースに自作することも可能です。

今回は、DB2互換のdashDBに接続したいので、loopback-connector-db2をプロジェクトに追加します。以下のコマンドでnpmパッケージを追加してください:

 
$ npm install loopback-connector-db2 -save

(エ) データソース(datasource)を作成する
次に、データソースを定義します。データソースはCloudant, DB2やOracle DBなど、バックエンド・リソースに合わせて定義する必要があります。本記事では、DB2互換のdashDBをバックエンド・サービスとするため、DB2のデータソースを定義します。

まず、コマンドプロンプトで以下のコマンドを打鍵します。

 
$ apic create --type datasource

そして、以下のように対話形式でデータソースのセットアップを行います。

1. データソース名を入力し、[Enter]を打鍵します。

本記事では、データソース名として「dev-db2」を指定します。

 
? Enter the data-source name: dev-db2

2. データソースのコネクターを指定します。

接続したいバックエンド・リソースに合わせたコネクターを指定します。本記事では「IBM DB2」を選択します。

 
? Select the connector for dev-db2: 
  In-memory db (supported by StrongLoop) 
> IBM DB2 (supported by StrongLoop) 
  IBM Cloudant DB (supported by StrongLoop) 
  MongoDB (supported by StrongLoop) 
  MySQL (supported by StrongLoop) 
  PostgreSQL (supported by StrongLoop) 
  Oracle (supported by StrongLoop) 
(Move up and down to reveal more choices)

3. データベースの接続情報を入力します。

事前準備で控えておいた、dashDBの接続情報を指定します:

 
? Select the connector for dev-db2: IBM DB2 (supported by StrongLoop)
Connector-specific configuration:? Connection String dsn to override other settings (eg: DATABASE=MY_DB;HOSTNAME=
MY_HOST;PORT=MY_PORT;PROTOCOL=TCPIP;UID=MY_UID;PWD=MY_PWD)): 
? host: awh-yp-small02.services.dal.bluemix.net
? port: 50000
? user: dash111015
? password: XXXX
? database: BLUDB

1. - 3.の処理を実施すると、データソースの定義の作成が完了します。ただ、このままでは動作しないので、server/datasource.jsonを開き、データソースを編集します。以下の例を参考に、schema, uselimitOffset, supportDashDBを設定します。

 
$ cat server/datasources.json 
{
  "dev-db2": {
    "host": "awh-yp-small02.services.dal.bluemix.net",
    "port": 50000,
    "database": "BLUDB",
    "password": "XXXX",
    "name": "dev-db2",
    "dsn": "",
    "user": "dash111015",
    "connector": "db2",
    "schema": "DASH111015",
    "useLimitOffset": false,
    "supportDashDB": false
  }
}

以上で、dashDBをDB2として接続するためのデータソースの設定が完了しました。

(オ)モデルを作成する

APIを作成するために、モデルを定義します。

まず、コマンドプロンプトで以下のコマンドを打鍵します。

 
$ apic create --type model

そして、以下のように対話形式でモデルのセットアップを行います。

1. モデル名を入力し、[Enter]を打鍵します。

本記事では、モデル名として「Dev」を指定します。この名前は、事前準備で用意したdashDBのテーブル名と同じである必要があります。「モデル名=データベースのテーブル名」であることを心に留めておきましょう。

 
? Enter the model name: Dev

2. 使用するデータソースを選択し、[Enter]を打鍵します。

先ほど作成した、DB2/dashDB用のデータソース「dev-db2」を選択します。

 
? Select the data-source to attach undefined to: 
> dev-db2 (db2) 
  (no data-source)

3. モデルの基本クラスを選択し、[Enter]を打鍵します。

ビルトインで提供されるモデルは、生成したいREST APIの構造別に複数の種類が提供されています。例えば、トークンを発行するようなREST APIを作成したい場合は、モデルとしてAccess Tokenを選択します。詳しくは参考リンク[X]を参照してください。「PersistedModel」選択してください。

 
? Select model's base class (Use arrow keys)
  Model 
> PersistedModel
  ACL 
  AccessToken 
  Application 
  Change 
  Checkpoint 
(Move up and down to reveal more choices)

4. REST APIを生成するかを選択し、[Enter]を打鍵します。

今回は「Y」を入力します。

 
? Expose Dev via the REST API? (Y/n) Y

5. 複数形のカスタマイズは不要とし、そのまま[Enter]を打鍵します。

 
? Custom plural form (used to build REST URL):

6. 共通モデルとするか否かを選択し、[Enter]を打鍵します。

本記事では「common」を選択します。

 
? Common model or server only? 
> common 
  server

7. モデルに対するプロパティーを設定します。

モデルに対し、プロパティーおよびプロパティーの属性(必須項目か否かの指定, デフォルト値)を定義します。

事前準備で作成したdashDBのテーブルの項目に合わせて、プロパティーとしてNAMEおよびMSGを定義します。ともに指定が必要な必須項目のString値として定義してください。

 
Let's add some Dev properties now.

Enter an empty property name when done.
? Property name: NAME
   invoke   loopback:property
? Property type: string
? Required? Yes
? Default value[leave blank for none]:

Let's add another Dev property.
Enter an empty property name when done.
? Property name: MSG
   invoke   loopback:property
? Property type: string
? Required? Yes
? Default value[leave blank for none]:

ひたすらプロパティー設定がループされますが、プロパティー名を空のまま[Enter]を打鍵すると、モデルの定義が完了し、指定した内容でモデルが作成されます。

 
Let's add another Dev property.
Enter an empty property name when done.
? Property name: 
Done running loopback generator

Updating swagger and product definitions
Created /XXXX/devWorks/definitions/devWorks.yaml swagger description

以上でAPIの作成が完了しました。実際に動かしてみましょう。

APIのテストと公開

(ア) API Designerの起動

以下のコマンドを打鍵し、API Designerを起動します。正しく起動されると、お使いのWebブラウザーが起動します。

 
$ apic edit
Express server listening on http://127.0.0.1:9000
図13. API Designerのログイン画面

[Sign in with Bluemix]をクリックすると、Bluemixのログイン画面が表示されます(すでにログイン済みの場合はシングル・サインオンが有効となり、ログインは省略されます)。

図14. API DesignerのAPI画面

このAPI Designer上でもデータ・ソースやモデルの定義が可能です。[データ・ソース]をクリックすると、作成したデータ・ソースが一覧で表示され、新規作成や設定変更、テスト接続がWebブラウザー上で可能になります。

図15. API Designer上のデータソース一覧および詳細画面

同様に、[モデル]をクリックすると、作成したモデルが一覧で表示され、新規作成や設定変更がWebブラウザー上で可能です。

図16. API Designer上のモデルの一覧および詳細画面

(イ) ローカルでのAPIのテスト

さて、実際に作成したモデルから、APIが正しく稼働するかどうかをテストしてみます。画面右側にある[探索]をクリックすると、作成されたAPIのAPIドキュメントが表示されます。

図17. API Designer上のAPIドキュメント

実際にローカルでAPIを動かし、動作確認するためには、画面左下にある実行アイコンをクリックします。すると、バックエンド・リソースと接続するための処理を実行するアプリと、APIゲートウェイとしてAPIを公開するためのプロキシーの役割を果たすMicro Gatewayが起動します。以下のようにRunningステータスが表示されればAPIのテストの準備は完了です。

図18. APIおよびMicro Gatewayのステータス確認

起動後、APIマニュアルにしたがい、APIを呼び出します。例えば、データベース上のテーブルにエントリーを追加するためのAPIをcurlを使用して呼び出してみると、以下のような結果を得ます:

 
$ curl -k --request POST \
>   --url https://localhost:4002/api/Devs \
>   --header 'accept: application/json' \
>   --header 'content-type: application/json' \
>   --header 'x-ibm-client-id: default' \
>   --header 'x-ibm-client-secret: SECRET' \
>   --data '{"NAME":"Bob","MSG":"Hello"}'
{"NAME":"Bob","MSG":"Hello","id":1}

実際にdashDBのテーブルを確認すると、テーブルにエントリーが追加されていることが確認できます。

図19. dashDB上のコンソール画面で動作確認

他にもいろいろ確認し、問題がなければ画面左下の停止アイコンをクリックし、Micro Gatewayとアプリを停止しておきましょう。

(ウ) APIの公開プランの作成

デフォルトでは1時間につき100 APIコールまでの制限を与えるDefault Planが定義されていますが、必要に応じて新しいAPI公開プランを作成することが可能です。図表20. のように1時間に5 APIコールまでの制限を与えるSmall Planを作成し、右上の保存アイコンをクリックします。

図20.プランの作成

(エ) APIの公開その1

それでは、テスト済みのAPIをBluemix上に公開していきましょう。画面右上の公開アイコンをクリックし、「ターゲットの追加および管理」をクリックします。そして、「IBM Bluemix ターゲットの追加」をクリックします。

図21.APIの公開

「組織およびカタログの選択」画面で地域(Region), 組織 (Organization), およびカタログを選択します。カタログは事前準備で作成した「developerWorks」を選択し、「次へ」をクリックします。

図22. 組織およびカタログの選択画面

次に、APIを公開するためのアプリをBluemix上で動かすための設定を行います。Bluemixアプリケーションの選択画面下の「Type new application name」で任意の名前を入力します。

図23. Bluemixアプリケーションの選択画面

公開するターゲットの追加が完了したら、実際にまずはBluemix上にアプリケーションをデプロイします。再び「公開」アイコンをクリックし、上記で作成したターゲットを選択します。そして、「Publish application」のみにチェックを入れ、「公開」をクリックします。

図24. 組織およびカタログの選択

画面上に「成功 Successfully published application」が表示されたら、コマンド・プロンプトを確認します。標準出力にAPI target urlsに表示されていますので、そのURLをメモに控えておきます。

 
Logged into us.apiconnect.ibmcloud.com successfully
Deploying to Bluemix
...preparing project
...building package for deploy
...uploading package
Runtime published successfully.

Management URL: https://new-console.ng.bluemix.net/apps/<UUID>
API target urls: 
apiconnect- <UUID>.<組織名>-<スペース名>.apic.mybluemix.net
API invoke tls-profile: client:Loopback-client

(オ) APIの公開その2

次にAPI Manager上のカタログに製品/APIを登録します。そのために、まずはローカルで稼動しているAPI Designerの画面上の「API」をクリックし、API(本記事ではdevWorks)を選択します。そして「アセンブル」をクリックし、ポリシー・アセンブリー画面を開きます。

図25. APIのポリシー・アセンブリー画面の表示

はじめに、画面左側にある「Micro Gateway policies」から「DataPower Gateway policies」に選択を切り替えます。また、画面中央のinvokeポリシーをクリックし、URLの項目に「<メモしたURL>$(request.path)」、TLSの項目に「client:Loopback-client」を入力し、設定を保存します。

あとは、Bluemixに公開するだけです。先ほどと同様に公開アイコンをクリックし、ターゲットを選択します。そして、公開に関しては「Publish application」だけでなく、「Stage or Publish products」,「特定の製品の選択」にチェックを入れ、製品名(本記事ではdevWorks)を選択し、「公開」をクリックします。

図26. アプリケーションの作成と製品/APIの公開

以上でAPIの公開処理が完了しました。事前準備で用意したBluemixで稼動するAPI Managerのダッシュボードにある、「developerWorks」カタログをクリックすると、「製品」に公開した「devWorks」が一覧に表示されていることが確認できます。

図27. 公開された製品/APIの確認

最後に、公開したAPIが利用可能になるように、開発者ポータルのセットアップを行います。

開発者ポータルのセットアップとAPIの公開

(ア) 開発者ポータルのセットアップ

公開したAPIをサブスクライブして、実際にアプリ開発者が利用可能とするために、開発者ポータルを有効化します。

  • まず、BluemixのAPI Managerのダッシュボード画面にある「developerWorks」カタログを選択し、「設定」画面を開きます。そして、「ポータル」タブを開き、ポータル構成欄で「IBM 開発者ポータル」を選択します。また、ユーザー・レジストリーの選択は「SAML」を選択し、画面右上の「保存」をクリックします。
図28. 開発者ポータルの有効化
図表X. ユーザー・レジストリーの指定

(イ) 開発者の登録

次に、「開発者」タブを開き、「Bluemix 組織」をクリックします。表示される画面で、今回は自身のEメール・アドレスを入力し、「追加」をクリックします。その後、自分のEメール・アドレス宛にタイトルが「IBM API Connectへようこそ」のメールが届きます。本文にあるリンクをクリックし、画面の指示に従って公開する組織を選択します。

図29. 組織の選択

以上でユーザーの追加は完了です。API Managerコンソール上開発者に自分自身が追加されたはずです。

図30. 開発者の追加

(ウ) 開発者に対するAPIの公開

最後のステップです。「製品」タブに移動し、公開中の製品(今回の場合はdevWorks)のメニューをクリックし、「可視性およびサブスクライバーの編集」をクリックします。

図31. 製品の公開

[表示可能], [サブスクライブ可能者]はともに「カスタム」を選択し、入力フィールドには登録されている開発者のEメール・アドレス(今回の場合は自身のEメール・アドレス)を指定します。開発者をそれぞれ指定したら、「再公開」をクリックし、設定を保存します。

図32. 可視性およびサブスクライバーの編集

以上でAPI公開の準備は全て完了しました。あとはAPIを利用するだけです。

APIの利用

(ア) 開発者ポータルの起動

全ての設定が完了していれば、BluemixのAPIカテゴリー画面の「APIの探索」タブに公開したAPIが表示されるはずです。このAPIをクリックすると、開発者ポータルに遷移します。

図33. Bluemixコンソール上でのAPIの探索

開発者ポータルはBluemixとシングル・サイン・オンでログインされます。もし、画面にエラーが表示されたら、画面右上の「login」をクリックし、再度ログインを実施してみてください。

図34. 開発者ポータルのAPI説明画面

(イ) アプリケーションの作成

APIをサブスクライブして使用可能とする前に、APIを呼び出すためのクライアントIDおよびシークレットを生成します。開発者ポータル上「アプリケーション」を選択し、「新規アプリケーションの作成」をクリックします。そして、アプリケーション名は任意で設定し、「送信」をクリックするとクライアントIDおよびシークレットが生成されます。それぞれ、表示にチェックを入れて、表示される文字列をメモに控えておきます。

図35. 開発者ポータルでのアプリケーションの作成

(ウ) APIのサブスクライブ

開発者ポータルの「API製品」をクリックし、公開されているAPI (今回の場合はdevWorks)をクリックすると、APIのドキュメントが表示されます。このAPIをサブスクライブしたい場合は、画面をスクロールし、プランのフィールドでサブスクライブしたいプランを選びます。今回は作成した「Small Plan」の「配信登録」をクリックします。そして、上記で作成したアプリケーションを選択し、「配信登録」をクリックすれば、APIの利用の準備は完了です。

図36. API製品のプランの選択と配信登録

(エ) APIの利用

実際にAPIを呼び出し、動作確認を行ってみましょう。まずはdashDB上にあるテーブルのエントリーを取得するAPIを実行します。URLは「https://api.us.apiconnect.ibmcloud.com/{組織名}-{スペース名}/{カタログ名}/api/Devs」を指定(あるいはAPIドキュメントを確認)し、クライアントIDおよびシークレットをそれぞれ「x-ibm-client-id」, 「x-ibm-client-secret」に指定してリクエストを送信すると、API公開前に作成したエントリーが取得できるのが確認できます。

 
$   curl -k --request GET \
>     --url 'https://api.us.apiconnect.ibmcloud.com/{組織名}-{スペース名}/{カタログ名}/api/Devs' \
>     --header 'accept: application/json' \
>     --header 'content-type: application/json' \
>     --header 'x-ibm-client-id: {クライアントID}'\
>     --header 'x-ibm-client-secret: {クライアント・シークレット}'
[{"NAME":"Bob","MSG":"Hello","id":1}]

同様に、 テーブルに新しいエントリーを作成するAPIを同様に実行し、問題なく実行完了することを確認します。

 
$ curl -k --request POST \
>     --url 'https://api.us.apiconnect.ibmcloud.com/{組織名}-{スペース名}/{カタログ名}/api/Devs' \
>     --header 'accept: application/json' \
>     --header 'content-type: application/json' \
>     --header 'x-ibm-client-id: {クライアントID}'\
>     --header 'x-ibm-client-secret: {クライアント・シークレット}'
>       --data '{"NAME": "Alice", "MSG": "Bye"}'
{"NAME":"Alice","MSG":"Bye","id":2}

そして、5回を超えてAPIを試すと、今回サブスクライブしたプランは1時間当たり5回までAPIコールが可能なプランなので、実行釣果エラーが確認できるはずです。APIのコール制限もこれで確認できました!!


ダウンロード可能なリソース


関連トピック

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=1039461
ArticleTitle=IBM API Connect 入門
publish-date=11142016