【微服务】如何优雅的写文档(文档自动化swagger)
1 swagger简介
在微服务的开发模式下,除了底层的socket和rpc通信模式下,其中国际标准REST API是比较流行的方式,它基于http/https协议,加上JSON作为序列化的方式结合,是这几年微服务比较流行的技术标准,同时也是微服务的标配搭配模式。
不同的语言都有很多Web服务API的框架,并结合数据库访问的ORM模式下,组成API的快速开发模式,但是能结合API文档自动化,和设计,构建,测试等标准与一身的,可能就唯独swagger是个不错的选择。
swagger是这样的一个产品(框架),它类似于Google的Protocol buffer(Proto), facebook的thrift,以及grpc等客户端和服务通信的手段,以及服务端进行服务和返回内容的序列化,并且和这些技术框架类似,swagger定义了一套接口文件的规范。主要内容有以下几个方面:
设计:通过一套标准来定义设计和模型化的APIs。
构建:根据API构建生成不同语言的稳定可重用的代码。
文档化:帮助开发者创建api文档,即文档的自动化。
测试:可以快速的对API进行功能测试。
标准化:根据API的框架形成API的风格化。
而这篇文章,将重点进行自动化文档的API访问docs的讲解和实践介绍,讲解将采用golang的swagger框架go-swagger。
2 自动化文档例子
2.1 创建工程并下载goswagger
创建目录goswagger并将GOPATH设置到这个目录,并创建src目录,并与src下面创建autodocs
go get -u github.com/go-swagger/go-swagger
下载安装完成后目录结构如下
注意点:
对于golang.org的目录库的下载,直接找到golang的github目录地址:https://github.com/golang
然后通过git clone下载对应的net和text到本地,并放到GOPATH目录golang.org/x/下
2.2 编译安装swagger
到目录github.com/go-swagger/go-swagger/cmd/swagger下进行go install
编译成功后swagger可执行程序会生成到$GOPATH/bin 下面
2.3 创建api描述yml文件
在autodocs目录下创建api文档描述文件autodocs.yml
---
swagger: "2.0"
info:
description: 文档自动化swagger例子配置和演示
title: 自动化文档API例子doc文档说明
version: 1.0.0
consumes:
- application/autodocs.v1+json
produces:
- application/autodocs.v1+json
schemes:
- http
paths:
/get_info:
get:
summary: '1 获取信息get_info'
description: '这是一个获取信息数据的例子,调用传参可以获取你想要的信息,出错的时候会有返回'
operationId: get_info
consumes:
- application/json
produces:
- application/json
parameters:
- name: name
in: query
description: 名字
required: true
type: string
responses:
'200':
description: 成功
schema:
$ref: '#/definitions/SchemaModel'
'500':
description: 服务器内部错误
schema:
$ref: '#/definitions/ErrorModel'
definitions:
SchemaModel:
type: object
properties:
id:
type: integer
ErrorModel:
type: object
properties:
message:
type: string
code:
type: integer
2.4 运行api文档服务
验证yml文件定义是否有问题
swagger validate autodoc.yml
运行doc的文档服务
swagger serve --host=0.0.0.0 --port=2399 --no-open autodoc.yml
后台运行结果
网页访问查看API说明
3 为啥要文档自动化
首先,程序员本身考虑出发,程序员都不喜欢写文档,文档自动化其实是让程序员写代码。文档自动化是让系统自动生成文档的界面。
其次,swagger的文档自动化是系统自动生成,可以通过配置代码文件修改从而改变文档页面,便于维护和使用。
所以文档自动化其实是一个高效的,并且是在微服务开发模式下,一个比较好的工程实践。
而对于文档自动化的版本,则可以做到保留每个文档配置yml文件,并通过yml文件的名称来维护这个文档的版本,从而快速做到不同版本文档的想法。保留历史。