2016-03-03 8 views
8

Sto provando a reindirizzare tutto il traffico per un dominio a un altro. Piuttosto che eseguire un server specifico per questo lavoro, stavo cercando di utilizzare AWS API Gateway con lambda per eseguire il reindirizzamento.È possibile utilizzare caratteri jolly o percorsi catcher nel gateway API AWS

Ho questo ok funzionante per il percorso root "/" ma qualsiasi richiesta di sotto-percorsi, ad es./a non sono gestiti. C'è un modo per definire una risorsa "catch all" o gestore di caratteri jolly?

risposta

11

Come la scorsa settimana, gateway API supporta ora quello che chiamano “catch-all Variabili di percorso”.

i dettagli e un walk-through qui: API Gateway Update – New Features Simplify API Development

+0

Se stai ancora cercando questa risposta in 2018, per favore guarda la risposta di @ geekQ (https://stackoverflow.com/a/40608247/347777), come un vero catch-all (che corrisponde a/a/b/c/d/...) è ora possibile. – Viccari

1

È possibile creare una risorsa con variabile di percorso /{param} e trattarla come gestore del percorso con caratteri jolly.

Grazie, - Ka Hou

+0

Grazie, fai a sapere se questo dovrebbe funzionare con percorsi nidificati? Ad esempio, se uso/{param} questo corrisponderebbe/a ma non sono sicuro che corrisponderebbe/a/b/c? Dal momento che sto cercando di reindirizzare tutto il traffico che mi piacerebbe idealmente poter dire/* o equivalente. –

+1

definire una risorsa per '/ {param}' non gestirà i percorsi nidificati. E.g. '/ something' corrisponderà, ma'/something/else' non corrisponderà alla risorsa '/ {param}' –

+1

Questo è corretto. Il gateway API non supporta attualmente il percorso a più livelli. –

8

Aggiornamento: Come la scorsa settimana, gateway API supporta ora quello che chiamano “catch-all Variabili di percorso”. Vedi API Gateway Update – New Features Simplify API Development.


Sarà necessario creare una risorsa per ogni livello, purtroppo. La ragione di ciò è API Gateway che ti consente di accedere a tali parametri tramite un oggetto.

Ad esempio: method.request.path.XXXX

Quindi, se avete solo /{param} si poteva accedere a quella con: method.request.path.param ma se si ha un percorso nidificato (params con slash), che non avrebbe funzionato. Avresti anche un 404 per l'intera richiesta.

Se method.request.path.param era invece una matrice ... quindi potrebbe ottenere parametri per posizione quando non nominati. Ad esempio method.request.path.param[] ... I parametri nominati potrebbero essere gestiti anche lì, ma l'accesso a questi non sarebbe davvero facile. Richiederebbe l'utilizzo di qualcosa di una sorta di mappatura del percorso JSON (pensa come quello che puoi fare con i loro modelli di mappatura). Purtroppo questo non è il modo in cui viene gestito in API Gateway.

Penso che sia ok anche perché questo potrebbe rendere la configurazione di Gateway API ancora più complessa. Tuttavia, limita anche il gateway API e per gestire questa situazione alla fine si finisce con una configurazione più confusa comunque.

Quindi, si può andare molto lontano qui. Creare lo stesso metodo per più risorse e fare qualcosa del tipo: /{1}/{2}/{3}/{4}/{5}/{6}/{7} e così via. Quindi è possibile gestire ogni livello di parametro del percorso, se necessario.

Se il numero di parametri è sempre lo stesso, allora sei un po 'più fortunato e hai solo bisogno di impostare un sacco di risorse, ma un metodo alla fine.

fonte: https://forums.aws.amazon.com/thread.jspa?messageID=689700&#689700

+1

A partire dalla scorsa settimana, il gateway API ora supporta ciò che chiamano "variabili di percorso catch-all": https://aws.amazon.com/blogs/aws/api-gateway-update-new-features-simplify-api-development/ –

+1

Ora puoi anche utilizzare la richiesta 'ANY' e'/{proxy +} '- molto più di un semplice carattere jolly, ma è supportato anche un metodo HTTP jolly \ o/ – Tom

2

È possibile creare una risorsa con il percorso come /{thepath+}. Il segno più è importante.

Poi nella funzione lambda è possibile accedere al valore sia con

  • event.path - contiene sempre il percorso completo
  • o event.queryPathParameters.thepath - contiene la parte definita da voi. Altro caso d'uso possibile: definire la risorsa come /images/{imagepath+} in modo che corrisponda solo ai percorsi con un determinato prefisso. La variabile conterrà solo il sottotracciato.

È possibile eseguire il debug tutti i valori passati alla funzione con: JSON.stringify(event)

Full documentation