Pronto a costruire qualcosa di fantastico? Questa guida assume che tu abbia curl
installato. Qualsiasi altro client HTTP funzionerà altrettanto bene.
Iniziamo il nostro viaggio preparando un nuovo spazio di lavoro per il tuo primo servizio Goa:
mkdir hello-goa && cd hello-goa
go mod init hello
Nota: Mentre stiamo usando un nome di modulo semplice
hello
per questa guida, nei progetti del mondo reale useresti tipicamente un nome di dominio comegithub.com/tuousername/hello-goa
. Non preoccuparti - i concetti che imparerai funzionano esattamente allo stesso modo!
Ora arriva la parte eccitante - progettare il tuo servizio! Il potente DSL di Goa ti aiuterà a creare un’API pulita e professionale in poche righe di codice.
design
mkdir design
design/design.go
):package design
import (
. "goa.design/goa/v3/dsl"
)
var _ = Service("hello", func() {
Description("Un semplice servizio che dice ciao.")
Method("sayHello", func() {
Payload(String, "Nome da salutare")
Result(String, "Un messaggio di saluto")
HTTP(func() {
GET("/hello/{name}")
})
})
})
Analizziamo cosa fa questo design:
Service("hello", ...)
definisce un nuovo servizio chiamato “hello”sayHello
che:Payload
di tipo string - questo sarà il nome che vogliamo salutareResult
di tipo string - il nostro messaggio di saluto/hello/{name}
dove {name}
sarà automaticamente associato al nostro payloadQuesto semplice design mostra l’approccio dichiarativo di Goa - descriviamo cosa vogliamo che la nostra API faccia, e Goa gestisce tutti i dettagli di implementazione come il binding dei parametri, il routing e la documentazione OpenAPI.
Qui è dove avviene la magia! Usiamo il generatore di codice di Goa per trasformare il tuo design in una struttura di servizio completamente funzionante:
goa gen hello/design
Questo crea una cartella gen
contenente tutto ciò di cui hai bisogno - endpoint, logica di trasporto e persino
specifiche OpenAPI. Bello, vero?
Ora, creiamo un servizio funzionante con il comando example
:
goa example hello/design
Nota: Pensa al comando
example
come al tuo punto di partenza - ti dà un’implementazione funzionante su cui puoi costruire. Mentre rieseguiraigen
quando il tuo design cambia, il codice daexample
è tuo da personalizzare e migliorare.
Ecco cosa troverai nella tua cartella hello-goa
:
hello-goa
├── cmd
│ ├── hello
│ │ ├── http.go
│ │ └── main.go
│ └── hello-cli
│ ├── http.go
│ └── main.go
├── design
│ └── design.go
├── gen
│ ├── ...
│ └── http
└── hello.go
È ora di dare vita al tuo servizio! Modifica il file hello.go
e sostituisci il
metodo SayHello
con questa accogliente implementazione:
func (s *hellosrvc) SayHello(ctx context.Context, name string) (string, error) {
log.Printf(ctx, "hello.sayHello")
return fmt.Sprintf("Ciao, %s!", name), nil
}
Ci sei quasi - e non è stato sorprendentemente semplice?
Prima, mettiamo in ordine tutte le nostre dipendenze:
go mod tidy
Ora per il momento della verità - mettiamo online il tuo servizio:
go run hello/cmd/hello --http-port=8080
INFO[0000] http-port=8080
INFO[0000] msg=HTTP "SayHello" mounted on GET /hello/{name}
INFO[0000] msg=HTTP server listening on "localhost:8080"
Apri un nuovo terminale e vediamo il tuo servizio in azione:
curl http://localhost:8080/hello/Alice
"Ciao, Alice!"
🎉 Fantastico! Hai appena creato e distribuito il tuo primo servizio Goa. Questo è solo l’inizio di ciò che puoi costruire con Goa!
Vuoi provare qualcosa di ancora più interessante? Goa ha automaticamente generato un client da riga di comando per te. Provalo:
go run hello/cmd/hello-cli --url=http://localhost:8080 hello say-hello -p=Alice
Curioso di sapere cos’altro può fare il CLI? Controlla tutte le funzionalità:
go run hello/cmd/hello-cli --help
Man mano che il tuo servizio cresce, vorrai aggiungere nuove funzionalità. Ogni volta che aggiorni il tuo design con nuovi metodi, campi o errori, esegui semplicemente:
goa gen hello/design
Il codice del tuo servizio è tuo da far evolvere - Goa non toccherà nulla fuori dalla cartella gen
,
quindi sentiti libero di migliorare e personalizzare quanto vuoi!
Pronto a portare le tue competenze Goa al livello successivo? Immergiti nei nostri Tutorial dove imparerai a costruire potenti API REST, servizi gRPC e molto altro. Le possibilità sono infinite!