API Gateway Mapping

API Gateway  - API Gateway Diagram - API Gateway Mapping

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.


http://velocity.apache.org/engine/devel/index.html

VTL