Grundlegende Anforderungsvalidierung in API Gateway einrichten
In diesem Abschnitt wird gezeigt, wie Sie die Anforderungsvalidierung für API Gateway mithilfe der Konsole, AWS CLI und einer OpenAPI-Definition einrichten.
Themen
Einrichten der grundlegenden Anforderungsvalidierung über die API-Gateway-Konsole
Sie können die API-Gateway-Konsole verwenden, um eine Anfrage zu validieren, indem Sie einen von drei Validatoren für eine API-Anfrage auswählen:
-
Text validieren.
-
Abfragezeichenfolgeparameter und Header validieren.
-
Text, Abfragezeichenfolgeparameter und Header validieren.
Wenn Sie einen der obigen Validatoren für eine API-Methode auswählen, fügt die API-Gateway-Konsole die Validierung zur Zuordnung RequestValidators der API hinzu.
Um diesem Tutorial zu folgen, verwenden Sie eine AWS CloudFormation-Vorlage, um eine unvollständige API-Gateway-API zu erstellen. Diese API hat eine /validator
-Ressource mit den Methoden GET
und POST
. Beide Methoden sind in den http://petstore-demo-endpoint.execute-api.com/petstore/pets
-HTTP-Endpunkt integriert. Sie werden zwei Arten der Anforderungsvalidierung konfigurieren:
-
In der
GET
-Methode konfigurieren Sie die Anforderungsvalidierung für URL-Abfragezeichenfolgen-Parameter. -
In der
POST
-Methode konfigurieren Sie die Anforderungsvalidierung für den Anforderungstext.
Dadurch können nur bestimmte API-Aufrufe an die API weitergeleitet werden.
Laden Sie die Vorlage für die App-Erstellung für AWS CloudFormation herunter und entzippen Sie diese. Sie verwenden diese Vorlage, um eine unvollständige API zu erstellen. Sie schließen die restlichen Schritte in der API-Gateway-Konsole ab.
So erstellen Sie einen AWS CloudFormation-Stack
Öffnen Sie die AWS CloudFormation-Konsole unter https://console.aws.amazon.com/cloudformation
. -
Wählen Sie Stack erstellen und dann Mit neuen Ressourcen (Standard) aus.
-
Wählen Sie unter Vorlage angeben die Option Vorlagendatei hochladen aus.
-
Wählen Sie die Vorlage aus, die Sie heruntergeladen haben.
-
Wählen Sie Weiter aus.
-
Geben Sie für Stack-Name die Zeichenfolge
request-validation-tutorial-console
ein und klicken Sie auf Weiter. -
Wählen Sie in Stack-Optionen konfigurieren die Option Weiter aus.
-
Bestätigen Sie in Funktionen, dass AWS CloudFormation IAM-Ressourcen in Ihrem Konto erstellen darf.
-
Wählen Sie Absenden aus.
AWS CloudFormation stellt die in der Vorlage angegebenen Ressourcen bereit. Die Bereitstellung der Ressourcen kann einige Minuten dauern. Wenn der Status Ihres AWS CloudFormation-Stacks CREATE_COMPLETE ist, können Sie mit dem nächsten Schritt fortfahren.
So wählen Sie Ihre neu erstellte API aus
Wählen Sie den neu erstellten
request-validation-tutorial-console
-Stack aus.Wählen Sie Resources aus.
Wählen Sie unter Physische ID Ihre API aus. Dieser Link leitet Sie zur API-Gateway-Konsole weiter.
Bevor Sie die Methoden GET
und POST
ändern, müssen Sie ein Modell erstellen.
So erstellen Sie ein Modell
-
Ein Modell ist erforderlich, um die Anforderungsvalidierung für den Text einer eingehenden Anfrage zu verwenden. Klicken Sie im Hauptnavigationsbereich auf Modelle, um ein Modell zu erstellen.
-
Wählen Sie Modell erstellen aus.
-
Geben Sie unter Name
PetStoreModel
ein. -
Geben Sie für Inhaltstyp
application/json
ein. Wenn kein passender Inhaltstyp gefunden wird, wird die Anforderungsvalidierung nicht durchgeführt. Geben Sie$default
ein, um das gleiche Modell unabhängig vom Inhaltstyp zu verwenden. -
Geben Sie für Beschreibung
My PetStore Model
als die Modellbeschreibung ein. -
Für Modellschema kopieren Sie das folgende Modell in den Code-Editor ein und klicken dann auf Modell erstellen.
{ "type" : "object", "required" : [ "name", "price", "type" ], "properties" : { "id" : { "type" : "integer" }, "type" : { "type" : "string", "enum" : [ "dog", "cat", "fish" ] }, "name" : { "type" : "string" }, "price" : { "type" : "number", "minimum" : 25.0, "maximum" : 500.0 } } }
Weitere Informationen zum Modell finden Sie unter Datenmodelle für REST-APIs.
Konfigurieren einer Anforderungsvalidierung für eine GET
-Methode
-
Klicken Sie im Hauptnavigationsbereich auf Ressourcen und wählen Sie dann die GET-Methode in der Ressourcenstruktur aus.
-
Wählen Sie auf der Registerkarte Methodenanfrage unter Methodenanfrage-Einstellungen die Option Bearbeiten aus.
-
Wählen Sie für Anforderungs-Validierer die Option Abfragezeichenfolgeparameter und -Header validieren aus.
Wählen Sie URL-Abfragezeichenfolgen-Parameter aus und gehen Sie dann wie folgt vor:
Wählen Sie Abfragezeichenfolge hinzufügen aus.
Geben Sie unter Name
petType
ein.Aktivieren Sie die Option Erforderlich.
Caching bleibt ausgeschaltet.
-
Wählen Sie Save (Speichern) aus.
-
Klicken Sie auf der Registerkarte Integrationsanfrage unter Einstellungen für Integrationsanfragen auf Bearbeiten.
Wählen Sie URL-Abfragezeichenfolgen-Parameter aus und gehen Sie dann wie folgt vor:
Wählen Sie Abfragezeichenfolge hinzufügen aus.
Geben Sie unter Name
petType
ein.Geben Sie für Zugeordnet von
method.request.querystring.petType
ein. Dadurch wirdpetType
dem Typ des Haustiers zugeordnet.Weitere Informationen zur Datenzuordnung finden Sie im Tutorial zur Datenzuordnung.
Caching bleibt ausgeschaltet.
Wählen Sie Save (Speichern) aus.
So testen Sie die Anforderungsvalidierung für die GET
-Methode
-
Wählen Sie die Registerkarte Test. Möglicherweise müssen Sie die rechte Pfeiltaste wählen, um die Registerkarte anzuzeigen.
-
Für Abfragezeichenfolgen geben Sie
petType=dog
ein und klicken dann auf Test. -
Der Methodentest gibt
200 OK
und eine Liste von Hunden zurück.Informationen zur Umwandlung dieser Ausgabedaten finden Sie im Tutorial zur Datenzuordnung.
-
Entfernen Sie
petType=dog
und wählen Sie Test aus. -
Der Methodentest gibt einen
400
-Fehler mit der folgenden Fehlermeldung zurück:{ "message": "Missing required request parameters: [petType]" }
Konfigurieren der Anforderungsvalidierung für die POST
-Methode
-
Klicken Sie im Hauptnavigationsbereich auf Ressourcen und wählen Sie dann die POST-Methode aus.
-
Wählen Sie auf der Registerkarte Methodenanfrage unter Methodenanfrage-Einstellungen die Option Bearbeiten aus.
-
Für Anforderungs-Validator wählen Sie die Option Text validieren aus.
-
Klicken Sie unter Anforderungstext auf Modell hinzufügen.
-
Geben Sie für Content type (Inhaltstyp)
application/json
ein. Wenn kein passender Inhaltstyp gefunden wird, wird die Anforderungsvalidierung nicht durchgeführt. Geben Sie$default
ein, um das gleiche Modell unabhängig vom Inhaltstyp zu verwenden.Wählen Sie unter Modell die Option PetStoreModel aus.
Wählen Sie Save (Speichern) aus.
Testen der Anforderungsvalidierung für eine POST
-Methode
-
Wählen Sie die Registerkarte Test. Möglicherweise müssen Sie die rechte Pfeiltaste wählen, um die Registerkarte anzuzeigen.
-
Für Anforderungstext kopieren Sie Folgendes in den Code-Editor:
{ "id": 2, "name": "Bella", "type": "dog", "price": 400 }
Wählen Sie Test aus.
-
Der Methodentest gibt
200 OK
und eine Erfolgsmeldung zurück. -
Für Anforderungstext kopieren Sie Folgendes in den Code-Editor:
{ "id": 2, "name": "Bella", "type": "dog", "price": 4000 }
Wählen Sie Test aus.
-
Der Methodentest gibt einen
400
-Fehler mit der folgenden Fehlermeldung zurück:{ "message": "Invalid request body" }
Der Grund für den ungültigen Anforderungstext wird ganz unten in den Testprotokollen angegeben. In diesem Fall lag der Preis des Haustiers außerhalb des im Modell angegebenen Höchstpreises.
So löschen Sie einen AWS CloudFormation-Stack
Öffnen Sie die AWS CloudFormation-Konsole unter https://console.aws.amazon.com/cloudformation
. -
Wählen Sie Ihren AWS CloudFormation-Stack aus.
-
Wählen Sie Löschen und bestätigen Sie dann Ihre Auswahl.
Nächste Schritte
Informationen zur Transformation von Ausgabedaten und zur Durchführung weiterer Datenzuordnungen finden Sie im Tutorial zur Datenzuordnung.
Folgen Sie dem Abschnitt Einrichtung einer einfachen Anforderungsvalidierung mithilfe der AWS CLI, um ähnliche Schritte mit der AWS CLI durchzuführen.
Einrichten der grundlegenden Anforderungsvalidierung mit der AWS CLI
Sie können einen Validator erstellen, um die Anforderungsvalidierung mithilfe der AWS CLI einzurichten. Um diesem Tutorial zu folgen, verwenden Sie eine AWS CloudFormation-Vorlage, um eine unvollständige API-Gateway-API zu erstellen.
Anmerkung
Dies ist nicht dieselbe AWS CloudFormation-Vorlage wie beim Konsolen-Tutorial.
Mithilfe einer vorab bereitgestellten /validator
-Ressource erstellen Sie die Methoden GET
und POST
. Beide Methoden werden in den http://petstore-demo-endpoint.execute-api.com/petstore/pets
-HTTP-Endpunkt integriert. Sie konfigurieren die folgenden zwei Anforderungsvalidierungen:
-
Für die
GET
-Methode erstellen Sie einenparams-only
-Validator zur Validierung von URL-Abfragezeichenfolgen-Parametern. -
Für die
POST
-Methode erstellen Sie einenbody-only
-Validator, um den Anforderungstext zu validieren.
Dadurch können nur bestimmte API-Aufrufe an die API weitergeleitet werden.
So erstellen Sie einen AWS CloudFormation-Stack
Laden Sie die Vorlage für die App-Erstellung für AWS CloudFormation herunter und entzippen Sie diese.
Um die folgenden Schritte durchzuführen, benötigen Sie die AWS Command Line Interface (AWS CLI) Version 2.
Bei langen Befehlen wird ein Escape-Zeichen (\
) verwendet, um einen Befehl auf mehrere Zeilen aufzuteilen.
Anmerkung
In Windows werden einige Bash-CLI-Befehle, die Sie häufig verwenden (z. B. zip
), von den integrierten Terminals des Betriebssystems nicht unterstützt. Um eine in Windows integrierte Version von Ubuntu und Bash zu erhalten, installieren Sie das Windows-Subsystem für Linux
Verwenden Sie den folgenden Befehl, um den AWS CloudFormation-Stack zu erstellen.
aws cloudformation create-stack --stack-name request-validation-tutorial-cli --template-body file://request-validation-tutorial-cli.zip --capabilities CAPABILITY_NAMED_IAM
-
AWS CloudFormation stellt die in der Vorlage angegebenen Ressourcen bereit. Die Bereitstellung der Ressourcen kann einige Minuten dauern. Sie können den folgenden Befehl verwenden, um den Status Ihres AWS CloudFormation-Stacks anzuzeigen.
aws cloudformation describe-stacks --stack-name request-validation-tutorial-cli
-
Wenn der Status Ihres AWS CloudFormation-Stacks
StackStatus: "CREATE_COMPLETE"
ist, verwenden Sie den folgenden Befehl, um relevante Ausgabewerte für zukünftige Schritte abzurufen.aws cloudformation describe-stacks --stack-name request-validation-tutorial-cli --query "Stacks[*].Outputs[*].{OutputKey: OutputKey, OutputValue: OutputValue, Description: Description}"
Die Ausgabewerte sind die folgenden:
ApiId, dies ist die ID für die API. Für dieses Tutorial lautet die API-ID
abc123
.ResourceId, dies ist die ID für die Validator-Ressource, in der die Methoden
GET
undPOST
verfügbar gemacht werden. Für dieses Tutorial lautet die Ressourcen-IDefg456
.
So erstellen Sie die Anforderungsvalidierungen und importieren ein Modell
-
Ein Validator ist erforderlich, um die Anforderungsvalidierung mit der AWS CLI zu verwenden. Verwenden Sie den folgenden Befehl, um einen Validator zu erstellen, der nur Anforderungsparameter validiert.
aws apigateway create-request-validator --rest-api-id
abc123
\ --no-validate-request-body \ --validate-request-parameters \ --name params-onlyNotieren Sie sich die ID des
params-only
-Validators. -
Verwenden Sie den folgenden Befehl, um einen Validator zu erstellen, der nur den Anforderungstext validiert.
aws apigateway create-request-validator --rest-api-id
abc123
\ --validate-request-body \ --no-validate-request-parameters \ --name body-onlyNotieren Sie sich die ID des
body-only
-Validators. -
Ein Modell ist erforderlich, um die Anforderungsvalidierung für den Text einer eingehenden Anfrage zu verwenden. Verwenden Sie den folgenden Befehl, um ein Modell zu importieren.
aws apigateway create-model --rest-api-id
abc123
--name PetStoreModel --description 'My PetStore Model' --content-type 'application/json' --schema '{"type": "object", "required" : [ "name", "price", "type" ], "properties" : { "id" : {"type" : "integer"},"type" : {"type" : "string", "enum" : [ "dog", "cat", "fish" ]},"name" : { "type" : "string"},"price" : {"type" : "number","minimum" : 25.0, "maximum" : 500.0}}}}'Wenn kein passender Inhaltstyp gefunden wird, wird die Anforderungsvalidierung nicht durchgeführt. Um das gleiche Modell unabhängig vom Inhaltstyp zu verwenden, geben Sie es
$default
als Schlüssel an.
So erstellen Sie die Methoden GET
und POST
-
Rufen Sie den folgenden Befehl auf, um die
GET
-HTTP-Methode der/validate
-Ressource hinzuzufügen. Dieser Befehl erstellt dieGET
-Methode, fügt denparams-only
-Validator hinzu und legt die AbfragezeichenfolgepetType
nach Bedarf fest.aws apigateway put-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --authorization-type "NONE" \ --request-validator-idaaa111
\ --request-parameters "method.request.querystring.petType=true"Rufen Sie den folgenden Befehl auf, um die
POST
-HTTP-Methode der/validate
-Ressource hinzuzufügen. Mit diesem Befehl wird diePOST
-Methode erstellt, derbody-only
-Validator hinzugefügt und das Modell an den Validator angehängt, der nur für den Text gilt.aws apigateway put-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --authorization-type "NONE" \ --request-validator-idbbb222
\ --request-models 'application/json'=PetStoreModel -
Führen Sie den folgenden Befehl aus, um die
200 OK
-Antwort derGET /validate
-Methode einzurichten.aws apigateway put-method-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --status-code 200Führen Sie den folgenden Befehl aus, um die
200 OK
-Antwort derPOST /validate
-Methode einzurichten.aws apigateway put-method-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --status-code 200 -
Führen Sie den folgenden Befehl aus, um einen
Integration
mit einem angegebenen HTTP-Endpunkt für dieGET /validation
-Methode einzurichten.aws apigateway put-integration --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --type HTTP \ --integration-http-method GET \ --request-parameters '{"integration.request.querystring.type" : "method.request.querystring.petType"}' \ --uri 'http://petstore-demo-endpoint.execute-api.com/petstore/pets'Führen Sie den folgenden Befehl aus, um einen
Integration
mit einem angegebenen HTTP-Endpunkt für diePOST /validation
-Methode einzurichten.aws apigateway put-integration --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --type HTTP \ --integration-http-method GET \ --uri 'http://petstore-demo-endpoint.execute-api.com/petstore/pets' -
Führen Sie den folgenden Befehl aus, um die Integration der
GET /validation
-Methode einzurichten.aws apigateway put-integration-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --status-code 200 \ --selection-pattern ""Führen Sie den folgenden Befehl aus, um die Integration der
POST /validation
-Methode einzurichten.aws apigateway put-integration-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --status-code 200 \ --selection-pattern ""
So testen Sie die API-Daten
-
Verwenden Sie den folgenden Befehl, um die
GET
-Methode zu testen, die eine Anforderungsvalidierung für die Abfragezeichenfolgen durchführt:aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --path-with-query-string '/validate?petType=dog'Das Ergebnis gibt
200 OK
und eine Liste von Hunden zurück. -
Verwenden Sie den folgenden Befehl, um zu testen, ohne die Abfragezeichenfolge
petType
einzuschließen.aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GETDas Ergebnis gibt einen
400
-Fehler zurück. -
Verwenden Sie den folgenden Befehl, um die
POST
-Methode zu testen, die eine Anforderungsvalidierung für den Anforderungstext durchführt:aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --body '{"id": 1, "name": "bella", "type": "dog", "price" : 400 }'Das Ergebnis gibt
200 OK
und eine Erfolgsmeldung zurück. -
Verwenden Sie den folgenden Befehl, um mit einem ungültigen Text zu testen.
aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --body '{"id": 1, "name": "bella", "type": "dog", "price" : 1000 }'Das Ergebnis gibt einen
400
-Fehler zurück, da der Preis des Hundes über dem vom Modell festgelegten Höchstpreis liegt.
So löschen Sie einen AWS CloudFormation-Stack
Verwenden Sie den folgenden Befehl, um Ihre AWS CloudFormation-Ressourcen zu löschen.
aws cloudformation delete-stack --stack-name request-validation-tutorial-cli
Einrichten der grundlegenden Anforderungsvalidierung mithilfe einer OpenAPI-Definition
Sie können eine Anforderungsvalidierung auf API-Ebene deklarieren, indem Sie eine Reihe von x-amazon-apigateway-request-validators.requestValidator-Objekt-Objekten in der x-amazon-apigateway-request-validators-Objekt-Zuordnung angeben, um auszuwählen, welcher Teil der Anfrage validiert werden soll. In der OpenAPI-Beispieldefinition gibt es zwei Validatoren:
all
-Validator, der sowohl den Text anhand desRequestBodyModel
-Datenmodells als auch die Parameter validiert.Bei diesem
RequestBodyModel
-Modell muss das JSON-Eingabeobjekt die Eigenschaftenname
,type
undprice
enthalten. Die Eigenschaftname
kann eine beliebige Zeichenfolge sein,type
muss einem der angegebenen Aufzählungsfelder (["dog", "cat", "fish"]
) entsprechen undprice
muss zwischen 25 und 500 liegen. Der Parameterid
ist nicht erforderlich.param-only
, der nur die Parameter validiert.
Zum Aktivieren einer Anforderungsvalidierung für alle Methoden einer API geben Sie eine x-amazon-apigateway-request-validator-Eigenschaft-Eigenschaft auf API-Ebene in der OpenAPI-Definitionsdatei an. In der Beispiel-OpenAPI-Definition wird der all
für alle API-Methoden verwendet (sofern nicht anderweitig außer Kraft gesetzt). Wenn ein Modell zur Validierung des Textes verwendet wird und kein übereinstimmender Inhaltstyp gefunden wird, wird die Anforderungsvalidierung nicht durchgeführt. Um das gleiche Modell unabhängig vom Inhaltstyp zu verwenden, geben Sie es $default
als Schlüssel an.
Zum Aktivieren einer Anforderungsvalidierung für eine einzelne Methode geben Sie die x-amazon-apigateway-request-validator
-Eigenschaft auf Methodenebene an. Im Beispiel mit OpenAPI-Definition überschreibt der param-only
-Validator den all
-Validator für die GET
-Methode.
Um das OpenAPI-Beispiel in API Gateway zu importieren, lesen Sie die folgenden Anweisungen zu Regionale API in API Gateway importieren oder zu Edge-optimierte API in API Gateway importieren.