Goa fornisce un modo semplice per servire risorse statiche come HTML, CSS,
JavaScript e immagini attraverso la funzione Files
nel DSL del servizio. Questa
funzione ti permette di mappare percorsi HTTP a directory o file specifici sul disco,
consentendo al tuo servizio di distribuire contenuti statici in modo efficiente.
Files
La funzione Files
definisce un endpoint che serve risorse statiche via HTTP. Si
comporta in modo simile alla funzione standard http.ServeFile
, gestendo le richieste
per servire file o directory basandosi sul percorso definito.
Files(path, filename string, dsl ...func())
{*filepath}
) per corrispondere a segmenti variabili dell’URL.Per servire un singolo file, definisci la funzione Files
con un percorso specifico e la posizione del file sul disco.
var _ = Service("web", func() {
Files("/index.html", "/www/data/index.html", func() {
// Tutto opzionale, ma utile per la specifica OpenAPI
Description("Serve la home page.")
Docs(func() {
Description("Documentazione aggiuntiva")
URL("https://goa.design")
})
})
})
In questo esempio:
/index.html
- Le richieste a /index.html
serviranno il file situato in /www/data/index.html
./www/data/index.html
- Percorso assoluto del file sul disco.Per servire più file da una directory, usa un carattere jolly nel percorso.
var _ = Service("web", func() {
Files("/static/{*path}", "/www/data/static", func() {
Description("Serve risorse statiche come CSS, JS e immagini.")
})
})
In questo esempio:
/static/{*path}
- Il carattere jolly {*path}
corrisponde a qualsiasi sottopercorso dopo /static/
, permettendo il serving dinamico dei file./www/data/static
- Directory contenente le risorse statiche.Quando si usa un percorso con carattere jolly come /static/{*path}
, Goa combina il valore del carattere jolly con la directory base per localizzare il file:
Filename
Per esempio, con la configurazione:
Files("/static/{*path}", "/www/data/static")
Se il percorso URL è /static/css/style.css
, Goa risolverà a /www/data/static/css/style.css
.
Quando si servono directory, assicurati che i file index (es. index.html
) siano
mappati correttamente. Se non mappi esplicitamente index.html
sotto un percorso
con carattere jolly, la chiamata sottostante http.ServeFile
restituirà un reindirizzamento
a ./
invece del file index.html
.
var _ = Service("bottle", func() {
Files("/static/{*path}", "/www/data/static", func() {
Description("Serve risorse statiche per la SPA.")
})
Files("/index.html", "/www/data/index.html", func() {
Description("Serve l'index.html della SPA per il routing lato client.")
})
})
Questa configurazione assicura che le richieste a /index.html
servano il file
index.html
, mentre le richieste a /static/*
servano i file dalla directory static.
Quando implementi il serving di file statici nel tuo servizio Goa, hai diverse opzioni per gestire e servire i file:
Usando il File System: Nella tua implementazione del servizio, usa il file system per servire file incorporati.
Usando File Incorporati: Il pacchetto embed
in Go 1.16+ ti permette di incorporare
file statici direttamente nel tuo binario, rendendo il deployment più semplice e
affidabile.
Questo esempio dimostra come servire file statici usando il pacchetto embed
.
Assumendo il seguente design:
var _ = Service("web", func() {
Files("/static/{*path}", "static")
})
L’implementazione del servizio può essere:
package web
import (
"embed"
// ... altri import ...
)
//go:embed static
var StaticFS embed.FS
// ... altro codice del servizio ...
Nella funzione main, configura il server HTTP per servire file statici:
http.FS
dal StaticFS
incorporato usando http.FS(web.StaticFS)
New
generataFiles
nel designL’istanza del file system fornisce accesso ai file incorporati mantenendo la semantica e la sicurezza appropriate del file system.
func main() {
// Altro codice di setup...
mux := goahttp.NewMuxer()
server := genhttp.New(
endpoints,
mux,
goahttp.RequestDecoder,
goahttp.ResponseEncoder,
nil,
nil,
http.FS(web.StaticFS), // Passa il file system incorporato
)
genhttp.Mount(mux, server)
// Avvia il server...
}
In questo setup:
static
nel binario.L’utilizzo della funzione Files
in Goa ti permette di servire contenuti statici
in modo efficiente nei tuoi servizi. Definendo percorsi specifici e posizioni dei file,
puoi gestire la distribuzione di risorse statiche senza problemi. Assicurati di mappare
correttamente i file index e utilizza i file system incorporati per deployments ottimizzati.