web-dev-qa-db-fra.com

Est-il possible d'utiliser des caractères génériques ou des chemins d'accès universel dans AWS API Gateway

J'essaie de rediriger tout le trafic d'un domaine vers un autre. Plutôt que d'exécuter un serveur spécifiquement pour ce travail, j'essayais d'utiliser AWS API Gateway avec lambda pour effectuer la redirection.

J'ai ce travail ok pour le chemin racine "/" mais toutes les demandes de sous-chemins par exemple/a ne sont pas gérés. Existe-t-il un moyen de définir une ressource "catch all" ou un gestionnaire de chemin de remplacement?

17
David

Depuis la semaine dernière, API Gateway prend désormais en charge ce qu’ils appellent des "variables de chemin d’accès".

Tous les détails et une présentation ici: Mise à jour de la passerelle API - Les nouvelles fonctionnalités simplifient le développement de l'API

19
Avi Flax

Vous pouvez créer une ressource avec un chemin comme /{thepath+}. Le signe plus est important.

Ensuite, dans votre fonction lambda, vous pouvez accéder à la valeur avec les deux

  • event.path - contient toujours le chemin complet
  • ou event.pathParameters.thepath - contient la pièce que vous avez définie. Autre cas d'utilisation possible: définissez une ressource comme /images/{imagepath+} Pour ne faire correspondre que les chemins avec certains préfixes. La variable ne contiendra que le sous-chemin.

Vous pouvez déboguer toutes les valeurs transmises à votre fonction avec: JSON.stringify(event)

Documentation complète

12
geekQ

Mise à jour: depuis la semaine dernière, API Gateway prend désormais en charge ce qu'ils appellent des "variables de chemin d'accès universel". Voir Mise à jour de la passerelle API - De nouvelles fonctionnalités simplifient le développement d'API .


Vous devrez malheureusement créer une ressource pour chaque niveau. La raison en est que API Gateway vous permet d'accéder à ces paramètres via un objet.

Par exemple: method.request.path.XXXX

Donc, si vous venez de /{param} vous pouvez y accéder avec: method.request.path.param mais si vous aviez un chemin imbriqué (paramètres avec des barres obliques), cela ne fonctionnerait pas. Vous obtiendrez également un 404 pour toute la demande.

Si method.request.path.param était un tableau à la place ... alors il pouvait obtenir des paramètres par position lorsqu'il n'était pas nommé. Par exemple method.request.path.param[] ... Les paramètres nommés pourraient même être gérés en dessous, mais y accéder ne serait pas vraiment facile. Cela nécessiterait l'utilisation d'une sorte de mappage de chemin JSON (pensez à ce que vous pouvez faire avec leurs modèles de mappage). Malheureusement, ce n'est pas ainsi que cela est géré dans API Gateway.

Je pense que c'est correct car cela pourrait rendre la configuration d'API Gateway encore plus complexe. Cependant, cela limite également la passerelle API et pour gérer cette situation, vous vous retrouverez finalement avec une configuration plus confuse de toute façon.

Donc, vous pouvez aller loin ici. Créez la même méthode pour plusieurs ressources et faites quelque chose comme: /{1}/{2}/{3}/{4}/{5}/{6}/{7} etc. Ensuite, vous pouvez gérer chaque niveau de paramètre de chemin si nécessaire.

SI le nombre de paramètres est toujours le même, alors vous êtes un peu plus chanceux et n'avez besoin que de configurer un tas de ressources, mais une méthode à la fin.

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

8
Tom

Vous pouvez créer une ressource avec la variable de chemin /{param}, et vous pouvez le traiter comme un gestionnaire de chemin générique.

Merci, - Ka Hou

1
Ka Hou Ieong

Lié à [~ # ~] httpapi [~ # ~] introduit récemment par AWS, $ default est utilisé comme caractère générique pour intercepter toutes les routes qui ne le font pas. correspondre à un modèle défini.

Pour plus de détails, reportez-vous à: aws blogs

0
human