前端工程师吐后端工程师(第八讲)——接口的开发

上一讲我们介绍了如何写让模板变量在页面上展示,本讲我们介绍一下后端开发工作中最常用的功能——接口。创建一个go_test4文件夹,然后把go_test3中的代码复制进去。然后打开main.go文件,进行更改。

说到接口就必不可少的涉及到传值和接口返回,还有GET方式 、POST方式获取数据。下面我们就先举例来看看一个GET接口如何接收参数并且返回数据,具体代码如下:

package main

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

import "net/http"

func main() {

    r:= gin.Default()

    r.GET("/index", func(c *gin.Context) {

        firstname := c.Query("firstname")

        lastname := c.Query("lastname");

        c.String(http.StatusOK, "Hello %s %s", firstname, lastname)

    })

    r.Run(":9999") // listen and serve on 0.0.0.0:9999

}

代码前半部分还是跟第七讲中一样,我们只需要关注 c.Query 和 c.String这两个差异点就可以了。c.Query方法相当于Nodejs请求下图代码中的paramStr=url.parse(req.url).query;这一行代码。

var http=require('http'),url=require('url'),

querystring=require('querystring');

http.createServer(function(req,res{

paramStr=url.parse(req.url).query;

)}

就是在url中查找Key为firstname的字段,然后把value 返回给firstname。lastname也是的获取方式也是一样的。

至于c.String本身跟c.HTML还是有一些差异的。c.String有三个参数,第一个是请求返回的Code码,这个参数直接http.StatusOK就可以。第二个参数是返回字符串原型,第三个是需要替换的字符串变量。

c.HTML也有三个参数,第一个也是请求返回的Code码,第二个是渲染HTML的模板地址(可以是html也就是不能设置模板变量的,也可以是tmpl可以设置模板变量的),最后一个是就是需要展示的模板变量名。

具体函数先介绍到这里,后面我们看一下运行代码之后的访问界面。

访问:http://localhost:9999/index?firstname=%22Chen1%22&lastname=%22Chen2%22

可以看到下图,我们在访问页面请求时加入了firtname和lastname参数。然后在通过Gin的router获取到了参数。最终把参数拼接为Hello "Chen1" "Chen2"字符串,返回给前端页面。

变量返回页面


另外,在服务器控制台我们也能看到用户携带的对应参数信息,这部分信息不是我们打印的,而是Gin自动会在控制台拼接出访问用户的PATH,如下图所示。


控制台输出


我们已经讲过了GET请求的方式返回数据,以及获取URL中的参数。

接下来我们该完成另一个在平时开发中常用的接口形式——POST方法传递数据。

接下来我们把main.go文件改为下面的代码。

package main

import (

    "fmt"

    "net/http"

    "github.com/gin-gonic/gin"

)

func main() {

    r := gin.Default()

    r.POST("/post", func(c *gin.Context) {

        name := c.PostForm("name")                           

        password := c.DefaultPostForm("password", "00000000")

        result, ok := c.GetPostForm("ok")                

        fmt.Println(ok)

        c.String(http.StatusOK, "hello %s %s %s", name, password, result)

    })

    r.Run(":9999") // listen and serve on 0.0.0.0:9999

}

然后执行go run main.go。

然后开启postman,发POST送一个请求,并且设置对应的参数name参数为aaaa,对应的password参数为password,对应的ok参数为ok。发送postman请求看看返回如下图所示。


Gin的post返回

  c.String(http.StatusOK, "hello %s %s %s", name, password, result)方法中,我们请求的参数都已经返回。可以大家观察到还有一个fmt.Println(ok)没有输出。fmt.Println(ok)要在控制台中观察。如下图所示:


println方法打印的true

下面我们就对在后端中获取Gin中POST的参数的三个常用方法做一下介绍。

PostForm获取POST参数,如果没有获取到对应key的返回值,触发零值机制,返回空字符串

DefaultPostForm获取POST参数,如果没有获取到返回key的返回值,返回设置的默认值,也就是DefaultPostForm函数的第二个参数。

GetPostForm获取post参数,但是有两个返回值,第一个返回值表示返回结果,如果没有获取对应key的返回值时,同样出发零值机制,返回空字符串。第二个返回值会返回当时key值是否存在的状态,能获取到返回true,如果不能获取到返回false。

到此最常用的两种获取数据方式就介绍到这里了,有了他们其实我们就可以应对大部分的业务逻辑接口。

陈辰(CC老师)    978563552@qq.com

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转发自:http://shanshanpt.github.io/2016/05/03/go-gin.html gi...
    dncmn阅读 6,086评论 0 1
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,315评论 0 3
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵胜奥阅读 4,894评论 0 1
  • 所谓框架 框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写...
    人世间阅读 216,440评论 11 242