Quando si utilizza il sistema di API Gateway di AWS, a volte, si ha la necessità di integrare i dati in arrivo dalla chiamata (passati dall’utente) a dati fissi oppure si ha la necessità di riorganizzare i dati in modo differente per poi poterli passare alla funziona Lambda.
Tramite il linguaggio VTL (Velocity Template Language) è possibile strutturare la mappa di integrazione con logiche personalizzate. Vediamo un esempio di integrazione semplice, dove ad ogni parametro in arrivo dalla chiamata, corrisponde un parametro passato alla Lambda.
#set($payload = $util.parseJson($input.json('$'))) { "pin": "demo", "action": "managealarm", "type": "$input.path('$.type')", "eventid": "$input.path('$.eventid')", "userid": "$input.path('$.userid')" }
Non sembra di molta utilità, poiché non è dinamico e vincolato a parametri fissi, ma serve principalmente per aggiungere alcune chiave/valore specifici della chiamata.
Sicuramente più interessante è la possibilità di rendere dinamica la costruzione del JSON da restituire alla Lambda.
#set($payload = $util.parseJson($input.json('$'))) { "pin": "demo", "action": "command", "comname": "nome comando", "type": 2, "code": "$input.path('$.code')", "userid": "$input.path('$.userid')", "values": { #foreach($body in $payload.entrySet()) #if ($body.key == "values") #foreach($valu in $body.value.entrySet()) "$valu.key": "$valu.value"#if($foreach.hasNext),#end #end #end #end } }
In questo caso, oltre ai parametri aggiuntivi con chiave e valore fissi e a quelli con chiave fissa ma con valore dinamico, si può vedere la costruzione dell’oggetto values in modo dinamico e si possono anche introdurre dei controlli, per esempio se il dato è valorizzato.
VTL