快速创建API服务
本章将会引导你使用HAS自带的"HelloService"快速创建一个API服务(你可以在github上看到HelloService的源码)。
安装
mkdir myProject
cd myProject
go mod init myProject
go get -u github.com/drharryhe/has
go mod tidy -compat=1.17
开始
1. main.go
在项目目录下编写main.go
package main
import (
"github.com/drharryhe/has/connectors/hwebconnector"
"github.com/drharryhe/has/core"
"github.com/drharryhe/has/datapackers/hjsonpacker"
"github.com/drharryhe/has/routers/hlocalrouter"
"github.com/drharryhe/has/services/hellosvs"
)
func main() {
// 创建gateway
gateway := core.NewAPIGateway(&core.APIGatewayOptions{
// Server配置
ServerOptions: core.ServerOptions{
// 路由配置
Router: hlocalrouter.New(),
},
Connectors: []core.IAPIConnector{
hwebconnector.New(), // Web服务
},
Packers: []core.IAPIDataPacker{
hjsonpacker.New(),
},
})
// 注册服务
gateway.Server().RegisterService(&hellosvs.Service{}, nil)
// 启动服务
gateway.Start()
}
2. 配置文件
在项目目录下编写conf.toml
Debug = true # 是否开启Debug模式
LogFileName = 'run.log' # log输出文件名
LogOutputs = ['file', 'console'] # log 输出位置
Version = '1' # 项目版本
[APIGateway]
AddressField = 'IP' # 区分地址字段
UserField = 'User' # 区分用户字段
# 熔断设置 HAS的熔断使用hystrix-go 参考https://github.com/afex/hystrix-go/
BreakerDashboard = true # 是否开启面板 https://pkg.go.dev/github.com/afex/hystrix-go/hystrix#hdr-Enable_dashboard_metrics
BreakerErrorPercentThreshold = 10 # 错误百分比阈值
BreakerLimitAPI = true # API限流
BreakerLimitIP = true # IP限流
BreakerLimitUser = true # 用户限流
BreakerMaxConcurrentRequest = 10 # 最大并发请求
BreakerRequestTimeout = 10 # 请求超时设置
BreakerRequestVolumeThreshold = 10 # 一个统计窗口 10 秒内请求数量。达到这个请求数量后才去判断是否要开启熔断
BreakerSleepWindow = 10 # 当熔断器被打开后,SleepWindow 的时间就是控制过多久后去尝试服务是否可用了
UseBreaker = false # 通过用户熔断
[HelloService]
LimitedSlots = ''
Name = 'hello' # 服务名称
[JsonPacker]
[LocalRouter]
[Server]
MaxProcs = 0 # 使用 CPU核数,0为全部使用
PprofPort = 0 # 在Debug
[WebConnector]
AddressField = 'IP'
Packer = 'JsonPacker' # 数据解析
Port = 8989 # Web服务端口
3. api.json文件
在项目目录下编写api.json
{
"name": "HAS api", // api描述
"versions": [
{
"version": "v1", // api版本号
"apis": [
{
"name": "hello", // 接口名,次接口地址为 http://127.0.0.1:<port>/v1/hello
"desc": "hello",
"disabled": false,
"endpoint": {
"service": "hello", // 配置文件中对应的name
"slot": "HelloSlot" // 对应Slot文件中的方法名
}
}
]
}
]
}
4.运行
全部编写完成后,项目结构如下:
.
├── api.json
├── conf.toml
├── go.mod
├── go.sum
└── main.go
在项目目录下执行以下命令运行
go run main.go
如出现以下输出,则说明启动成功!
[A] >生产环境<
┌───────────────────────────────────────────────────┐
│ Fiber v2.35.0 │
│ http://127.0.0.1:8989 │
│ (bound on host 0.0.0.0 and port 8989) │
│ │
│ Handlers ............. 4 Processes ........... 1 │
│ Prefork ....... Disabled PID ............. 47185 │
└───────────────────────────────────────────────────┘
[service.go:120] Service [HelloService] Registered...
[server.go:206] server started...
5.访问api
提示
注册一个服务后,会同时开启GET和POST2种方法的访问
在浏览器中访问以下网址
http:/v1/hello?name=has
浏览器返回json
{
"data": "Hello has",
"error": {
"code": 0,
"desc": "",
"cause": ""
}
}
相关信息
HAS启动后会对conf.toml自动排序,并加入一些字段;根目录会生成一个pid.pid文件,无需担心,这是正常的,如果你定义了日志文件,HAS会在根目录输出日志文件。
(如果你的项目需要使用git,你可以将pid.pid文件和日志文件写入.gitignore中)。