Go Iris Web Framework'a Başlangıç
Kurulum
Not: Go sürümü 1.20 veya üstü gerektirir.
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest
Kodunuzda içeri aktarın:
import "github.com/kataras/iris/v12"
Kurulumla İlgili Sorun Giderme
Kurulum sırasında ağ hatalarıyla karşılaşırsanız, GOPROXY ortam değişkeninin geçerli bir değere ayarlı olduğundan emin olun.
go env -w GOPROXY=https://goproxy.io,direct
Yukarıdaki yöntemler sorunu çözmezse, go modül önbelleğini temizleyin:
go clean --modcache
Hızlı Başlangıç
Fonksiyonel Mod
$ cat main.go
package main
import "github.com/kataras/iris/v12"
func main() {
// Iris örneğini tanımla
app := iris.New()
// Bir rota grubunu tanımla (burada /books önekiyle bir rota grubu tanımlar)
booksAPI := app.Party("/books")
{
// Ara yazılım kullan
booksAPI.Use(iris.Compression)
// Rotaları ve rota işleyicilerini tanımla
// GET: http://localhost:8080/books
booksAPI.Get("/", list)
// POST: http://localhost:8080/books
booksAPI.Post("/", create)
}
// Port üzerinde dinle
app.Listen(":8080")
}
// Kitap örneği.
type Book struct {
Title string `json:"title"`
}
func list(ctx iris.Context) {
books := []Book{
{"Go'da Paralellik Uzmanlığı"},
{"Go Tasarım Desenleri"},
{"Kara Şapka Go"},
}
ctx.JSON(books)
// Not: Yanıt pazarlığının sunucunun önceliğine ve istemcinin tercihine dayalı olarak
// ctx.JSON yerine kullanılır:
// ctx.Negotiation().JSON().MsgPack().Protobuf()
// ctx.Negotiate(books)
}
func create(ctx iris.Context) {
var b Book
err := ctx.ReadJSON(&b)
// Not: Gelen verileri bağlamak için ctx.ReadBody(&b) kullanın.
if err != nil {
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Kitap oluşturma başarısız").DetailErr(err))
// Not: Sadece hata durumunda yalnızca düz metin yanıtı beklenirken ctx.StopWithError(code, err) kullanın.
return
}
println("Alınan kitap: " + b.Title)
ctx.StatusCode(iris.StatusCreated)
}
MVC Mimarlık Modeli
MVC paketini içe aktarın
import "github.com/kataras/iris/v12/mvc"
Rota grubuna dayalı olarak denetleyiciyi ayarlayın
m := mvc.New(booksAPI)
m.Handle(new(BookController))
Denetleyici uygulaması
type BookController struct {
/* Bağımlılık Enjeksiyonu */
}
// GET: http://localhost:8080/books adresine yanıt ver
func (c *BookController) Get() []Book {
return []Book{
{"Mastering Go Concurrency"},
{"Go Design Patterns"},
{"Black Hat Go"},
}
}
// POST: http://localhost:8080/books adresine yanıt ver
func (c *BookController) Post(b Book) int {
println("Alınan kitap: " + b.Title)
return iris.StatusCreated
}
Iris Web sunucunuzu çalıştırın:
$ go run main.go
> Dinleniyor: http://localhost:8080
> Uygulama başlatıldı. Kapatmak için CTRL+C'ye basın.
Kitapları listeleyin:
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
[
{
"title": "Mastering Go Concurrency"
},
{
"title": "Go Design Patterns"
},
{
"title": "Black Hat Go"
}
]
Yeni bir kitap oluşturun:
$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"Writing an Interpreter in Go\"}" \
http://localhost:8080/books
> HTTP/1.1 201 Created
Bu bir hata yanıtı örneğidir:
$ curl -X POST --data "{\"title\" \"Invalid Book\"}" \
http://localhost:8080/books
> HTTP/1.1 400 Bad Request
{
"status": 400,
"title": "Kitap oluşturma başarısız oldu",
"detail": "nesne anahtarı sonrası geçersiz karakter '\"'"
}