Wenn Sie einen Restdienst oder eine Webanwendung in Go erstellen möchten, müssen Sie eine Menge Arbeit in Bezug auf die Projekteinrichtung, Anwendungsarchitektur, Verzeichnisstrukturen und vieles mehr leisten. Was wäre, wenn es eine Webentwicklungsplattform gäbe, die vom Frontend (JavaScript, CSS) bis zum Backend (Datenbank, Routing) bereits alles enthält, um das Leben eines Go-Webentwicklers zu erleichtern. Nun, es gibt sie, und sie heißt
Büffel
Buffalo ist eine Entwicklungsumgebung für Webanwendungen für Go, die von Ruby on Rails, dem Play Framework, Django und anderen Web-Frameworks für schnelle Anwendungen inspiriert ist. Buffalo nutzt das Gorilla-Toolkit, ein Web-Toolkit für Go.
Installieren Sie
Buffalo kann durch Eingabe von installiert werden:
# from source with sqlite3 support
go get -u -v -tags sqlite github.com/gobuffalo/buffalo/buffalo
# from source *without* sqlite3 support
go get -u -v github.com/gobuffalo/buffalo-plugins
# using homebrew
$ brew install gobuffalo/tap/buffalo
Nach der Installation sollten Sie die buffalo cli installiert haben:
$ buffalo version
INFO[0000] Buffalo version is: v0.13.7
EINE REST-API
Buffalo kann auch einfache REST-APIs erstellen. Buffalo v0.13.7 unterstützt keine Module, daher müssen Sie ein Verzeichnis im $GOPATH erstellen, z.B. $GOPATH/src/github.com/binxio/blog-go-buffalo und geben Sie Folgendes ein
$ buffalo new go_blog_buffalo --api --skip-pop
$ cd go_blog_buffalo
$ buffalo dev
buffalo: 2018/11/27 19:16:41 === Rebuild on: :start: ===
buffalo: 2018/11/27 19:16:41 === Running: go build -v -i -tags development -o tmp/go-buffalo-build (PID: 17379) ===
buffalo: 2018/11/27 19:16:42 === Building Completed (PID: 17379) (Time: 1.322165735s) ===
buffalo: 2018/11/27 19:16:42 === Running: tmp/go-buffalo-build (PID: 17397) ===
INFO[2018-11-27T19:16:45+01:00] Starting application at 127.0.0.1:3000
INFO[2018-11-27T19:16:45+01:00] Starting Simple Background Worker
Der Dienst ist an Port '3000' verfügbar:
$ http :3000
HTTP/1.1 200 OK
Content-Length: 34
Content-Type: application/json
Date: Tue, 27 Nov 2018 18:17:36 GMT
Vary: Origin
{
"message": "Welcome to Buffalo!"
}
Generator
Buffalo verfügt über einen Generator, der Aktionen erzeugen kann. Starten Sie ein zweites Terminal, navigieren Sie zu $GOPATH/src/github.com/binxio/blog-go-buffalo und geben Sie ein:
$ buffalo g a cats List --skip-template
Der Generator hat eine Datei cats.go mit der Aktion CatsList erstellt.
Ändern Sie die folgenden Zeilen in app.go:
// change this line
app.GET("/cats/List", CatsList)
// to this line
app.GET("/cats", CatsList)
Beachten Sie, dass Buffalo den Server automatisch kompiliert und neu lädt, um die Änderungen an der Anwendung zu berücksichtigen.
Lassen Sie uns den CatsList Handler in cats.go implementieren:
package actions
import "github.com/gobuffalo/buffalo"
type Cat struct {
Name string json:"name"
Age int json:"age"
}
var cats = []Cat {
Cat { Name: "Elsa", Age: 16 },
Cat { Name: "Tijger", Age: 12 },
}
// CatsList default implementation.
func CatsList(c buffalo.Context) error {
return c.Render(200, r.JSON(cats))
}
Rufen Sie den Endpunkt auf:
$ http :3000/cats
HTTP/1.1 200 OK
Content-Length: 54
Content-Type: application/json
Date: Tue, 27 Nov 2018 18:42:38 GMT
Vary: Origin
[
{
"age": 16,
"name": "Elsa"
},
{
"age": 12,
"name": "Tijger"
}
]
Fügen wir mit dem Befehl eine neue Route hinzu:
$ buffalo g a cats GetById --skip-template
Ändern Sie die folgenden Zeilen in app.go:
// change this line
app.GET("/cats/GetById", CatsGetByID)
// to this line
app.GET("/cats/{id:[0-9]+}", CatsGetByID)
Fügen Sie die folgende Implementierung zu cats.go hinzu:
package actions
import (
"github.com/gobuffalo/buffalo"
"github.com/gorilla/mux"
"net/http"
"strconv"
)
type Cat struct {
ID int json:"id"
Name string json:"name"
Age int json:"age"
}
var cats = []Cat{
Cat{ID: 1, Name: "Elsa", Age: 16},
Cat{ID: 2, Name: "Tijger", Age: 12},
}
func CatsList(c buffalo.Context) error {
return c.Render(http.StatusOK, r.JSON(cats))
}
func CatsGetByID(c buffalo.Context) error {
params := mux.Vars(c.Request())
id, _ := strconv.Atoi(params["id"])
for _, cat := range cats {
if cat.ID == id {
return c.Render(http.StatusOK, r.JSON(cat))
}
}
return c.Render(http.StatusNotFound, nil)
}
Und rufen Sie den Endpunkt auf:
$ http :3000/cats/1
HTTP/1.1 200 OK
Content-Length: 32
Content-Type: application/json
Date: Tue, 27 Nov 2018 18:51:09 GMT
Vary: Origin
{
"age": 16,
"id": 1,
"name": "Elsa"
}
Fazit
Mit Buffalo ist es wirklich einfach, Rest Services zu erstellen. Buffalo erstellt ein Projekt-Skelett, generiert Aktionen und Vorlagen, führt den Server aus und bietet Hot Reload bei Codeänderungen. Wir haben zwei Aktionen erstellt, eine für Katzen und eine, um eine Katze anhand ihrer ID zu finden. Buffalo nutzt das Gorilla-Toolkit, was es uns leicht macht, den REST-Dienst mit Funktionen zu erweitern. Ich werde Buffalo auf jeden Fall für ein nächstes Projekt verwenden.
Verfasst von
Dennis Vriend
Unsere Ideen
Weitere Blogs
Contact




