J'ai une passerelle API avec une méthode POST
qui met directement à une table DynamoDB. Ma méthode est également configurée pour utiliser un autorisateur personnalisé via Lambda.
Dans mon mappage de modèle, je consomme certaines variables d'autorisateurs, telles que $context.authorizer.principalId
ou $context.authorizer.accountId
. cartographie modèle simplifié se présente comme suit:
{
"TableName": "$stageVariables.tableName",
"Item": {
"AccountId": {
"S": "$context.authorizer.accountId"
},
"Id": {
"S": "$context.requestId"
},
"Content": {
"S": "$input.path('$.content')"
},
"UserId": {
"S": "$context.authorizer.principalId"
}
}
}
Maintenant, quand je fais une requête HTTP à cette méthode API déployée à une étape réelle, cette demande passera par l'autorisateur personnalisé et fournir/remplissage dans toutes les $context.authorizer.*
variables du modèle qui pourrait ressembler à ceci:
{
"TableName": "MyTable",
"Item": {
"AccountId": {
"S": "12345"
},
"Id": {
"S": "6fd5ff08-34c0-11e7-bf96-591a565835b3"
},
"Content": {
"S": "my content"
},
"UserId": {
"S": "userid-123456789"
}
}
}
Lors du test de la méthode API v ia l'API bouton Test de la passerelle, la demande de test est sans passer par le approbateur personnalisé (ce qui est logique, puisque approbateur peut être testé séparément) et produit un résultat comme celui-ci:
{
"TableName": "MyTable",
"Item": {
"AccountId": {
"S": ""
},
"Id": {
"S": "test-invoke-request"
},
"Content": {
"S": "my content"
},
"UserId": {
"S": ""
}
}
}
Le contenu suivant est maintenant invalide, puisque tous les champs se validés par rapport au modèle, et d'obtenir l'erreur de validation suivant:
Endpoint response body before transformations: {"__type":"com.amazon.coral.validate#ValidationException","message":"One or more parameter values were invalid: An AttributeValue may not contain an empty string"}
Est-il possible de spécifier des variables d'autorisateur lors du test des méthodes API Gateway? Ou existe-t-il un moyen intelligent de définir une variable de secours dans le mappage de modèle de sorte que, lorsqu'il se résout à se vider, il retourne à, par exemple test-invoke-principalid
, tout comme $context.requestId
le fait sortir de la boîte? Tout ce que je veux, c'est pouvoir utiliser la fonction de test de la passerelle API tout en gardant tous les paramètres de validation/d'autorisation en place.