iris框架get post put请求与数据格式

未匹配的标注

直接上代码,注释里面都写好了!

package main

import (
    "github.com/kataras/iris"
    "github.com/kataras/iris/context"
)

func main(){
    app := iris.New()
    //1.处理get请求
    app.Get("/getRequest", func(context context.Context) {
        //处理get请求,请求的url为 /getRequest
        path := context.Path()  //获取请求的路径
        app.Logger().Info(path) //打印结果到当前控制台为 /getRequest
    })
    //1.1 处理get请求
    app.Get("/userpath", func(context context.Context) {
        path := context.Path()  //获取请求的路径
        app.Logger().Info(path) //打印结果到当前控制台为 /userpath
        context.WriteString("请求路径为:" + path) //打印结果到前端界面
    })
    //1.2 处理get请求 并接收参数
    app.Get("userinfo", func(context context.Context) {
        path := context.Path()  //获取请求的路径
        app.Logger().Info(path) //打印结果到当前控制台为 /userinfo
        username := context.URLParam("username") //获取username参数
        app.Logger().Info(username)  //打印结果到当前控制台

        pass := context.URLParam("pass") //获取pass参数
        app.Logger().Info(pass)  //打印结果到当前控制台

        //返回html数据格式  context.WriteString()也是打印结果到前端界面 但是不能带着格式
        context.HTML("<h1>"+username+","+pass+"</h1>")
    })

    //2.处理post请求
    //正常的表单提交的形式    body当中 类型为x-www-form-urlencoded
    app.Post("postLogin", func(context context.Context) {
        path := context.Path()
        app.Logger().Info(path)
        username := context.PostValue("username")  //接收post参数 username
        pass := context.PostValue("pass") //接收post参数 pass
        app.Logger().Info(username,"    ",pass)
        context.HTML(username+"----"+pass)
    })

    //2.1 处理post请求
    //前端传递的是json字符串过来 body当中类型为:raw 内容为json字符串:{"username":"hushaoliang","pass":111111111}
    app.Post("/postJson", func(context context.Context) {
        path := context.Path()
        app.Logger().Info("请求的路径是:"+path)
        //json数据解析
        var user User //需要用一个结构体来存放数据 并且结构体当中要有tag标签
        //context.ReadJson() 里面传入的是结构体的指针类型 内存地址
        if err:=context.ReadJSON(&user);err != nil {
            panic(err.Error())
        }
        context.Writef("Received:%#+v\n",user)
    })


    //启动iris服务
    app.Run(iris.Addr(":8009"),iris.WithoutServerError(iris.ErrServerClosed))
}

//配合post请求 前端传递json字符串过来的时候需要用到结构体来存放数据
type User struct {
    Username string `json:"username"`
    Pass string `json:"pass"`
}

Get、Post、Put 等请求及数据返回格式#

数据请求方式的分类#

所有的项目中使用的请求都遵循 HTTP 协议标准,HTTP 协议经过了 1.0 和 1.1 两个版本的发展。

  • HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。
  • HTTP1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

因此,我们可以说,HTTP 协议一共定义了八种方法用来对 Request-URI 网络资源的不同操作方式,这些操作具体为:GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT 等八种操作方式。

Iris 框架的请求处理方式#

  • 1、Iris 框架中服务实例 app 中包含多个方法,用来支持对上述 HTTP 多种请求类型的直接处理,直接定义为 get 方法、post 方法、put 方法等,app 中包含的自动处理路由请求的方法与 http 请求类型的分类一致。

  • 2、除了上述 1 中自动处理各类别的请求外,框架还支持使用通用的 Handle 方法来自定义编写自己的请求处理类型及对应的方法。

两种路由请求的处理方式示例如下:

app := iris.New()

//url: http://localhost:8000/getRequest
//type:GET请求
app.Get("/getRequest", func(context context.Context) {
        path := context.Path()
        app.Logger().Info(path)
})

//url: http://localhost:/user/info
//type:POST请求
app.Handle("POST", "/user/info", func(context context.Context) {
        context.WriteString(" User Info is Post Request , Deal is in handle func ")
})

//启动端口监听服务
app.Run(iris.Addr(":8000"))

GET 请求#

