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

上一讲我们介绍了如何写让模板变量在页面上展示,本讲我们介绍一下后端开发工作中最常用的功能——接口。创建一个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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容

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