d'api aws passerelle & lambda: plusieurs d'extrémité/fonctions vs seul point de terminaison
J'ai une api AWS que les procurations lamba fonctions. J'utilise actuellement différents paramètres distincts lambda fonctions:
api.com/getData --> getData
api.com/addData --> addData
api.com/signUp --> signUp
Le processus de gestion de tous les paramètres et fonctions devient lourd. Est-il un inconvénient lorsque je utiliser un seul point de terminaison d'une fonction lambda qui décide quoi faire en fonction de la chaîne de requête?
api.com/exec&func=getData --> exec --> if(params.func === 'getData') { ... }
Vous devez vous connecter pour publier un commentaire.
Il est parfaitement valable pour mapper plusieurs méthodes en une seule fonction lambda et beaucoup de gens sont à l'aide de cette méthodologie, aujourd'hui, par opposition à la création d'une passerelle api de ressources et d'une fonction lambda pour chaque méthode discrète.
Vous pouvez envisager l'utilisation de proxy toutes les demandes pour une seule fonction. Jetez un oeil à la documentation suivante sur la création d'une Passerelle API => Lambda proxy de l'intégration:
http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html
Leur exemple est grand ici. Une demande similaire à la suivante:
Sera le vent de l'envoi de l'événement suivant les données de votre AWS Lambda fonction:
Vous avez maintenant accès à tous les en-têtes, url params, corps etc. et vous pourriez l'utiliser pour traiter les demandes de manière différente dans une seule fonction Lambda (essentiellement la mise en œuvre de votre propre routage).
Qu'un avis, je vois quelques avantages et les inconvénients de cette approche. Beaucoup d'entre eux dépendent de vos cas d'utilisation:
j'ai été la construction de 5~6 microservices avec la Lambda-Passerelle API, et fait l'objet de plusieurs try & d'échec et de réussite.
en bref, de mon expérience, il est préférable de déléguer tous les appels d'API pour lambda avec juste un APIGateway mappage de caractères génériques, tels que
si vous avez déjà utilisé un des frameworks comme raisin vous savez que lors de la prise des Api, des fonctions comme
"middleware"
"mondial de la gestion des exceptions"
"cascade de routage"
"la validation des paramètres"
sont vraiment crucial.
comme votre API grandit, il est presque impossible de gérer toutes les routes avec de la Passerelle API de cartographie, ni de la Passerelle API appui d'un de ces longs aussi.
de plus, il n'est pas vraiment pratique pour casser lambda pour chacun des points de terminaison pour le développement ou le déploiement.
à partir de votre exemple,
imaginez que vous avez données ORM, l'authentification de l'Utilisateur de la logique, de point de vue commun de fichiers (comme des données.erb).. alors comment vas-tu le partager?
vous pourriez peut casser comme,
mais pas comme "pour chaque point de terminaison". vous pourriez peut-recherche de concept de microservice et les meilleures pratiques sur la façon dont vous pouvez fractionner le service
pour ceux framework web comme les fonctionnalités, la caisse cette nous avons tout construit framework web pour lambda depuis que j'ai besoin dans mon entreprise.
J'aurais commenté tout simplement à ajouter un couple de points à Dave Érable grande réponse, mais je n'ai pas assez de points de réputation encore donc je vais ajouter des commentaires ici.
J'ai commencé à la tête en bas le chemin de plusieurs points d'extrémité pointant vers une fonction Lambda qui pourrait traiter chaque point de terminaison différente en accédant à la "ressource" propriété de l'Événement. Après l'avoir essayé j'ai maintenant séparés en deux fonctions distinctes pour les raisons que Dave l'a suggéré plus:
Autant que je sache, AWS permet à un seul gestionnaire par une fonction Lambda. C'est pourquoi j'ai créé un peu de "routage" mécanisme de Java Génériques (pour les plus forts, les vérifications de type au moment de la compilation). Dans l'exemple suivant, vous pouvez appel à plusieurs méthodes et passer les différents types d'objets pour le Lambda et à l'arrière via un Lambda gestionnaire:
Lambda de la classe avec le gestionnaire de:
LambdaRequest classe:
LambdaResponse classe:
Exemple POJO classe d'Utilisateur:
JUnit test méthode:
ps.: si vous avez deserialisation problèmes (LinkedTreeMap ne peut pas être jeté à l' ...) en vous fonction Lambda (parce que uf les Génériques/Gson), utilisez l'instruction suivante:
Méthode:
La façon dont je le vois, le choix simples vs multiples API est une fonction de considérations suivantes:
De sécurité: je pense que c'est le plus grand défi d'avoir une API unique de structure. Il peut être possible d'avoir différents profils de sécurité pour les différentes parties de l'exigence
Pense microservice modèle à partir du point de vue des entreprises:
L'objectif de l'utilisation de l'API doivent être au service de certaines demandes, donc il doit être bien compris et facile à utiliser. Si les APIs doivent être combinés. Par exemple, si vous avez un client mobile et il nécessite 10 choses à être tiré dans et hors de DB, il est logique d'avoir 10 points de terminaison dans un seul API.
Mais cela devrait être dans la raison et doit être vu dans le contexte de l'ensemble de la conception de la solution. Par exemple, si vous concevez un produit de la paie, vous pouvez penser à avoir des modules séparés pour la gestion des congés et des détails de l'utilisateur de la gestion. Même si ils sont souvent utilisés par un seul client, ils doivent encore être différentes API, parce que leurs affaires le sens est différent.
Réutilisabilité: s'Applique à la fois le code et les fonctionnalités de réutilisabilité. Code réutilisabilité est un problème plus facile à résoudre, c'est à dire construire des modules communs pour les besoins communs et les construire comme des bibliothèques.
La fonctionnalité de réutilisabilité est plus difficile à résoudre. Dans mon esprit, la plupart des cas peut être résolu par une modification de la façon dont les points de terminaison/fonctions sont prévues, parce que si vous avez besoin de duplication des fonctionnalités qui signifie que votre conception initiale n'est pas assez détaillé.
Viens de trouver un lien dans une autre SORTE de post qui résume mieux