2017-05-10 3 views
1

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.

Répondre

2

Bien sûr, nous pouvons envisager d'ajouter des espaces réservés pour la fonction d'appel de test. Certainement pour le principalId. En ce qui concerne les variables de contexte personnalisées, cela pourrait être plus difficile, nous verrons. Nous aimerions éventuellement avoir une meilleure solution de test de bout en bout.