La 4e série de records de développement de services WEB avec 3 amis de l'université.
Dans la configuration du service WEB que nous allons faire cette fois (présenté dans cet article) Je voudrais résumer la méthode de construction d'API du côté back-end (API Gateway + Lambda + DynamoDB).
Dans cet article, je voudrais expliquer les deux points suivants.
Commençons par la situation de DynamoDB, qui est le point final des données. Ensuite, je présenterai les paramètres d'API Gateway qui reçoit les demandes de l'application Flask, Enfin, jetons un œil au contenu de Lambda, qui connecte DynamoDB et API Gateway.
DynamoDB Pour vérifier les paramètres DynamoDB, ouvrez DynamoDB à partir de AWS Management Console.
Après avoir ouvert la console d'administration DynamoDB, sélectionnez «Tables» dans le menu de gauche pour afficher la liste des tables.
Sélectionnez la table à laquelle vous souhaitez vous référer (ripple_prj
cette fois) pour afficher des informations détaillées telles qu'un aperçu de la table et des éléments enregistrés.
Le nom de la table ripple_prj
utilisé cette fois est nommé par la règle<nom du site> _ <nom de la ressource>
.
Autrement dit, ripple_prj
est une table pour gérer les ressources prj sur le site ripple.
La clé de partition principale est prj_id.
Dans le site ondulé que nous créons cette fois, la clé de tri n'est pas définie de sorte que les informations prj soient renvoyées à l'écran et que vous puissiez rechercher et affiner par le contrôle d'affichage à l'écran. Si vous souhaitez définir des conditions de recherche lors de la récupération de données à partir de DynamoDB, vous devez spécifier l'élément que vous souhaitez définir comme clé de tri.
Si vous ouvrez l'onglet d'élément, vous pouvez voir les données enregistrées dans la table ripple_prj
.
Vous pouvez vérifier et modifier les détails de chaque enregistrement en cliquant sur la clé de partition primaire de chaque ligne (partie prj0001
ou prj0002
affichée en bleu dans la colonne prj_id
).
Jusqu'à présent, nous avons confirmé la table sur DynamoDB et le contenu des données stockées dans la table.
Lors de la liaison avec l'application Flask, nous examinerons et implémenterons comment acquérir ces données DynamoDB et comment les enregistrer et les mettre à jour.
API Gateway Ouvrez API Gateway depuis AWS Management Console.
La liste des API définies dans API Gateway s'ouvre.
L'API du service WEB que nous créons cette fois-ci est créée avec le nom ripple
, alors cliquez dessus pour ouvrir les détails.
La structure hiérarchique des ressources et des méthodes définies sur l'API s'affiche.
Cliquez sur / prj (ressource prj) pour afficher une liste des méthodes définies dans la ressource prj. GET / prj est le processus d'obtention de la liste prj. POST / prj est un nouveau processus d'enregistrement prj Cela correspond à.
De même, cliquer sur / {prjid} (/ prj / {prjid} resource) affichera une liste des méthodes configurées pour cette ressource. GET / prj / {prjid} est le processus pour obtenir un projet spécifique spécifié par prjid. Cela correspond à.
À l'heure actuelle, il a été confirmé que trois types de traitement sont enregistrés dans l'API ripple. Ensuite, je voudrais examiner de plus près le contenu de chaque processus.
GET /prj Cliquez sur GET sur la ressource / prj pour voir le flux de traitement au sein de la méthode.
Le traitement de la passerelle API est effectué selon le flux suivant.
Client (dans ce cas, l'application Flask sur Heroku) → Demande de méthode (définir les paramètres que API Gateway reçoit du client) → Demande d'intégration (définissez les paramètres que API Gateway transmet à Lambda suivant) →Lambda → Réponse intégrée (définir les paramètres que API Gateway reçoit de Lambda) → Réponse de la méthode (définir les paramètres que API Gateway renvoie au client) → Client (reçoit les résultats du traitement API Gateway)
Il y a deux parties définies par GET / prj: la demande de méthode et la demande d'intégration.
J'ai défini le besoin d'une clé API sur true. ripple nécessite une clé API pour toutes les API. La raison pour laquelle la clé API est requise cette fois est que nous voulons limiter la source d'accès uniquement à l'application Flask sur Heroku.
Le paramètre de chaîne de requête URL n'est pas défini en particulier.
Généralement, dans la méthode GET, vous pouvez ajouter ?
À la fin de l'URL comme https: //my-api.com/prj? Key1 = value1 & key2 = value2
et passer des paramètres sous la forme de key = value
. Je peux le faire.
Cette fois, puisque le traitement de GET / prj consiste à obtenir la liste de prj, il n'était pas nécessaire de définir les paramètres.
Cette fois, puisque le traitement suivant est implémenté dans Lambda, Type d'intégration: Lambda Fonction Lambda: ripple_prj Est réglé. (La mise en œuvre de ripple_prj sera décrite plus tard)
Un modèle de mappage est défini pour définir les paramètres à transmettre à Lambda.
Le contenu du modèle de mappage est le suivant. La chaîne de caractères fixe «recherche» est définie dans le paramètre «méthode».
POST /prj Sera ajouté à une date ultérieure.
GET /prj/{prjid} Sera ajouté à une date ultérieure.
Lambda Je crée une fonction Lambda appelée ripple_rpj.
ripple_prj/lambda_function.py
import boto3
dynamodb = boto3.resource('dynamodb') #Sélectionnez les ressources à utiliser
table_name = "ripple_prj" #nom de la table
dynamotable = dynamodb.Table(table_name)
def get(event):
if "prj_id" not in event:
return event
primary_key = {"prj_id": event["prj_id"]} #nom de la table
res = dynamotable.get_item(Key=primary_key) #Recherchez avec le prisme spécifié et obtenez le résultat
item = res["Item"] #Puisqu'aucun élément n'est spécifié, tous
return item
def search(event):
response = dynamotable.scan()
items = response['Items']
return items
def create(event):
print(event)
response = dynamotable.put_item(
Item={
'prj_id': event['prj_id'],
'name': event['name'],
'goal': event['goal'],
'issue': event['issue'],
'description': event['description'],
'term': event['term'],
'term_unit': event['term_unit'],
'create_date': event['create_date'],
}
)
return response
def lambda_handler(event, context):
print(event)
return eval(event['method'])(event)
Points de mise en œuvre
Actuellement, il n'y a que la référence et l'enregistrement de prj, implémentons donc le processus de mise à jour de prj.
DynamoDB Aucun travail car il n'y a pas de modifications aux tables / éléments existants
API Gateway Ajoutez une nouvelle méthode put pour la ressource prj. Sera ajouté à une date ultérieure.
Lambda Ecrivez et enregistrez le processus d'écrasement et de mise à jour des informations prj existantes avec les informations prj reçues. Sera ajouté à une date ultérieure
Testez lorsque tout est terminé et déployez si OK. Une fois déployées, les modifications seront publiées et de nouvelles méthodes peuvent être appelées à partir de l'application Flask. Sera ajouté à une date ultérieure
Ajouter le traitement des appels API. Avec cette méthode, plusieurs personnes ouvraient la page du projet en même temps, Lorsque chacun est mis à jour, les données de la personne qui a mis à jour plus tôt seront écrasées par la dernière personne et disparaissent. Les éléments qui ne peuvent en contenir qu'un, comme le nom du projet et les objectifs, peuvent être gagnés plus tard, Pour les éléments qui peuvent avoir plusieurs valeurs, telles que la chronologie, il est nécessaire de faire référence au dernier état DynamoDB et de fusionner lorsqu'une personne ultérieure s'inscrit. Mettez en œuvre la logique en tenant compte de ce côté. Sera ajouté à une date ultérieure.
Recommended Posts