美文网首页
golang echo(二)---请求与响应

golang echo(二)---请求与响应

作者: lannisiter | 来源:发表于2020-08-23 22:20 被阅读0次

上一章节介绍了使用echo启动一个http服务器并提供一个简单的GET接口,这一章对请求与响应做一下详细的讲解。

Context

了解请求与响应之前首先要知道ehco框架提供了一个Context接口,Context 表示当前 HTTP 请求的上下文,我们需要知道的是Context的实现结构体context,context中包含了请求(request)、响应(response)以及参数等结构体,context是一个内部结构体,但是对外提供了访问的方法,我们可以在开发中使用context提供的方法做很多事情,比如获取请求路径、客户端ip、请求参数等等。

    context struct {
        request  *http.Request
        response *Response
        path     string
        pnames   []string
        pvalues  []string
        query    url.Values
        handler  HandlerFunc
        store    Map
        echo     *Echo
        logger   Logger
        lock     sync.RWMutex
    }
)
//我这里展示部分方法
//获取当前request
func (c *context) Request() *http.Request {
    return c.request
}
//获取当前response
func (c *context) Response() *Response {
    return c.response
}
//获取url参数
func (c *context) QueryParam(name string) string {
    if c.query == nil {
        c.query = c.request.URL.Query()
    }
    return c.query.Get(name)
}
//获取表单参数
func (c *context) FormValue(name string) string {
    return c.request.FormValue(name)
}

request

request是包含了当前请求信息的结构体,我们从中可以获取到前后端约定好的参数来作出相应的业务逻辑,这下面开始模拟请求

//在实体类中编写结构体
type User struct {
    Name    string  `json:"name"`
    Age     int     `json:"age"`
    Gender  int     `json:"gender"`     //1:男、2:女
}
//封装返回结果结构体
type Result struct {
    Code    int
    Msg     string
    Data    interface{}
}
func Success(msg string, data interface{}) Result {
    return Result{
        Code: 10000,
        Msg:  msg,
        Data: data,
    }
}

func Fail(msg string, data interface{}) Result {
    return Result{
        Code: 10002,
        Msg:  msg,
        Data: data,
    }
}

首先模拟一个添加用户的POST请求,这里使用了c.bind()这个方法,这个方法起到的作用是把表单参数或者JSON参数绑定至对应的结构体(这里必须是指针类型),字段需要一一对应,也就是说前端需要传递的表单或JSON参数名为name、age、gender才能绑定到结构体中。

//handler中接收并处理请求
func Add(c echo.Context) error {
    user := new(entity.User)
    err := c.Bind(user)
    if err != nil {
        return c.JSON(http.StatusOK,result.Fail("请输入正确参数!",nil))
    }
    return c.JSON(http.StatusOK,result.Success("添加成功",user))
}
1.jpg

接下来模拟一个GET请求用来获取用户信息

func Get(c echo.Context) error {
    name := c.QueryParam("name")
    if name == "" {
        return c.JSON(http.StatusOK,result.Fail("请输入正确参数!",nil))
    }
    /*这里编写自己的业务逻辑用来查询数据库*/
    //我这里直接模拟返回
    user := entity.User{
        Name:   "tom",
        Age:    18,
        Gender: 1,
    }
    return c.JSON(http.StatusOK,result.Success("查询成功",user))
}
2.jpg

response

response是包含了返回信息的结构体,echo提供了多种类型的返回结果

//用于发送一个带有状态码的纯文本响应。
func(c echo.Context) error {
  return c.String(http.StatusOK, "Hello, World!")
}
//用于发送一个带有状态码的简单 HTML 响应。
func(c echo.Context) error {
  return c.HTML(http.StatusOK, "<strong>Hello, World!</strong>")
}
//用于发送一个带状态码的 JSON 对象,它会将 Golang 的对象转换成 JSON 字符串。
//也就是我上面的示例,一般用于前后端分离的项目,也是主流
func(c echo.Context) error {
  return c.JSON(http.StatusOK, user)
}

路由

上面编写了处理请求的handler,这里介绍一下如何把handler注册到路由中,这里对应的就是上面handler。

func AddAccount(e *echo.Echo) {
    account := e.Group("/user")
    account.POST("/add", Add)      //添加用户
    account.GET("/get", Get)      //查询
}

相关文章

  • golang echo(二)---请求与响应

    上一章节介绍了使用echo启动一个http服务器并提供一个简单的GET接口,这一章对请求与响应做一下详细的讲解。 ...

  • Requests

    Requests库 目录一、Requests基础二、发送请求与接收响应(基本GET请求)三、发送请求与接收响应(基...

  • HTTP入门(二):用Chrome开发者工具查看 HTTP 请求

    HTTP入门(二):用Chrome开发者工具查看 HTTP 请求与响应 本文简单总结HTTP的请求与响应。本文主要...

  • django知识点五

    请求与响应 一、请求与响应 请求与响应过程 当用户请求一个页面时,Django 把请求的数据包装成一个 HttpR...

  • nginx配置指令rewrite的last、break、redi

    配置示例 注:示例中使用了echo模块,这样可以直接看到响应的内容,以及变量修改情况 请求演示 请求URL:htt...

  • 2018-10-23 http协议与抓包

    一.http协议分为 1.请求(请求行,请求头,请求正文)2.响应(响应行,响应头,响应正文) 二.用Fiddle...

  • Node

    先发布任务~一、 搭建服务二、请求与响应三、http客户端请求四、同源策略及JSONP 一、搭建服务、二、请求与响...

  • Golang grpc server响应请求

    朋友偶然问了一句,golang的grpc在接到请求后是如何调到对应的实现函数的? 当时对着代码讲了一通。后来想想觉...

  • 客户端模拟http请求

    导语 在Golang中web开发中net/http是经常用到的包,在这个包中包含了各种请求与响应的方式,下面我会一...

  • java笔记2-servlet-处理请求与响应

    目标 怎么处理请求与响应web容器到底是怎么实现请求与响应的HttpServletRequest处理请求http请...

网友评论

      本文标题:golang echo(二)---请求与响应

      本文链接:https://www.haomeiwen.com/subject/jjwwjktx.html