この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
CX事業本部@大阪の岩田です。少し前ですが、3/30付けのアップデートによりAPI GWがマルチレベルのベースパスマッピングに対応しました
早速試してみたので、簡単に内容をご紹介します。
これまでとこれから
過去のブログでも何度か紹介されていますがAPI Gatewayにカスタムドメインを設定する際に、ベースパスマッピングという機能を利用してカスタムドメイン配下の特定のパスをAPI GWのステージとマッピング可能です。例えばですが
- https://mydomain.example.com/v1へのアクセスはAPI GW xxxのdevステージにマッピング
- https://mydomain.example.com/v2へのアクセスはAPI GW yyyのprdステージにマッピング
といった設定が可能です。
このベースパスマッピングの制約として、「API GWをマッピングするカスタムドメイン配下のパスに/
を含められない」という制約がありました。つまり
- https://mydomain.example.com/v1/adminへのアクセスはAPI GW xxxのdevステージにマッピング
- https://mydomain.example.com/v2/adminへのアクセスはAPI GW yyyのprdステージにマッピング
といったマッピングは設定できませんでした。
今回のアップデートにより、上記のようなパスに/
を含む「マルチレベルのベースパスマッピング」が設定可能になりました。
やってみる
さっそくやってみます。まず適当にAPI GWを用意します。てっとり早くモックレスポンスで
{
"message": "I'm admin"
}
というレスポンスを返却するAPIを作りました。
もう1つAPI GWを用意します。先程と同様モックレスポンスで
{
"message": "I'm Normal User"
}
というレスポンスを返却するAPIを用意しました。
簡単に動作確認しておきます。
$curl https://yyyyyyyyyy.execute-api.ap-northeast-1.amazonaws.com/dev
{
"message": "I'm admin"
}
$curl https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev
{
"message": "I'm Normal User"
}
作成したそれぞれのAPI GWをカスタムドメインにマッピングします。
従来は/
を含むために指定できなかったパスv1/admin
が指定できることが分かります。今度はカスタムドメインに対してcurlを叩いてみましょう
$ curl https://mydomain.example.com/v1
{
"message": "I'm Normal User"
}
$ curl https://mydomain.example.com/v1/admin
{
"message": "I'm admin"
}
OKですね
せっかくなので/
を大量に含んだパスを設定してみます。パスには最大300文字まで指定できるので、a/
を149回ほど繰り返してみます。
curlを叩いてみます
$ curl https://mydomain.example.com/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a
{
"message": "I'm Normal User"
}
ちゃんとレスポンスが返却されてきました
まとめ
API GWのカスタムドメイン&ベースパスマッピングを利用して複数のマイクロサービスを1つのドメインでまとめて提供するというのは割とよくある要件だと思います。従来は/
が1階層までしか利用できないためパス設計にも制約があったのですが、今回のアップデートによって、より柔軟なパス設計が可能になりました。300文字も指定できれば現実的なユースケースで困ること無いと考えて良いでしょう。API GWのパスを設計する際には今回のアップデートを念頭に置いておきましょう。