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.