Die 4. WEB Service Development Rekordserie mit 3 Freunden vom College.
In der Konfiguration des WEB-Dienstes, die wir dieses Mal erstellen werden (eingeführt in diesem Artikel) Ich möchte die API-Konstruktionsmethode auf der Back-End-Seite (API-Gateway + Lambda + DynamoDB) zusammenfassen.
In diesem Artikel möchte ich die folgenden zwei Punkte erläutern.
Beginnen wir zunächst mit der Situation von DynamoDB, dem endgültigen Endpunkt der Daten. Als Nächstes werde ich die Einstellungen des API-Gateways vorstellen, das Anforderungen von der Flask-App empfängt. Schauen wir uns zum Schluss den Inhalt von Lambda an, das DynamoDB und API Gateway verbindet.
DynamoDB Öffnen Sie DynamoDB in der AWS Management Console, um die DynamoDB-Einstellungen zu überprüfen.
Wählen Sie nach dem Öffnen der DynamoDB-Administrationskonsole im linken Menü "Tabellen" aus, um die Tabellenliste anzuzeigen.
Wählen Sie die Tabelle aus, auf die Sie verweisen möchten (diesmal "ripple_prj"), um detaillierte Informationen anzuzeigen, z. B. eine Übersicht über die Tabelle und die registrierten Elemente.
Der Name der diesmal verwendeten Tabelle "ripple_prj" wird durch die Regel "ripple_prj
ist eine Tabelle zum Verwalten von prj-Ressourcen auf der Ripple-Site.
Der primäre Partitionsschlüssel ist prj_id.
In der Ripple-Site, die wir dieses Mal erstellen, ist der Sortierschlüssel nicht so eingestellt, dass prj-Informationen an den Bildschirm zurückgegeben werden und Sie mit dem Anzeigesteuerelement auf dem Bildschirm suchen und eingrenzen können. Wenn Sie beim Abrufen von Daten aus DynamoDB Suchbedingungen festlegen möchten, müssen Sie das Element angeben, das Sie als Sortierschlüssel festlegen möchten.
Wenn Sie die Registerkarte Element öffnen, werden die in der Tabelle ripple_prj
registrierten Daten angezeigt.
Sie können die Details jedes Datensatzes überprüfen und bearbeiten, indem Sie auf den primären Partitionsschlüssel jeder Zeile klicken (Teil "prj0001" oder "prj0002" wird in der Spalte "prj_id" blau angezeigt).
Bisher haben wir die Tabelle in DynamoDB und den Inhalt der in der Tabelle gespeicherten Daten bestätigt.
Bei der tatsächlichen Verknüpfung mit der Flask-App werden wir überlegen und implementieren, wie diese DynamoDB-Daten erfasst und registriert und aktualisiert werden.
API Gateway Öffnen Sie das API-Gateway über die AWS Management Console.
Die Liste der in API Gateway festgelegten APIs wird geöffnet. Die API des WEB-Dienstes, den wir dieses Mal erstellen, wird mit dem Namen "Ripple" erstellt. Klicken Sie also darauf, um die Details zu öffnen.
Die hierarchische Struktur der in der API festgelegten Ressourcen und Methoden wird angezeigt.
Klicken Sie auf / prj (prj-Ressource), um eine Liste der in der prj-Ressource festgelegten Methoden anzuzeigen. GET / prj ist der Prozess zum Abrufen der prj-Liste. POST / prj ist ein neuer Registrierungsprozess für prj Es entspricht.
Wenn Sie auf / {prjid} (/ prj / {prjid} resource) klicken, wird eine Liste der für diese Ressource konfigurierten Methoden angezeigt. GET / prj / {prjid} ist der Prozess zum Abrufen eines bestimmten von prjid angegebenen Projekts. Es entspricht.
Derzeit wurde bestätigt, dass drei Arten der Verarbeitung in der Ripple-API registriert sind. Als nächstes möchte ich den Inhalt jedes Prozesses genauer betrachten.
GET /prj Klicken Sie in der Ressource / prj auf GET, um den Verarbeitungsablauf innerhalb der Methode anzuzeigen.
Die API-Gateway-Verarbeitung wird gemäß dem folgenden Ablauf ausgeführt.
Client (in diesem Fall die Flask App auf Heroku) → Methodenanforderung (Legen Sie die Parameter fest, die API Gateway vom Client empfängt.) → Integrationsanforderung (Legen Sie die Parameter fest, die das API-Gateway an das nachfolgende Lambda übergibt.) →Lambda → Integrierte Antwort (Legen Sie die Parameter fest, die API Gateway von Lambda empfängt.) → Methodenantwort (Legen Sie die Parameter fest, die API Gateway an den Client zurückgibt.) → Client (empfängt API Gateway-Verarbeitungsergebnisse)
GET / prj setzt zwei Teile fest: Methodenanforderung und Integrationsanforderung.
Ich habe die Notwendigkeit eines API-Schlüssels auf true gesetzt. Ripple erfordert einen API-Schlüssel für alle APIs. Der Grund, warum der API-Schlüssel dieses Mal benötigt wird, ist, dass wir die Zugriffsquelle nur auf die Flask-App auf Heroku beschränken möchten.
Der Parameter für die URL-Abfragezeichenfolge ist nicht besonders festgelegt. Im Allgemeinen können Sie bei der GET-Methode "?" Am Ende der URL wie "https: //my-api.com/prj? Key1 = value1 & key2 = value2" hinzufügen und Parameter in Form von "key = value" übergeben. Ich kann es schaffen Dieses Mal war es nicht notwendig, die Parameter einzustellen, da die Verarbeitung von GET / prj die Liste von prj erhalten soll.
Dieses Mal, da die nachfolgende Verarbeitung in Lambda implementiert ist, Integrationstyp: Lambda Lambda-Funktion: ripple_prj Ist eingestellt. (Die Implementierung von ripple_prj wird später beschrieben.)
Eine Zuordnungsvorlage wird definiert, um die Parameter festzulegen, die an Lambda übergeben werden sollen.
Der Inhalt der Zuordnungsvorlage lautet wie folgt. Die feste Zeichenkette "Suche" wird in der Parametermethode eingestellt.
POST /prj Wird zu einem späteren Zeitpunkt hinzugefügt.
GET /prj/{prjid} Wird zu einem späteren Zeitpunkt hinzugefügt.
Lambda Ich erstelle eine Lambda-Funktion namens ripple_rpj.
ripple_prj/lambda_function.py
import boto3
dynamodb = boto3.resource('dynamodb') #Wählen Sie die zu verwendenden Ressourcen aus
table_name = "ripple_prj" #Tabellenname
dynamotable = dynamodb.Table(table_name)
def get(event):
if "prj_id" not in event:
return event
primary_key = {"prj_id": event["prj_id"]} #Tabellenname
res = dynamotable.get_item(Key=primary_key) #Suchen Sie mit dem angegebenen Prismar und erhalten Sie das Ergebnis
item = res["Item"] #Da kein Element angegeben ist, alle
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)
Implementierungspunkte
Derzeit gibt es nur eine Referenz und Registrierung von prj. Implementieren wir also den Aktualisierungsprozess von prj.
DynamoDB Keine Arbeit, da keine Änderungen an vorhandenen Tabellen / Elementen vorgenommen wurden
API Gateway Fügen Sie eine neue Put-Methode für die prj-Ressource hinzu. Wird zu einem späteren Zeitpunkt hinzugefügt.
Lambda Schreiben und speichern Sie den Prozess des Überschreibens und Aktualisierens der vorhandenen prj-Informationen mit den empfangenen prj-Informationen. Wird zu einem späteren Zeitpunkt hinzugefügt
Testen Sie, wann alles erledigt ist, und stellen Sie es bereit, wenn es in Ordnung ist. Nach der Bereitstellung werden die Änderungen veröffentlicht und neue Methoden können über die Flask-App aufgerufen werden. Wird zu einem späteren Zeitpunkt hinzugefügt
API-Aufrufverarbeitung hinzufügen. Bei dieser Methode haben mehrere Personen gleichzeitig die Projektseite geöffnet. Bei jeder Aktualisierung werden die Daten der Person, die zuvor aktualisiert wurde, von der späteren Person überschrieben und verschwinden. Gegenstände, die nur einen enthalten können, wie der Projektname und die Ziele, können später gewonnen werden. Bei Elementen, die mehrere Werte haben können, z. B. die Zeitleiste, muss auf den neuesten DynamoDB-Status verwiesen und zusammengeführt werden, wenn sich eine spätere Person registriert. Implementieren Sie die Logik unter Berücksichtigung dieser Seite. Wird zu einem späteren Zeitpunkt hinzugefügt.