Gin Web Framework part 6

Gin Web Framework part 6

Gin Web Framework part 6درود دوستان امروز میخوام در مورد بخش شیش از سری مقالات فرم ورک Gin صحبت کنیمفهرست بخش شیش از این مقالهBind HeaderProtoBuf renderingSecureJSONJSONPAsciiJSONPureJSONمیریم واسه توضیح هر بخشدر این روش زمانی که شما می خواید داده ای رو به هدر خود اضافه کنید از این روش استفاده می کنید. به تکه کد زیر توجه کنیدtype testHeader struct {
Rate int `header:&quotRate&quot`
Domain string `header:&quotDomain&quot`
}
func main() {
r := gin.Default()
r.GET(&quot/&quot, func(c *gin.Context) {
h := testHeader{}
if err := c.ShouldBindHeader(&h); err != nil {
c.JSON(200, err)
}
fmt.Printf(&quot%#vn&quot, h)
c.JSON(200, gin.H{&quotRate&quot: h.Rate, &quotDomain&quot: h.Domain})
})توی خط اول ما یه struct تعریف کردیم و روبه روی هر فیلد از واژه header استغاده کردیم چون میخوام این فیلد ها رو توی هدر استفاده کنیم.توی خط ۹ ما از تابع ShouldBindHeader استفاده می کنیم جهت بررسی هدر مون که توی struct تعریف کردیمتست و خروجی: curl -H “rate:300” -H “domain:music” 127.0.0.1:8080/ output {“Domain”:”music”,”Rate”:300}توی این قسمت با یه ساختار دیگه به نام protobuf آشنا میشیم و نحوه کارش توی این فرم ورک خوب اگه در مورد این ساختار داده ای جدید چیزی نمی دونید باید بگم (البته ساده میگم بعد خودتون برید در موردش بخونید) یک ساختار داده ای هست که تمام داده های شما رو تبدیل به باینری می کندنمونه کدr.GET(&quot/someProtoBuf&quot, func(c *gin.Context)
{
reps := []int64{int64(1), int64(2)}
label := &quotgopher&quot
data := &protoexample.Test{
Label: &label,
Reps: reps,
}
c.ProtoBuf(http.StatusOK, data)
})همانطور که مشاهد می کنید ما برای کار با این ساختار از تابعی به نام protobuf که در خط ۹ می باشد استفاده می کنیم.استفاده از SecureJSON برای جلوگیری از json hijackingاگر ساختار داده ای ما آرایه باشد ، پیش فرض “while (1)” را به بدن پاسخ اضافه می کند.به کد زیر دقت کنیدfunc main() {
r := gin.Default()
r.SecureJsonPrefix(&quot)]}’,n&quot)
r.GET(&quot/someJSON&quot, func(c *gin.Context) {
names := []string{&quotbardia&quot, &quotkazemi&quot, &quotgolang&quot}
c.SecureJSON(http.StatusOK, names)
}
)}ما برای این کار از SecureJsonPrefix که در خط ۳ هست استفاده کردیمخروجی به صورت زیرwhile(1);[“bardia”,”kazemi”,”golang”]در واقع JSONP (مخفف JSON with Padding – به معنی JSON به همراه padding) متدی برای ارسال داده های JSON است که مشکلات بین-دامنه ای را حل می کند.به تکه کد زیر دقت کنید:r.GET(&quot/JSONP&quot, func(c *gin.Context) {
data := gin.H{ &quotbardia&quot: &quotkazemi&quot, }
c.JSONP(http.StatusOK, data)
})
}خروجی به صورت زیرcurl http://127.0.0.1:8080/JSONP?callback=golang golang({“bardia”:”kazemi”})orcurl http://127.0.0.1:8080/JSONP?callback=cplusplus cplusplus({“erfan”:”kazemi”})توی خط ۳ ما از jsonp برای این کار استغاده کردیم. که خروجی گویای تعریف jsonp می باشد.با استفاده از AsciiJSON ما می توانیم کارکتر های که کد اسکی ندارند رو تو خروجی چاپ و استغاده کنیمکد زیرr.GET(“/someJSON”, func(c *gin.Context) { data := gin.H{ “lang”: “GO语言”, “persian”:”کوروش کبیر””tag”: “<br>”, }رمز نگاری کارکتری های خاص به کارکترهای بامعنی جهت استفاده در سند های html به صورت زیرکد:r.GET(&quot/purejson&quot, func(c *gin.Context) {
c.PureJSON(200, gin.H{ &quothtml&quot: &quot<b>Hello, gopher academy!</b>&quot, })
})

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *