আইরিস ফ্রেমওয়ার্কের দুটি মোড রয়েছে রাউট বাইন্ডিং এর জন্য, একটি হলো ফাংশনাল এবং অন্যটি MVC। ফাংশনাল মোডটি একটি নির্দিষ্ট URL পথে একটি হ্যান্ডলিং ফাংশনের সাথে বাইন্ড করে, ভবিষ্যতে মিনিউটের মোডটি একটি URL পথে একটি নিযোজিত নিয়ে বাইন্ড করে। ফ্রেমওয়ার্ক নিয়মিত ভিত্তিতে নিয়মীত URL পথ উত্পন্ন করে নির্দেশিকার নামকরণ নিয়ম অনুযায়ী এবং স্বয়ংক্রিয়ভাবে সামান্য নিয়ে বন্ধুকর্তা ফাংশন বাইন্ড করে।
ফাংশনাল রাউট বাইন্ডিং
আইরিস ফ্রেমওয়ার্কের সবচেয়ে সাধারণ রাউটিং মডেল, যে খণ্ডনে আপনি যে কোনও URL-এ একটি ফাংশন বাইন্ড করতে পারেন।
func main() {
// ডিফল্ট মিডলওয়্যার সহ একটি আইরিস অ্যাপ্লিকেশন তৈরি করুন:
// ডিফল্টভাবে, এটি "debug" লগ স্তর ব্যবহার করে।
// এটি "./locales" ডিরেক্টরিতে অবস্থিত লোকালাইজেশন সমর্থন করে।
// HTML টেম্প্লেটগুলি "./views" বা "./templates" ডিরেক্টরিতে অবস্থিত।
// অ্যাক্সেস লগগুলি "./access.log" এ সংরক্ষিত থাকে,
// এবং পুনরুদ্ধার (অব্যাহতির সাথে) এবং অনুরোধ আইডি মিডলওয়্যার ইতিমধ্যে সংযোজিত আছে।
app := iris.Default()
// পুরো ভাবে এইচটিটিপি অনুরোধ পদ্ধতি এবং পথের ভিত্তিতে কেবলমাত্র নিয়ে বন্ধুকাজের ফাংশনগুলি বাইন্ড করুন, যথাযথভাবে গিন, ইকো, এবং অন্যান্য ফ্রেমওয়ার্কের রাউটিং ব্যবস্থার মত।
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")
}
উপলব্ধ প্রস্তুত প্যারামিটারের প্রকার:
প্যারামিটার ধরণ | গো টাইপ | যাচাই শর্ত | পুনঃপ্রাপ্তি পদ্ধতি |
---|---|---|---|
: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 সংস্করণ ব্যবস্থাপনা প্রয়োজন হয়, বা একটি বড় মডিউলের রাউটিংয়ে একটি ঐক্যবদ্ধ প্রিফিক্স সেট করা হয়। এই জায়গায় গ্রুপ রাউটিং দক্ষতা এসে দাঁড়াতে পারে।
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")
}
MVC রাউটিং
Go Iris ফ্রেমওয়ার্ক MVC প্রয়োজন অনুসরণ করে, নির্দিষ্ট বিধিগুলিতে রুট গুলিকে নির্দিষ্ট নিয়ন্ত্রক ফাংশনের মাধ্যমে ম্যাপ করে।
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()
// দুটি মিডলওয়্যার সেট করুন
// recover অসামঞ্জাস্য প্রোগ্রাম টার্মিনেশন থেকে বিরতি করতে প্যানিক ত্রুটি ধরতে ব্যবহৃত হয়
// logger অনুরোধগুলিকে লগ করতে ব্যবহৃত হয়
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")
}
// নিয়ন্ত্রণ করার জন্য ExampleController নিয়ন্ত্রক সংজ্ঞায়িত করুন "/"
type ExampleController struct{}
// GET অনুরোধ হ্যান্ডেল করুন
// অনুরোধ URL: http://localhost:8080
func (c *ExampleController) Get() mvc.Result {
return mvc.Response{
ContentType: "text/html",
Text: "<h1>Welcome</h1>",
}
}
// GetPing পরিষেবা করে
// পদ্ধতি: GET
// অনুরোধ URL: http://localhost:8080/ping
func (c *ExampleController) GetPing() string {
return "pong"
}
// GetHello পরিষেবা করে
// পদ্ধতি: GET
// অনুরোধ URL: http://localhost:8080/hello
func (c *ExampleController) GetHello() interface{} {
return map[string]string{"message": "Hello Iris!"}
}
// GetHelloWorld পরিষেবা করে
// পদ্ধতি: GET
// অনুরোধ URL: http://localhost:8080/hello/world
func (c *ExampleController) GetHelloWorld() interface{} {
return map[string]string{"message": "Hello Iris! DefaultPath"}
}
MVC রাউটিং এবং নিয়মিতের নামের নিয়ম মধ্যে সম্পর্ক।
রুট ঠিকানা: রাউট গ্রুপ + HTTP পদ্ধতির নাম + ফাংশনের নামে (লোওয়ারকেস)
উদাহরণ:
func (c *ExampleController) GetPing() string {
return "pong"
}
কোনও রুট গ্রুপিং না সেট করা হয় না, এই ফাংশনটির মাধ্যমে GET অনুরোধগুলির জন্য http://localhost:8080/ping রুটটি হ্যান্ডেল করা যায়।