Il routing avanzato in Goa ti permette di gestire pattern URL complessi e scenari di routing sofisticati. Questa sezione copre le funzionalità avanzate di routing disponibili nel DSL HTTP di Goa.
I parametri del percorso sono segmenti variabili nell’URL che catturano valori dinamici. Goa fornisce un supporto completo per la definizione e la gestione dei parametri del percorso.
I parametri del percorso sono definiti usando le parentesi graffe {}
:
var _ = Service("users", func() {
Method("show", func() {
HTTP(func() {
GET("/users/{id}") // Parametro semplice
GET("/users/{id}/posts/{postId}") // Parametri multipli
})
})
})
Puoi applicare pattern di corrispondenza ai parametri del percorso:
var _ = Service("files", func() {
Method("download", func() {
HTTP(func() {
// Corrisponde solo a ID numerici
GET("/files/{id:[0-9]+}")
// Corrisponde a nomi file con estensione
GET("/files/{filename:[^/]+\\.(?:jpg|png|gif)}")
})
})
})
I parametri del percorso possono essere resi opzionali usando il carattere ?
:
var _ = Service("blog", func() {
Method("posts", func() {
HTTP(func() {
// Il parametro year è opzionale
GET("/posts/{year?:[0-9]{4}}")
})
})
})
Le query string permettono di passare parametri opzionali e filtri attraverso l’URL. Goa fornisce un supporto robusto per la gestione delle query string.
Definisci parametri di query string usando il DSL Param
:
var _ = Service("products", func() {
Method("search", func() {
HTTP(func() {
GET("/products")
Param("q") // Parametro di ricerca
Param("category") // Filtro per categoria
Param("sort") // Ordinamento
})
})
})
Goa supporta array e mappe nelle query string:
var _ = Service("filter", func() {
Method("apply", func() {
HTTP(func() {
GET("/filter")
// Array: ?tags=tag1,tag2,tag3
Param("tags", ArrayOf(String))
// Mappa: ?filters[color]=red&filters[size]=large
Param("filters", MapOf(String, String))
})
})
})
Configura parametri opzionali con valori predefiniti:
var _ = Service("pagination", func() {
Method("list", func() {
HTTP(func() {
GET("/items")
Param("page", Int32, func() {
Default(1) // Valore predefinito
Minimum(1) // Validazione
})
Param("per_page", Int32, func() {
Default(20) // Valore predefinito
Minimum(1)
Maximum(100) // Limiti
})
})
})
})
Le route con caratteri jolly permettono di catturare segmenti di percorso multipli o sconosciuti.
Usa *
per catturare segmenti di percorso rimanenti:
var _ = Service("files", func() {
Method("serve", func() {
HTTP(func() {
// Cattura qualsiasi percorso sotto /static/
GET("/static/*filepath")
})
})
})
Combina caratteri jolly con pattern matching:
var _ = Service("api", func() {
Method("proxy", func() {
HTTP(func() {
// Cattura percorsi che iniziano con v1 o v2
GET("/api/{version:v[12]/*}")
})
})
})
Chiarezza dei Percorsi
Validazione
Consistenza