web-dev-qa-db-ja.com

AWS API Gatewayでワイルドカードまたはキャッチオールパスを使用することは可能ですか

あるドメインのすべてのトラフィックを別のドメインにリダイレクトしようとしています。このジョブ専用のサーバーを実行するのではなく、ラムダでAWS API Gatewayを使用してリダイレクトを実行しようとしました。

私はルートパス「/」に対してこれで大丈夫ですが、サブパスに対するすべてのリクエスト、例えば/ aは処理されません。 「catch all」リソースまたはワイルドカードパスハンドラーを定義する方法はありますか?

17
David

先週の時点で、API Gatewayは「キャッチオールパス変数」と呼ばれるものをサポートするようになりました。

詳細とウォークスルーはこちら: API Gateway Update – New Features Simplify API Development

19
Avi Flax

_/{thepath+}_のようなパスでリソースを作成できます。プラス記号は重要です。

次に、ラムダ関数で両方で値にアクセスできます

  • _event.path_-常に完全パスが含まれます
  • または_event.pathParameters.thepath_-ユーザーが定義した部分が含まれます。その他の考えられる使用例:_/images/{imagepath+}_のようなリソースを定義して、特定のプレフィックスを持つパスのみを照合します。変数にはサブパスのみが含まれます。

関数に渡されたすべての値をデバッグできます:JSON.stringify(event)

完全なドキュメント

12
geekQ

更新:先週の時点で、API Gatewayは「キャッチオールパス変数」と呼ばれるものをサポートするようになりました。 API Gateway Update – New Features Simplify API Development を参照してください。


残念ながら、各レベルのリソースを作成する必要があります。これは、API Gatewayを使用すると、オブジェクトを介してこれらのパラメーターにアクセスできるためです。

例えば: method.request.path.XXXX

したがって、/{param}次の方法でアクセスできます:method.request.path.paramしかし、ネストされたパス(スラッシュを含むパラメーター)がある場合、機能しません。リクエスト全体に対して404も取得します。

method.request.path.paramは代わりに配列でした...名前が付けられていない場合、位置によってパラメーターを取得できます。例えば ​​method.request.path.param[] ...名前付きパラメーターをその下で処理することもできますが、それらへのアクセスは実際には簡単ではありません。なんらかのJSONパスマッピングを使用する必要があります(マッピングテンプレートで何ができるかを考えてください)。残念ながら、これはAPI Gatewayでの処理方法ではありません。

APIゲートウェイの構成がさらに複雑になる可能性があるため、問題はないと思います。ただし、APIゲートウェイも制限されるため、この状況に対処するために、結局のところ、混乱を招く構成になってしまいます。

だから、あなたはここで長い道のりを行くことができます。複数のリソースに対して同じメソッドを作成し、次のようにします:/{1}/{2}/{3}/{4}/{5}/{6}/{7} 等々。その後、必要に応じて、各パスパラメータレベルを処理できます。

パラメータの数が常に同じである場合、あなたは少し幸運であり、一連のリソースを設定するだけで済みますが、最後に1つのメソッドを使用します。

ソース: https://forums.aws.Amazon.com/thread.jspa?messageID=689700&#6897

8
Tom

パス変数/{param}を使用してリソースを作成し、これをワイルドカードパスハンドラーとして扱うことができます。

ありがとう、-Ka Hou

1
Ka Hou Ieong

AWSが最近導入した[〜#〜] httpapi [〜#〜]に関連して、$ defaultはワイルドカードを使用して、定義されたパターンに一致します。

詳細については、以下を参照してください。 aws blogs

0
human