パート2: Azure App Serviceでの.NETではないAPIアプリの実行

前回のブログ ポスト (英語 / 日本語) では、API Appsとは何か、API Appsで何を構築できるか、API Appsがどのように動作するかについて少し詳しく説明し、FAQに対する回答を提供しました。もう1つの非常によくある質問は、「.NETではないAPIアプリを、どのように実行するか?」というものです。前回のブログ ポスト (英語 / 日本語) では、Azure App ServiceがどのようにしてAPIアプリのAPI定義を発見、理解し、Swagger 2.0エンドポイントを読み取ることで、ポータルでAPIアプリの機能を有効化するかについて説明しました。APIアプリに期待する構造は、単純です:

  • APIに関するいくつかのメタデータを備えた「apiapp.json」ファイル。
  • 「deploymentTemplates」フォルダーを含んでいる「Metadata」フォルダー。
  • deploymentTemplatesフォルダー内のappappconfig.azureresource.jsonファイル。プラットフォームは、「Metadata」フォルダーを今のところ使っていませんが、今後使う予定です。その時が来たら、このフォルダーが何をするか、さらに詳しく説明する予定です。

これらのファイルとフォルダーがルートに存在する場合、我々は適切にAPI定義を解析し、APIの機能を理解できます。我々がapiapp.jsonファイルに必要とする最小限のものは、次の通りです:

image

{
  "$schema": "http://json-schema.org/schemas/2014-11-01/apiapp.json#",
  "id": "APIAppTest",
  "namespace": "microsoft.com",
  "gateway": "2015-01-14",
  "version": "1.0.0",
  "title": "APIAppTest",
  "summary": "",
  "author": "",
  "endpoints": {
    "apiDefinition": "/swagger/docs/v1",
    "status": null
  }
}

endpointsオブジェクトとapiDefinitionプロパティに注意してください。このプロパティはSwagger 2.0エンドポイントを指しており、我々はそこからAPI定義を抽出します。このプロパティは、APIアプリのパスからの相対パスです。有効なSwagger 2.0エンドポイントがない場合、我々はAPI定義を解析できず、ポータルやロジック アプリでAPIアプリが適切に機能しません。

.NETではないAPIアプリを、どのように実行するか?

前に説明したように (英語 / 日本語)、基になるインフラストラクチャは基本的にはWeb Appsです。これは、Node.js、PHP、Python、JavaといったWeb Appsでサポートされているテクノロジであれば、好みのどんなテクノロジでも実行できることを意味しています。ここでは、Node.jsを使っていきます。App ServiceにAPIアプリであることを理解させるためには、前に説明したファイルが必要です (現時点では、apiapp.jsonだけです)。

Node.js APIアプリの構築

Node.js APIアプリを実行するには、Webアプリとしてデプロイする (英語 / 日本語 / 日本語) のと同じ手順に従い、App Serviceが必要とするファイルを追加します。次のようなファイル構造になるはずです:

image

前述の通り、App Serviceは現時点で「Metadata」フォルダーを使わないので、このフォルダーを作成しませんでした。これは、Expressフレームワークを使った単純なNode.jsアプリです。私は、いくつかの理由で、この例でExpressフレームワークを選択しました:

  • 使用して、テクノロジを示す何かを構築するのが、簡単です。
  • 見つけた他のモジュールは、Swagger 1.2をサポートしていますが、Swagger 2.0をサポートしていませんでした。App Serviceは、2.0を必要としているので、他のモジュールは動作しません。
  • 私が使ったモジュールは、PayPalによるswaggerize-express (英語 / 日本語) です。

App Service APIアプリのメタデータ ファイルであるapiapp.json、Swagger 2.0仕様ファイルであるapi.json、Node.jsアプリを開始するためにApp Serviceが実行するserver.js、デプロイするNode.jsアプリに関する情報を含んでいるpackage.jsonがあります。

var port = process.env.PORT || 1337;
var http = require('http');
var express = require('express');
var swaggerize = require('swaggerize-express');

var app = express();

var server = http.createServer(app);

app.use(swaggerize({
  api: require('./api.json'),
  docspath: '/api-docs',
  handlers: './handlers/pets'
}));

app.get('/', function (req, res) {
  res.send('Hello World!')
});
server.listen(port, 'localhost', function () {
  app.setHost(server.address().address + ':' + port);
});

server.jsコードは、Swagger 2.0仕様を含んでいるapi.jsonファイルを処理しています。api.jsonでは、REST API URLが /v1/petstore 形式になっています。

また、/api-docs が、Swagger 2.0メタデータがある場所だと指定しています。また、誰かがAPIにアクセスしようとした時のために、Expressルート向けのhandlersディレクトリを提供しています。最後に、REST APIではなくルートURIにアクセスしようとした時のために、単純な「Hello World!」メッセージがあります。

{
  "$schema": "http://json-schema.org/schemas/2014-11-01/apiapp.json#",
  "id": "PanosNodeApiApp",
  "namespace": "microsoft.com",
  "gateway": "2015-01-14",
  "version": "1.9.0",
  "title": "PanosNodeApiApp",
  "summary": "",
  "author": "",
  "endpoints": {
    "apiDefinition": "/v1/petstore/api-docs",
    "status": null
  }
}

apiapp.jsonファイルでは、メタデータとともに、Swagger 2.0メタデータの場所を指す、重要なapiDefinitionプロパティを提供しています。

APIアプリのデプロイ

リンク先のチュートリアル (英語 / 日本語 / 日本語) では、Gitを使ったデプロイ方法を説明しています。ここでは、Webアプリではなく空のAPIアプリを作成する必要があります。適切な名前を選択し、APIアプリを作成します。継続的デプロイを有効化する場所を見つけるためには、APIアプリ ホストを確認してください。APIアプリの「設定」でAPIアプリ ホストを見つけられます。Node.js APIアプリをデプロイするために、そこから、チュートリアルで説明されている手順に従ってください。

image

APIアプリへのアクセス

Gitでのデプロイが完了したら、同じデプロイの中で別のAPIアプリが実行中の場合は、ゲートウェイがAPIアプリから正しいメタデータ ファイルを取得するように、ゲートウェイを再起動する必要があります。別のAPIアプリがない場合は、ゲートウェイを再起動する必要はありません。APIアプリの「設定」でゲートウェイを見つけ、それをクリックしてください。上部のツールバーの「再起動」をクリックしてください。「API定義」(API Definition) をクリックすることで、すべてが正しく動作していることを確認できます。

image

開かれるブレードでは、次のように表示されるはずです:

image

APIアプリにアクセスするには、APIアプリの「設定」にある、microsoft-apiappGUID.azurewebsites.net 形式のURLを使えます。料金レベルがサポートしていれば、(他の機能に加えて) カスタム ドメインを有効化し、URLを美しくできます。

完了しました。コードはどこでしょうか?

完了しました! Node.js APIアプリがApp Service上で動作するようになりました。

GitHubリポジトリで、Node.js APIアプリを入手できます。

次は何でしょうか?

これは、API AppsとLogic Appsを説明する、一連のブログ ポストです。次のブログ ポストでは、ロジック アプリを使って、ASP.NET Web APIのAPIアプリとNode.jsのAPIアプリを統合する方法を説明する予定です。

それまでは、SDKをダウンロードし (英語 / 日本語)無料でプラットフォームで遊び始め、注目していてください!

質問がある場合は、遠慮なく私まで連絡してください。

関連情報

Leave a comment