数据库存储2个模型,每个模型都有一个或多个IP字段,需要通过 Golang Http Api(Restful Api) 返回 IP 信息。
ID | 主机名 | IP | 内存大小 | 磁盘大小 | 类型 | 负责人 |
---|---|---|---|---|---|---|
H001 | 10-1-162-18 | 10.1.162.18 | 32G | 2T | 物理机 | 小林 |
H002 | 10-1-162-19 | 10.1.162.19 | 32G | 2T | 物理机 | 小黄 |
... |
ID | 设备名 | 管理IP | 虚IP | 带外IP | 厂家 | 负责人 |
---|---|---|---|---|---|---|
S001 | 上海集群交换机 | 10.2.32.11 | 10.2.20.1,10.2.20.13,10.1.162.18 | 10.3.32.11 | 华为 | 老马 |
S002 | 广州集群交换机 | 10.2.32.13 | 10.2.21.5,10.2.21.23,10.2.21.40 | 10.3.32.13 | 思科 | 老马 |
... |
使用 Golang 开发一个 Api Server,支持通过 http 请求返回目标 IP 的部分信息
请求方法
支持
GET/POST
请求
入参
支持多个IP参数同时查询
输出
ip对应的设备信息和负责人信息
案例请求
GET /test/search_ip?ip="10.1.162.18,10.1.162.19"
POST /test/search_ip -d ‘{"ip":"10.1.162.18,10.1.162.19"}
案例响应
[ {"10.1.162.18":{ "_match": "ip", // 匹配到的字段名称 "model":"服务器", // 设备类型 "ip":"10.1.162.18", // ip "owner":"小林", // 负责人 "hostname": "10-1-162-18", // 主机名 } }, {"10.1.162.19":{ "_match": "ip", "model":"服务器", "ip":"10.1.162.19", "owner":"小黄", "hostname": "10-1-162-10", } }, {"10.1.162.18":{ "_match": "vip", // 匹配到的字段名称 "model":"交换机", // 设备类型 "ip":"10.2.32.11", // 管理IP "vip":"10.2.20.1,10.2.20.13,10.1.162.18", // 虚IP "console_ip":"10.3.32.11", // 带外IP "owner":"老马", // 负责人 "name":"上海集群交换机", // 设备名 } }]
目前 golang 比较常用的 api 框架有 beego,gin,iris,echo,martini 等,在选用之前我们可以花10分钟在知乎、Github上调研下各框架的优劣性,其中可以选取 Github Star 数量,百度搜索热度等作为参考点比较。
本次项目我们采用轻量级的 Gin 作为开发框架,特点是简单易用,高性能、易扩展,在中小型项目应用较多。
Gin 在 golang 中的地位就像是 python 中的 flask。
新建 golang 项目, Gin-IPs. 新建 src/main.go
package mainimport ( "fmt" "github.com/gin-gonic/gin" "os")func main() { route := gin.Default() route.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{ "10.1.162.18": map[string]string{"model": "主机", "IP": "10.1.162.18"}, }) }) if err := route.Run("127.0.0.1:8080"); err != nil { fmt.Println(err) os.Exit(1) }}
启动:
go run src/main.go
验证:
curl http://127.0.0.1:8080/
结果:
{"10.1.162.18":{"IP":"10.1.162.18","model":"主机"}}
Windows 编码:如果在 windows 出现乱码,则可以在 cmd 终端运行
chcp 65001
设置utf8
编码
通过简单的
main
函数验证,我们可以确认该框架基本符合我们的需求,接下来是进行 Gin-IPs 的功能和大概的目录规划,捋清整个项目的思路。
* 路由绑定 // 快捷、自动生成路由 URI * 请求参数检查 // 绑定请求参数并检查 * 响应规范 // 统一、规范的返回信息 * 路由中间件 * 签名验证 // API 安全认证 * 日志 // 请求日志 * 异常捕捉 // 请求异常捕捉 * 链路跟踪 // 请求链路跟踪 * 数据库 // 数据库操作 * 异步请求 // 耗时操作快速响应 * 部署 // 上线部署 * 监控 // 服务监控
Gin-IPs/├── bin // 二进制文件、启动/停止脚本├── conf // 配置文件目录├── logs // 日志文件目录├── src // 代码文件目录│?? ├── configure // 配置文件解析│?? ├── controller // Api 控制器,启动/重载 gin server│?? ├── dao // 数据库操作│?? ├── exception // 异常定义│?? ├── main.go // 主函数入口│?? ├── route // 路由目录,包括路由绑定、中间件│?? ├── service // 具体的业务处理逻辑│?? ├── utils // 工具函数集合│?? └── watcher // 监控上报└── test // 测试目录
接下来,我们就可以有计划地推进 Gin-Ips 开发了。
请访问 Gin-IPs 或者搜索 Gin-IPs