Iris çerçevesi, rota bağlama için iki modda bulunmaktadır, biri işlevsel diğeri ise MVC'dir. İşlevsel mod, belirtilen URL yoluna bir işleme işlevini bağlarken, MVC modu bir denetleyiciyi bir URL yoluna bağlar. Çerçeve, denetleyici yöntemlerinin adlandırma kurallarına dayalı olarak otomatik olarak karşılık gelen URL yollarını oluşturur ve ilgili denetleyici işlevlerini otomatik olarak bağlar.
İşlevsel Rota Bağlama
Iris çerçevesindeki en basit yönlendirme modeli, herhangi bir URL'ye bir işlevi bağlayabileceğiniz yerdir.
func main() {
// Varsayılan ara yazılımı olan bir iris uygulaması oluşturun:
// Varsayılan olarak, "debug" günlüğü düzeyini kullanır.
// "./locales" dizini altında bulunan yerelleştirme desteğini destekler.
// HTML şablonları "./views" veya "./templates" dizinleri altında bulunur.
// Erişim günlükleri "./access.log" içinde saklanır,
// ve kurtarma (çökmeden) ve istek kimliği ara yazılımları zaten eklenmiştir.
app := iris.Default()
// Sadece, Gin, echo ve diğer çerçevelerdeki yönlendirme mekanizmasıyla benzer şekilde, HTTP isteği yöntemine ve yola dayalı olarak rota işlevlerini bağlayın.
app.Get("/someGet", getirme)
app.Post("/somePost", gönderme)
app.Put("/somePut", yerleştirme)
app.Delete("/someDelete", silme)
app.Patch("/somePatch", yamalama)
app.Header("/someHead", başlık)
app.Options("/someOptions", seçenekler)
// Port üzerinde dinle
app.Listen(":8080")
}
func main() {
app := iris.Default()
// Bu işleyici /user/john ile eşleşecek ancak /user/ veya /user ile eşleşmeyecek
app.Get("/user/{name}", func(ctx iris.Context) {
name := ctx.Params().Get("name")
ctx.Writef("Merhaba %s", name)
})
// Ancak bu işleyici /user/john/ ile eşleşecek ve /user/john/send ile eşleşecek
// Eğer başka bir yol /user/john ile eşleşmezse, /user/john/ yönlendirecek
app.Get("/user/{name}/{action:path}", func(ctx iris.Context) {
name := ctx.Params().Get("name")
action := ctx.Params().Get("action")
message := name + " " + action
ctx.WriteString(message)
})
// Her eşleşen istek için, Context yol tanımını tutacak
app.Post("/user/{name:string}/{action:path}", func(ctx iris.Context) {
ctx.GetCurrentRoute().Tmpl().Src == "/user/{name:string}/{action:path}" // true
})
app.Listen(":8080")
}
Yerleşik parametre tipleri:
Parametre Tipi | Go Türü | Doğrulama Koşulu | Alım Yöntemi |
---|---|---|---|
:string |
string | Herhangi bir karakter (tek yol segmenti) | Params().Get |
:uuid |
string | uuidv4 veya v1 biçimi (tek yol segmenti) | Params().Get |
:int |
int | -9223372036854775808 ile 9223372036854775807 arası (x64) veya -2147483648 ile 2147483647 arası (x32), ev sahibi mimarisine bağlı olarak | Params().GetInt |
:int8 |
int8 | -128 ile 127 arası | Params().GetInt8 |
:int16 |
int16 | -32768 ile 32767 arası | Params().GetInt16 |
:int32 |
int32 | -2147483648 ile 2147483647 arası | Params().GetInt32 |
:int64 |
int64 | -9223372036854775808 ile 9223372036854775807 arası | Params().GetInt64 |
:uint |
uint | 0 ile 18446744073709551615 arası (x64) veya 0 ile 4294967295 arası (x32), ev sahibi mimarisine bağlı olarak | Params().GetUint |
:uint8 |
uint8 | 0 ile 255 arası | Params().GetUint8 |
:uint16 |
uint16 | 0 ile 65535 arası | Params().GetUint16 |
:uint32 |
uint32 | 0 ile 4294967295 arası | Params().GetUint32 |
:uint64 |
uint64 | 0 ile 18446744073709551615 arası | Params().GetUint64 |
:bool |
bool | "1" veya "t" veya "T" veya "TRUE" veya "true" veya "True" veya "0" veya "f" veya "F" veya "FALSE" veya "false" veya "False" | Params().GetBool |
:alphabetical |
string | Küçük harf veya büyük harf harfleri | Params().Get |
:file |
string | Küçük harf veya büyük harf harfleri, rakamlar, alt çizgi (_), kısa çizgi (-), nokta (.), boşluk veya diğer dosya adları için geçersiz özel karakterler içeremez | Params().Get |
:path |
string | Herhangi bir karakter, slash ile ayrılabilir (yol segmenti), ancak yolun son bölümü olmalı | Params().Get |
:mail |
string | E-posta adresi, alan doğrulanmamış | Params().Get |
:email |
string | E-posta adresi, alan doğrulanmış | Params().Get |
:date |
string | yyyy/ay/gün biçiminde, örneğin /blog/{param:date} /blog/2022/04/21 ile eşleşir | Params().GetTime ve Params().SimpleDate |
:weekday |
uint (0-6) veya string | Zamanın uzun adı biçiminde dize ("sunday" - "monday" veya "Sunday" - "Monday"), örneğin /schedule/{param:weekday} /schedule/monday ile eşleşir | Params().GetWeekday |
Grup Yönlendirme
Bazen API sürüm yönetimine ihtiyaç duyulur veya büyük bir modülün yönlendirmesi için birleşik bir önek ayarlanması gerekebilir. İşte grup yönlendirmesi becerisi devreye girer.
func main() {
app := iris.Default()
// Basit grup: v1
v1 := app.Party("/v1")
{
v1.Post("/login", loginEndpoint)
v1.Post("/submit", submitEndpoint)
v1.Post("/read", readEndpoint)
}
// Basit grup: v2
v2 := app.Party("/v2")
{
v2.Post("/login", loginEndpoint)
v2.Post("/submit", submitEndpoint)
v2.Post("/read", readEndpoint)
}
app.Listen(":8080")
}
MVC Yönlendirme
Go Iris çerçevesi MVC mimarisini destekler, belirli kurallar aracılığıyla rotaları belirli denetleyici işlevlerine eşler.
package main
import (
"strings"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/logger"
"github.com/kataras/iris/v12/middleware/recover"
"github.com/kataras/iris/v12/mvc"
)
// Iris uygulaması oluşturma
func newApp() *iris.Application {
app := iris.New()
// İki ara yazılımı ayarla
// recover, anormal program sonlanmalarını önlemek için panic hatalarını yakalamak için kullanılır
// logger, istekleri kaydetmek için kullanılır
app.Use(recover.New())
app.Use(logger.New())
// Denetleyiciyi "/" kök rotasına kaydet
mvc.New(app).Handle(new(ExampleController))
// Ayrıca rotaların gruplandırılmasıyla belirli bir yola kaydedilebilir
// Örnek: Denetleyiciyi /books yolu altına kaydedin
// mvc.New(app.Party("/books")).Handle(new(ExampleController))
}
func main() {
// Uygulamayı oluştur
app := newApp()
// http://localhost:8080
// http://localhost:8080/ping
// http://localhost:8080/hello
// http://localhost:8080/custom_path
app.Listen(":8080")
}
// İstekleri yönetmek için ExampleController tanımlama
type ExampleController struct{}
// GET isteğini yönet
// İstek URL'si: http://localhost:8080
func (c *ExampleController) Get() mvc.Result {
return mvc.Response{
ContentType: "text/html",
Text: "<h1>Karşılama</h1>",
}
}
// GetPing hizmeti
// Metod: GET
// İstek URL'si: http://localhost:8080/ping
func (c *ExampleController) GetPing() string {
return "pong"
}
// GetHello hizmeti
// Metod: GET
// İstek URL'si: http://localhost:8080/hello
func (c *ExampleController) GetHello() interface{} {
return map[string]string{"message": "Merhaba Iris!"}
}
// GetHelloWorld hizmeti
// Metod: GET
// İstek URL'si: http://localhost:8080/hello/world
func (c *ExampleController) GetHelloWorld() interface{} {
return map[string]string{"message": "Merhaba Iris! DefaultPath"}
}
MVC yönlendirmesi ile denetleyici işlevlerinin adlandırma kuralı arasındaki ilişki.
Rota Adresi: Rota Grubu + HTTP metodu adı + Fonksiyon adı (küçük harf olarak)
Örneğin:
func (c *ExampleController) GetPing() string {
return "pong"
}
Hiçbir rota gruplandırması yapılmadığından, bu işlev http://localhost:8080/ping rotası için GET isteklerini işleyebilir.