使用swagger生成golang服务器

使用swagger生成golang服务器

样例介绍

本次试验是借助swagger实现一个golang http服务器,前端使用vue的富文本框架。

服务器内容为一个简单的博客网站,具体实现功能页面有:

  • 查询所有用户 /users
  • 查询指定用户的所有文章 /articles/{userName}
  • 根据文章标签筛选指定用户的文章 /articles/{userName}/{tag}
  • 根据文章标题查询文章 /article/{title}

api

yaml文件

举一个例子来说:

paths:
  /users:
    get:
      tags:
      - "user"
      summary: "Get all the users"
      operationId: "getAllUsers"
      produces:
      - "application/json"
      parameters: []
      responses:
        "200":
          description: "successful operation"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/User"
        "400":
          description: "Invalid status value"

获得的数据将会以json的格式发送到客户端并被展示出来。这里只是简单地将json格式数据输出到界面上。
该文件也指定了数据的存储方式。

definitions:
  Article:
    type: "object"
    properties:
      author:
        type: "string"
      title:
        type: "string"
      urlPath:
        type: "string"
      tags: 
        type: "array"
        items: 
          type: "string"
    xml:
      name: "Article"

上述的文章类型数据保存了文章的 作者,标题,资源路径以及标签
这些数据将会持久化到数据库中去。
为了不让数据库存储的信息过于庞大以导致查询时间变长,这里只保存文章的 url路径 。因此前端的设计思路为:

  • 在查询一个类型的多篇文章时,只显示文章的标题(当然这里还可以额外存储文章的概要),并将每个标题作为一个链接指向一个url。这样当点击某个标题时,前端将会发送一个数据请求,后端通过该url从特定位置获取文章的二进制流并发送给前端。前端将其渲染在一个单独的页面。
  • 通过标题查询某篇文章时,服务器将直接获取文章主题内容并发送给前端。

该程序由于未设计注册登录功能,因此用户类型只存在 名称和文章标题数组 两个数据类型。

生成golang server

通过swagger editor自动生成的golang服务器已经根据yaml中的内容写好了路由器于启动器。

var routes = Routes{
	Route{
		"Index",
		"GET",
		"/",
		Index,
	},

	Route{
		"FindByAuthorTag",
		strings.ToUpper("Get"),
		"/articles/{userName}/{tag}",
		FindByAuthorTag,
	},

	Route{
		"FindByTitle",
		strings.ToUpper("Get"),
		"/article/{title}",
		FindByTitle,
	},

	Route{
		"FindByUserName",
		strings.ToUpper("Get"),
		"/articles/{userName}",
		FindByUserName,
	},

	Route{
		"GetAllUsers",
		strings.ToUpper("Get"),
		"/users",
		GetAllUsers,
	},
}

数据的json模型也在model_xxx.go中创建好,这样的话只需要在api_xxx.go文件中写入逻辑部分即可。

w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
Bytes, err := ioutil.ReadFile("./resources/user.json")
if err != nil {
	log.Fatalln(err)
}

前端界面

前端使用vue的axios插件来进行ajax通信,从而将接受数据渲染在对应位置。

getUser: function () {
    axios({
        method: 'get',
        url: 'users'
	}).then(function(res) {
    	this.users = res.data;
	})
}
参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

timeyy44

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值