Gin Web Framework part 2

Gin Web Framework part 2درود دوستان امروز میخوام در مورد بخش دوم از سری مقالات فرم ورک Gin صحبت کنیمتوی مقاله قبل یه چی یادم رفته بود اونم این بود که چه پروژه های دارن از این فرم ورک استفاده می کنندgorush: A push notification server written in Go.fnproject: The container native, cloud agnostic serverless platform.photoprism: Personal photo management powered by Go and Google TensorFlow.krakend: Ultra performant API Gateway with middlewares.picfit: An image resizing server written in Go.gotify: A simple server for sending and receiving messages in real-time per web socket.cds: Enterprise-Grade Continuous Delivery & DevOps Automation Open Source Platform.فهرست بخش دوم از این مقالهUsing GET, POST, PUT, PATCH, DELETE and OPTIONSParameters in pathQuerystring parametersمیریم واسه توضیح هر بخشقسمت اول Using GET, POST, PUT, PATCH, DELETE and OPTIONSنحوه تعریف نوع درخواست ها مون رو مشخص می کنیم به صورت زیرfunc main() { router := gin.Default() router.GET(&quot/someGet&quot, getting) router.POST(&quot/somePost&quot, posting) router.PUT(&quot/somePut&quot, putting) router.DELETE(&quot/someDelete&quot, deleting) router.PATCH(&quot/somePatch&quot, patching) router.HEAD(&quot/someHead&quot, head) router.OPTIONS(&quot/someOptions&quot, options) router.Run()توی خط اول برای شروع کار حتما باید یه نمونه از این فرم ورک رو نمونه برداری کنیم ابن خط درواقع میدلویر پیش فرض این فرم ورک رو برام ست می کنه که کار این میدلویر logger and recovery می باشدتوی خط ۳ تا ۹ نوع درخواست مون رو مشخص می کنیم که GET, POST, PUT, PATCH, DELETE می باشدفک نکونم دیگه نیاز به توضیح بیشتری باشه چون همه چی واضح هستخوب خط ۱۰ برنامه ما رو رروی پورت پیش فرض ۸۰۸۰ تنظیم می کند اگر نیاز به تغییر این پورت دارید به صورت زیر می توایند تغییر دهیدrouter.Run(":4030")قسمت دوم Parameters in pathنحوه پاس دادن پارمتر از طریق آدرس یا url به صورت زیر انجام می شود.روش اول: در این روش که روش ساده ای هم هست روش ارسال یه پارامتر به آدرس هستrouter.GET(&quot/user/:name&quot, func(c *gin.Context) { name := c.Param(&quotname&quot) c.String(http.StatusOK, &quotHello %s&quot, name) })در روش فوق ما با ارسال یه رشته به آدرس بالا (user/:name/)که جایگزین اون name ما هست میشینه که به صورت زیر می باشد - عنوان مثال/user/:name/user/bardia/uaer/gopherروش دوم: مفهوم این کد ریدایرکت هست که زیر این کد توضیح میدمrouter.GET(&quot/user/:name/*action&quot, func(c *gin.Context) { name := c.Param(&quotname&quot) action := c.Param(&quotaction&quot) message := name + &quot is &quot + action c.String( message) })خوب توی کد فوق اگر ما بخواهیم که آدرس مدنظر ما با الگوی که بالا توی خط اول تعریف کردیم نبود به آدرس دیگری ریدایرکت بشهمثلن یعنی یه کاربری توی پنل خودش هست و فقط به آدرس های زیر از پنل خودش می تونه بره/user/bardia/post/user/bardia/category/user/bardia/task/user/bardia/commentحل فرض کنید قرار به آدرس زیر بره/user/bardia/installچون چنین آدرس موجود نیست اصلن توی سیستم ریدایرکت میشه به آدرس user/bardiaروش سوم: چک کردن آدرس ورودیrouter.POST(&quot/user/:name/*action&quot, func(c *gin.Context) { c.FullPath() ==&quot/user/:name/*action&quot // true })در روش فوق زمانی که ما بخواهیم آدرس ورودی رو چک کنیم ببینیم همون آدرس مورد انتظار هست از تابع fullpath در بدنه تابع درخواست کننده استفاده می کنیم.قسمت سوم Querystring parametersدرواقع Query String هر مقداریست که بعد از علامت سوال (“?”) در انتهای URL قرار می‌گیرد که می‌تواند یک یا تعداد بیشتری پارامتر باشد. ‏مثلا app.gopher.academy/?q=app یک URL همراه با Query String می‌باشد که مقدار q هم همراه با URL به سرور داده می‌شود که در اینجا برابر با app استساختار Query Stringhttps://derak.cloud/کد مربوطه در این فرم ورکrouter.GET(&quot/welcome&quot, func(c *gin.Context) { firstname := c.DefaultQuery(&quotfirstname&quot, &quotgopher&quot) lastname := c.Query(&quotlastname&quot) c.String(http.StatusOK, &quotHello %s %s&quot, firstname, lastname) }) قرار یه آدرس به صورت زیر داشته باشیمwelcome?firstname=Jane&lastname=Doeخوب برای اینکه آدرس ما به صورت یک querystring باشه از متد به اسم c.Query که توی خط ۳ نوشتم انجام میشهاما خط دوم یه متدی داره به اسم defaultquery که زمانی استفاده میشه که ما بخوایم بگیم یه پارمتری رو اختیاری کنیم یعنی اگع کاربر چیزی نفرستاد یا خالی بود به صورت پیش فرض عبارت gopher رو بفرست