آئرس فریم ورک میں روٹ بائنڈنگ کے لئے دو طریقے ہیں، ایک فنکشنل اور دوسرا MVC ہے۔ فنکشنل موڈ مخصوص یو ار ایل پیتھ پر ہینڈلنگ فنکشن کو بائنڈ کرتا ہے، جبکہ MVC موڈ ایک کنٹرولر کو ایک یو ار ایل پیتھ سے بائنڈ کرتا ہے۔ فریم ورک خود بخود کنٹرولر میتھڈز کے نامنگ قواعد کے مطابق متعلقہ یو ار ایل پیتھ بناتا ہے اور خود بخود متعلقہ کنٹرولر فنکشن کو بائنڈ کرتا ہے۔

فنکشنل روٹ بائنڈنگ

آئرس فریم ورک میں سب سے آسان راستہ نما ماڈل، جہاں آپ کسی بھی یو ار ایل سے فنکشن کو بائنڈ کرسکتے ہیں۔

func main() {
    // ترتیب ایک آئرس ایپلیکیشن بنائیں:
    // ڈیفالٹ میڈل وئیر استعمال ہوتا ہے.
    // "ڈیبگ" لاگ لیول کا استعمال کرتے ہوئے.
    // "debug" لاگ لیول کا استعمال کرتے ہوئے.
    // "debug" لاگ لیول کا استعمال ہوتا ہے.
    // یہ "./locales" ڈائریکٹری کے نیچے مقامیکرنوں کی حمایت کرتا ہے.
    // "html" ٹیمپلیٹس "./views" یا "./templates" ڈائریکٹریز میں موجود ہیں.
    // "html" ٹیمپلیٹس یہاں https://github.com/iris-contrib/translator میں موجود ہیں.
    // //"html" ٹیمپلیٹس یہاں https://github.com/iris-contrib/translator/storage میں موجود ہیں.
    
	// URL اس بند کریں:
    app := iris.Default()

	// تو بس ہم HTTP Request Method اور یو ار ایل کے مسئلے کے مطابقت کے ساتھ راستے فنکشنز کو بائنڈ کریں, جیسا کہ Gin, echo, اور دیگر فریم ورکس میں راستے کی حکمت عملی ہے.
    app.Get("/someGet", getting)
    app.Post("/somePost", posting)
    app.Put("/somePut", putting)
    app.Delete("/someDelete", deleting)
    app.Patch("/somePatch", patching)
    app.Header("/someHead", head)
    app.Options("/someOptions", options)
    
	// پورٹ پر سننا
    app.Listen(":8080")
}
func main() {
    app := iris.Default()

    // یہ ہینڈلر /user/john سے میچ کرے گا لیکن /user/ یا /user کے ساتھ میچ نہیں کرے گا
    app.Get("/user/{name}", func(ctx iris.Context) {
        name := ctx.Params().Get("name")
        ctx.Writef("ہیلو %s", name)
    })
    
    // البتہ یہ ہینڈلر /user/john/ اور /user/john/send سے میچ کرے گا
    // اگر /user/john سے میچ ہوتا نہ ہو، تو وہ /user/john/ پر ریڈائریکٹ کرے گا
    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)
    })
    
    // ہر میچ ہونے والے درخواست کے لئے، کنٹیکسٹ ریویو میں راستے کی تعریف رکھے گا
    app.Post("/user/{name:string}/{action:path}", func(ctx iris.Context) {
        ctx.GetCurrentRoute().Tmpl().Src == "/user/{name:string}/{action:path}" // سچ
    })
    
    app.Listen(":8080")
}

دستیاب واضع پیرامیٹر قسم:

پیرامیٹر قسم Go ٹائپ تصدیق کی شرط حاصل کرنے کا طریقہ
:string string کوئی حرف (انفرادی راستہ سیگمنٹ) Params().Get
:uuid string uuidv4 یا v1 فارمیٹ (انفرادی راستہ سیگمنٹ) Params().Get
:int int -9223372036854775808 سے 9223372036854775807 تک (x64) یا -2147483648 سے 2147483647 تک (x32)، میزبان معماری پر منحصر ہوگا Params().GetInt
:int8 int8 -128 سے 127 تک Params().GetInt8
:int16 int16 -32768 سے 32767 تک Params().GetInt16
:int32 int32 -2147483648 سے 2147483647 تک Params().GetInt32
:int64 int64 -9223372036854775808 سے 9223372036854775807 تک Params().GetInt64
:uint uint 0 سے 18446744073709551615 تک (x64) یا 0 سے 4294967295 تک (x32)، میزبان معماری پر منحصر ہوگا Params().GetUint
:uint8 uint8 0 سے 255 تک Params().GetUint8
:uint16 uint16 0 سے 65535 تک Params().GetUint16
:uint32 uint32 0 سے 4294967295 تک Params().GetUint32
:uint64 uint64 0 سے 18446744073709551615 تک Params().GetUint64
:bool bool "1" یا "t" یا "T" یا "TRUE" یا "true" یا "True" یا "0" یا "f" یا "F" یا "FALSE" یا "false" یا "False" Params().GetBool
:alphabetical string چھوٹے حروف یا بڑے حروف کے حروف Params().Get
:file string چھوٹے حروف یا بڑے حروف کے حروف، نمبر، انڈرسکور (_), ہائفن (-), ڈاٹ (.), خالی جگہ یا دیگر فائل ناموں کے لئے غلط خصوصی حروف نہیں ہوسکتے Params().Get
:path string کوئی حرف، سلاش سے الگ کیا جا سکتا ہے (راستے کا حصہ)، لیکن راستے کے آخری حصے ہونے چاہئیں Params().Get
:mail string ای میل ایڈریس، ڈومین کی تصدیق نہیں ہوگی Params().Get
:email string ای میل ایڈریس، ڈومین کی تصدیق ہوگی Params().Get
:date string فارمیٹ yyyy/mm/dd، مثلاً /blog/{param:date} /blog/2022/04/21 سے میچ ہوگا Params().GetTime اور Params().SimpleDate
:weekday uint (0-6) یا string وقت کے لمبے نام کی مانند سٹرنگ فارمیٹ ("sunday" سے "monday" یا "Sunday" سے "Monday")، مثلاً /schedule/{param:weekday} /schedule/monday سے میچ ہوگا Params().GetWeekday
## گروپ راوٹنگ

