※ これから記載する事項は、私が所属する会社とは切関係のない事柄です。
今回は私自身初めてMuleSoftに触れてみました。MuleSoft はかなりドキュメントが豊富で、基礎は公式ドキュメント「チュートリアル: API ビルドの最初から最後まで」を見ればかなりわかりますので、割愛します。
今回の記事では MuleSoft から B2C Commerce を利用してみる前に、基礎を知った上でよくありそうな設定として、設定ファイルを環境で分ける設定、Basic 認証の設定、 HTTPS の設定をやってみたので紹介させていただきます。
前提
- 今回自身のローカル環境で使用した Anypoint Studio は Version 7.12.0 を利用しています。
- 設定の方法は複数存在しますが、今回紹介しているのはあくまで一部の方法です
目指す API
今回目指す API は /api/postman/{id}
のフォーマットのエンドポイントに対して任意の JSON オブジェクトと q
と言うクエリを指定するとその値をレスポンスとして返すものです(最終的にPostman使って確認するので postman
と言う文言が入っています)。さらに、CloudHub へデプロし、HTTPS で繋げるようにし、Basic 認証をかけるようにします。
サンプルリクエスト
REQUEST:
POST /api/postman/0001?q=ABC
Host: hogehoge.sample-trial-api.us-e2.cloudhub.io
Authorization: Basic {credential}
REQUEST BODY:
{
"test": "Test"
}
RESPONSE BODY:
{
"id": "0001",
"req": {
"test": "Test"
},
"q": "ABC"
}
サンプル RAML
#%RAML 1.0
title: Sample Trial API
baseUri: http://localhost:8081/api
mediaType:
- application/json
/postman/{id}:
post:
queryParameters:
q?:
example: Example
type: string
responses:
"200":
body:
application/json:
properties:
id:
example: Example
type: string
req:
type: object
q:
example: Example
type: string
securedBy: []
body:
application/json:
type: object
securitySchemes:
SecurityScheme:
type: Basic Authentication
securedBy: []
API の設定
シンプルなAPIなので、設定は非常にシンプルです。
「Transform Message」モジュールを利用し、下記の DataWeave 言語を設定するだけです。
%dw 2.0
output application/json
---
{
"id": attributes.uriParams.'id',
"req": payload,
"q": attributes.queryParams.'q'
}
設定ファイルを環境で分ける
今回は分ける必要はなかったのですが、ローカル環境と開発環境の設定ファイルを出し分けるように設定しました。設定方法は公式ヘルプの「プロパティの設定」「環境プロパティの設定」を参考にしました。
ローカル環境では「local-config.yaml」開発環境では「dev-config.yaml」のプロパティファイルを src/main/resources
配下に設置し、利用するようにします。
「env」と言うグローバルプロパティを設定し、値を切り替えることでプロパティファイルを切り替えています。
ローカルでは画像のように「env」に「local」と言う値が入っています。
CloudHub にデプロイした際には管理画面上から「dev」と言う値を設定してあります。
Basic 認証の設定
MuleSoft にはすぐに利用できるポリシーが多くあります。この中の「基本認証 - シンプル」を利用して Basic 認証をかけたいと思います。
まずAPI Manager から新しく API を作成します。設定方法の詳細は「RAML または OAS API プロキシを設定する」などを参考にしてください。
今回はCloudHubにすでにデプロイしてある既存のアプリケーションに対して直接繋ぐ(新しくプロキシアプリをデプロイしない)ように画像のような設定を行いました。
そして作成したAPIに対して「基本認証 - シンプル(Basic Authentication - Simple)」ポリシーを追加します。(追加時にID、パスワードは設定できます)
これで完了だと思ったのですが、API 作成後すぐには API Status が「Unregistered」になっており、実際にエンドポイントにアクセスしてもBasic認証はかかってなかったです。どうやらAPI 自動検出の設定をしないといけないようだったので、そちらの設定も紹介します。方法については「Mule 4 アプリケーションでの API ゲートウェイの API 自動検出の設定」を参考にしています。
「API Auto-discovery」と言う設定で API ID のところに「apiId」と言う環境変数を設定し、Flow Name には API のルートにあたるフローを設定します。(コンソールにも Basic 認証を効かせたい場合はコンソールのルートにあたるフローに対しても同じ設定を行います。)
API Manager から API Instance ID を取得します。
さらにプラットフォームへ接続するための認証の設定をする必要があります。
まず「環境のログイン情報の取得 (推奨)」に従ってクライアントIDとシークレットを取得してください。
その後「Anypoint Studio 7 でのログイン情報の設定」に従ってAnypoint Studioにログイン情報を入力します。
また CloudHub にデプロイする際にも下記のように変数としてログイン情報を入力します。
これで実際にサイトにアクセスして Basic 認証がかかっていたら成功です。
HTTPS の設定
最後に HTTPS で接続できるようにする設定を行いたいと思います。
今回は「HTTPS サービスの構築」を参照しながらプロキシを利用せずにアプリケーションに証明書を設定する方法を紹介します。(プロキシを利用して方法は「HTTPS API プロキシの構築」を参照してください。)
まず(自己証明書入り) JKS ファイルを下記コマンドで作成します。(作成時に設定したパスワード、エイリアス、ファイル名は後にも利用します。)
keytool -genkey -keyalg RSA -alias <key-alias> -keystore <keystore-name>.jks
keytool -export -alias <key-alias> -keystore <keystore-name>.jks -file <certificate-name>.cer
作成したJKSファイルを src/main/resources
配下に設置します。 今回は keystore
と言うフォルダを新しく作成して、その中に設置しました。
API とコンソールともに利用している HTTP に関する設定ファイルを下記画像のように修正します。
最後に下記画像のように設定ファイルに値に JKS ファイル作成時に指定したパスワード、エイリアス、ファイル名を追加し、 CloudHub へのデプロイを行います。(ローカル環境の設定ファイルには HTTPS のポート番号も設定する必要があります)
実際にローカルまたはCloudHubにデプロイしたURLにHTTPSでアクセスして表示されていることを確認できれば成功です。
自主学習に利用できそうなリソース
-
CodeLab(日本語)、CodeLab(英語)
- CodeLabは「Salckへメッセージを送る」のようなシチュエーションに合わせた設定・実装方法を画面イメージと共に学べるサイトになっています。
-
Getting Started with Anypoint Platform (Anypoint Platform 入門)
- 日本語で講師が教えてくれるトレーニングのコースのようです。
- 公式 MuleSoft ドキュメント
- MuleSoft 資格一覧
- Trailhead