درود دوستان امروز میخوام در مورد بخش دوم از سری مقالات فرم ورک Gin صحبت کنیم
توی مقاله قبل یه چی یادم رفته بود اونم این بود که چه پروژه های دارن از این فرم ورک استفاده می کنند
میریم واسه توضیح هر بخش
نحوه تعریف نوع درخواست ها مون رو مشخص می کنیم به صورت زیر
func main() { router := gin.Default() router.GET("/someGet", getting) router.POST("/somePost", posting) router.PUT("/somePut", putting) router.DELETE("/someDelete", deleting) router.PATCH("/somePatch", patching) router.HEAD("/someHead", head) router.OPTIONS("/someOptions", options) router.Run()
توی خط اول برای شروع کار حتما باید یه نمونه از این فرم ورک رو نمونه برداری کنیم ابن خط درواقع میدلویر پیش فرض این فرم ورک رو برام ست می کنه که کار این میدلویر logger and recovery می باشد
توی خط ۳ تا ۹ نوع درخواست مون رو مشخص می کنیم که GET, POST, PUT, PATCH, DELETE می باشد
فک نکونم دیگه نیاز به توضیح بیشتری باشه چون همه چی واضح هست
خوب خط ۱۰ برنامه ما رو رروی پورت پیش فرض ۸۰۸۰ تنظیم می کند اگر نیاز به تغییر این پورت دارید به صورت زیر می توایند تغییر دهید
router.Run(":4030")
نحوه پاس دادن پارمتر از طریق آدرس یا url به صورت زیر انجام می شود.
روش اول: در این روش که روش ساده ای هم هست روش ارسال یه پارامتر به آدرس هست
router.GET("/user/:name", func(c *gin.Context) { name := c.Param("name") c.String(http.StatusOK, "Hello %s", name) })
در روش فوق ما با ارسال یه رشته به آدرس بالا (user/:name/)که جایگزین اون name ما هست میشینه که به صورت زیر می باشد - عنوان مثال
/user/:name
/user/bardia
/uaer/gopher
روش دوم: مفهوم این کد ریدایرکت هست که زیر این کد توضیح میدم
router.GET("/user/:name/*action", func(c *gin.Context) { name := c.Param("name") action := c.Param("action") message := name + " is " + action c.String( message) })
خوب توی کد فوق اگر ما بخواهیم که آدرس مدنظر ما با الگوی که بالا توی خط اول تعریف کردیم نبود به آدرس دیگری ریدایرکت بشه
مثلن یعنی یه کاربری توی پنل خودش هست و فقط به آدرس های زیر از پنل خودش می تونه بره
/user/bardia/post
/user/bardia/category
/user/bardia/task
/user/bardia/comment
حل فرض کنید قرار به آدرس زیر بره
/user/bardia/install
چون چنین آدرس موجود نیست اصلن توی سیستم ریدایرکت میشه به آدرس user/bardia
روش سوم: چک کردن آدرس ورودی
router.POST("/user/:name/*action", func(c *gin.Context) { c.FullPath() =="/user/:name/*action" // true })
در روش فوق زمانی که ما بخواهیم آدرس ورودی رو چک کنیم ببینیم همون آدرس مورد انتظار هست از تابع fullpath در بدنه تابع درخواست کننده استفاده می کنیم.
درواقع Query String هر مقداریست که بعد از علامت سوال (“?”) در انتهای URL قرار میگیرد که میتواند یک یا تعداد بیشتری پارامتر باشد. مثلا app.gopher.academy/?q=app
یک URL همراه با Query String میباشد که مقدار q هم همراه با URL به سرور داده میشود که در اینجا برابر با app
است
ساختار Query String
کد مربوطه در این فرم ورک
router.GET("/welcome", func(c *gin.Context) { firstname := c.DefaultQuery("firstname", "gopher") lastname := c.Query("lastname") c.String(http.StatusOK, "Hello %s %s", firstname, lastname) })
قرار یه آدرس به صورت زیر داشته باشیم
welcome?firstname=Jane&lastname=Doe
خوب برای اینکه آدرس ما به صورت یک querystring باشه از متد به اسم c.Query که توی خط ۳ نوشتم انجام میشه
اما خط دوم یه متدی داره به اسم defaultquery که زمانی استفاده میشه که ما بخوایم بگیم یه پارمتری رو اختیاری کنیم یعنی اگع کاربر چیزی نفرستاد یا خالی بود به صورت پیش فرض عبارت gopher رو بفرست