向特定的网络资源数据发起请求。GET 请求可以携带请求数据,携带的请求数据会以?分割 URL 和传输数据,参数之间以 & 相连,比如 localhost:3000?name=davie&pwd=1...
如下是一个 http 的 get 类型的请求:

http://localhost:8000/userpath

服务端的路由处理方式如下:

//url:http://localhost:8000/userpath
//type:GET请求、用GET方法处理
app.Get("/userpath", func(context context.Context) {

        //获取Path
        path := context.Path()
        //日志输出
        app.Logger().Info(path)
        //写入返回数据:string类型
        context.WriteString("请求路径:" + path)
})

上述为使用已经封装的默认的 app.Get 方式来处理请求,使用 Handle 方法来进行处理,如下所示:

//url:http://localhost:8000/hello
//type:GET请求、Handle方法第一个参数为GET,表明是GET请求方式
app.Handle("GET", "/hello", func(context context.Context) {
        context.HTML("<h1> Hello world. </h1>")
})

POST 请求#

POST 请求在进行请求时会将请求数据放在请求 body 中进行请求,请求数据大小没有限制。在开发过程中,我们使用 postman 工具来进行 POST 请求的调试。
POST 请求的示例如下所示:

http://localhost:8000/postLogin

服务端的路由处理方式如下:

//type:POST请求
//携带数据:name、pwd命名的请求数据
app.Post("/postLogin", func(context context.Context) {
        //获取请求path
        path := context.Path()
        //日志
        app.Logger().Info(path)
        //获取请求数据字段
        name := context.PostValue("name")
        pwd, err := context.PostValueInt("pwd")
        if err != nil {
            panic(err.Error())
        }
        app.Logger().Info(name, "  ", pwd)
        //返回
        context.HTML(name)
})

上述为使用默认路由请求方法 Post 方法来进行处理,同时,还可以使用 Handle 方法来进行处理,如下图:

//url:http://localhost:8000/user/info
//type:POST请求,Handle方法第一个参数为POST,表明是Post请求
app.Handle("POST", "/user/info", func(context context.Context) {
        context.WriteString(" User Info is Post Request , Deal is in handle func ")
})

PUT、DELETE、OPTIONS、HEAD 等其他类型请求#

除了上述 GET、POST 最为常见的两种请求方式以外,还有 PUT、DELETE、OPTIONS、HEAD 等其他类型请求,对于其他类型的请求,如同 GET 和 POST 请求一样,都是可以通过两种方式来进行处理:

  • 1、iris 框架提供的自动识别请求类型的处理请求方法,如 put 方法、head 方法、options 方法、delete 方法等

  • 2、使用通用的 Handle 方法对路由请求进行处理,开发者自己选择具体的请求类型以、对应 url 和要进行处理的 func。

如下是 put 和 delete 的请求处理:
PUT 请求

//type:PUT类型请求
app.Put("/putinfo", func(context context.Context) {
        path := context.Path()
        app.Logger().Info("请求url:", path)
})

DELETE 请求

//type:DELETE类型请求  
app.Delete("/deleteuser", func(context context.Context) {
        path := context.Path()
        app.Logger().Info("Delete请求url:", path)
})

请求处理的数据格式返回#

在本节课程中,我们已经学习了如何对不同类型的请求进行处理以及如何获取请求所携带的数据,当后台接收到请求后,将会对请求进行处理,处理完毕后将数据返回给请求的客户端。接下来,我们看一看如何将数据进行返回,以及都有哪些形式。

在进行请求处理时,处理方法 func 有一个参数 context。Context 是用于处理请求的上下文环境变量,用于处理 http 请求及相关数据返回。iris 框架支持多种数据格式的返回,此处我们学习掌握返回 string、json、xml 以及 html 格式的数据。

返回 string 类型数据#

context.WriteString("hello world")

返回 json 格式的数据#

context.JSON(iris.Map{"message": "hello word", "requestCode": 200})

返回 xml 格式的数据#

context.XML(Person{Name: "Davie", Age: 18})

返回 html 格式数据#

context.HTML("<h1> Davie, 12 </h1>")

iris 框架中的不同类型的数据请求以及返回不同的数据格式结束。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~