gin学习笔记

文章目录

  • 一、gin快速入门
    • 1)基本介绍
    • 2)安装
  • 二、RESTful API
    • 1) REST介绍
    • 2)API介绍
    • 3)RESTful API介绍
  • 三、示例
    • 1) SecureJSON
    • 2)PureJSON
    • 3)JSONP
    • 4)AsciiJSON

一、gin快速入门

1)基本介绍

Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API,但性能比 Martini 快 40 倍。

2)安装

​ 下载并安装

$ go get -u github.com/gin-gonic/gin

​ 将gin引入到代码中

  import "github.com/gin-gonic/gin"

​ 入门案例

package main

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}

二、RESTful API

1) REST介绍

​ rest 的含义就是客户端和web服务器端在进行交互时使用HTTP协议中的四个请求

  • ​ GET 获取资源
  • ​ POST 新建资源
  • ​ PUT 更新资源
  • ​ DELETE 删除资源

2)API介绍

​ API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。——百度百科。通熟来讲,就是别人写好的代码,或者编译好的程序,提供给你来使用,当你使用了别人代码(程序)中的某个函数、类、对象,就叫做使用了某个API

3)RESTful API介绍

​ 只要API程序遵从了REST风格,那就可以称其为RESTful API。目前在前后端分离的架构中,前后端基本都是通过RESTful API进行交互

例如,我们现在要编写一个管理书籍的系统,我们可以查询对一本书进行查询、创建、更新和删除等操作,我们在编写程序的时候就要设计客户端浏览器与我们Web服务端交互的方式和路径。按照经验我们通常会设计成如下模式:

请求方法 URL 含义
GET /book 查询书籍信息
POST /create_book 创建书籍记录
POST /update_book 更新书籍信息
POST /delete_book 删除书籍信息

同样的需求我们按照RESTful API设计如下:

请求方法 URL 含义
GET /book 查询书籍信息
POST /book 创建书籍记录
PUT /book 更新书籍信息
DELETE /book 删除书籍信息

Gin框架支持开发RESTful API的开发。

三、示例

1) SecureJSON

​ SecureJSON 用来防止json劫持

​ 如果给定的结构体是数值型,默认预置“while(1)” 到response body

func main() {
	r := gin.Default()

	// 你也可以使用自己的 SecureJSON 前缀
	// r.SecureJsonPrefix(")]}',\n")

	r.GET("/someJSON", func(c *gin.Context) {
		names := []string{"lena", "austin", "foo"}

		// 将输出:while(1);["lena","austin","foo"]
		c.SecureJSON(http.StatusOK, names)
	})

	// 监听并在 0.0.0.0:8080 上启动服务
	r.Run(":8080")
}

2)PureJSON

通常,JSON 使用 unicode 替换特殊 HTML 字符,例如 < 变为 \ u003c。如果要按字面对这些字符进行编码,则可以使用 PureJSON。Go 1.6 及更低版本无法使用此功能。

func main() {
	r := gin.Default()
	
	// 提供 unicode 实体
	r.GET("/json", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"html": "Hello, world!",
		})
	})
	
	// 提供字面字符
	r.GET("/purejson", func(c *gin.Context) {
		c.PureJSON(200, gin.H{
			"html": "Hello, world!",
		})
	})
	
	// 监听并在 0.0.0.0:8080 上启动服务
	r.Run(":8080")
}

3)JSONP

使用 JSONP 向不同域的服务器请求数据。如果查询参数存在回调,则将回调添加到响应体中。

从一个服务器请求数据,如果请求参数中存在callback,将会添加callback的值到 返回的json中。

格式如下

callbackValue(response bady)

func main() {
	r := gin.Default()

	r.GET("/JSONP", func(c *gin.Context) {
		data := map[string]interface{}{
			"foo": "bar",
		}
		
		// /JSONP?callback=x
		// 将输出:x({\"foo\":\"bar\"})
		c.JSONP(http.StatusOK, data)
	})

	// 监听并在 0.0.0.0:8080 上启动服务
	r.Run(":8080")
}

4)AsciiJSON

使用 AsciiJSON 生成具有转义的非 ASCII 字符的 ASCII-only JSON。(使用AsciiJSON生成仅有的ASCII字符的JSON,非ASCII字符会被转义)

func main() {
	r := gin.Default()

	r.GET("/someJSON", func(c *gin.Context) {
		data := map[string]interface{}{
			"lang": "GO语言",
			"tag":  "
"
, } // 输出 : {"lang":"GO\u8bed\u8a00","tag":"\u003cbr\u003e"} c.AsciiJSON(http.StatusOK, data) }) // 监听并在 0.0.0.0:8080 上启动服务 r.Run(":8080") }

context的以下方法在gin框架中把内容序列化为不同类型写入到响应主体中

// SecureJSON 将给定结构序列化为安全 JSON 到响应主体中。
// 如果给定的结构是数组值,则默认将 “while(1)” 添加到响应主体。
// 将 Content-Type设置为 “application/json” 。
func (c *Context) SecureJSON(code int, obj interface{})

// JSONP 将给定结构序列化为 JSON 到响应体中。
// 它可跨域向服务器请求数据。
// 将 Content-Type 设置为 “application/javascript” 。
func (c *Context) JSONP(code int, obj interface{})

// JSON 将给定结构序列化为 JSON 到响应主中。
// 将 Content-Type 设置为 “application/json” 。
func (c *Context) JSON(code int, obj interface{})

// AsciiJSON 将给定结构作为 JSON 序列化到响应体中,并将 Unicode 序列化为 ASCII 字符串。
// 将 Content-Type 设置为 “application/json” 。
func (c *Context) AsciiJSON(code int, obj interface{})

// PureJSON 将给定结构序列化为 JSON 到响应体中。
// 与 JSON 不同,PureJSON 不会用他们的 Unicode 实体替换特殊的 HTML 字符。
func (c *Context) PureJSON(code int, obj interface{})

你可能感兴趣的:(gin框架,后端)