کبھی کبھار، API ورزن منیجمنٹ کی ضرورت ہوتی ہے، یا کسی بڑے ماڈیول کے راوٹنگ کے لئے ایک متحدہ پریفکس سیٹ کرنا ہوتا ہے۔ یہاں گروپ راوٹنگ کی صلاحیت آتی ہے۔

```go
func main() {
    app := iris.Default()

    // سادہ گروپ: v1
    v1 := app.Party("/v1")
    {
        v1.Post("/login", loginEndpoint)
        v1.Post("/submit", submitEndpoint)
        v1.Post("/read", readEndpoint)
    }
    
    // سادہ گروپ: v2
    v2 := app.Party("/v2")
    {
        v2.Post("/login", loginEndpoint)
        v2.Post("/submit", submitEndpoint)
        v2.Post("/read", readEndpoint)
    }
    
    app.Listen(":8080")
}

ایم وی سی راوٹنگ

گو لبریز فریم ورک ایم وی سی معماری کو سپورٹ کرتا ہے، راوٹز کو مخصوص کنٹرولر فنکشنز کے ذریعے میپ کرتا ہے خاص قواعد کے ذریعے۔

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 ایپلیکیشن بنائیں
func newApp() *iris.Application {
    app := iris.New()
	// دو مِڈلویئر سیٹ کریں
	// ریکوروَر پینک خطا کو روکنے کے لئے استعمال ہوتا ہے
	// لاگر درخواستوں کو لاگ کرنے کے لئے استعمال ہوتا ہے
    app.Use(recover.New())
	app.Use(logger.New())

	// کنٹرولر کو "/" روٹ راوٹ کے لئے رجسٹر کریں۔
    mvc.New(app).Handle(new(ExampleController))
	
	// یہ رُٹ گروپنگ کی مدد سے کسی خاص راستہ پر بھی رجسٹر کیا جا سکتا ہے
    // مثال: کنٹرولر کو /books راستے کے نیچے رجسٹر کریں
    // mvc.New(app.Party("/books")).Handle(new(ExampleController))
}

func main() {
	// ایپلیکیشن بنائیں
    app := newApp()

	// http://localhost:8080
	// http://localhost:8080/ping
	// http://localhost:8080/hello
	// http://localhost:8080/custom_path
    app.Listen(":8080")
}

// مثال کنٹرولر کو تعریف کریں تاکہ اِس نے "/", "/ping"، اور "/hello" کے لئے درخواستیں سنوائیں۔
type ExampleController struct{}

// GET درخواست سنائیں
// درخواست URL: http://localhost:8080
func (c *ExampleController) Get() mvc.Result {
	return mvc.Response{
		ContentType: "text/html",
		Text:        "<h1>خوش آمدید</h1>",
	}
}

// GetPing سروس کرے
// میتھڈ:   GET
// درخواست URL: http://localhost:8080/ping
func (c *ExampleController) GetPing() string {
	return "پُنگ"
}

// GetHello سروس کرے
// میتھڈ:   GET
// درخواست URL: http://localhost:8080/hello
func (c *ExampleController) GetHello() interface{} {
	return map[string]string{"message": "ہیلو آئرس!"}
}

// GetHelloWorld سروس کرے
// میتھڈ:   GET
// درخواست URL: http://localhost:8080/hello/world
func (c *ExampleController) GetHelloWorld() interface{} {
	return map[string]string{"message": "ہیلو آئرس! ڈیفالٹ پاتھ"}
}

MVC راوٹنگ اور کنٹرولر فنکشنز کے نامکیں قاعدہ کے درمیان تعلق۔

راوٹ ایڈریس: روٹ گروپ + HTTP میتھڈ نام + فنکشن نام (چھوٹے حروف)

مثال کے طور پر:

func (c *ExampleController) GetPing() string {
	return "پُنگ"
}

چونکہ کوئی راوٹ گروپنگ سیٹ نہیں ہے، لہذا یہ فنکشن GET درخواست کو منظور کرسکتا ہے راوٹ http://localhost:8080/ping کے لئے۔