ServiceComb/go-chassis 开发REST服务全指南
go-chassis 项目地址: https://gitcode.com/gh_mirrors/go/go-chassis
前言
ServiceComb/go-chassis是一个基于Go语言的微服务框架,它提供了完整的微服务开发能力。本文将详细介绍如何使用go-chassis开发REST风格的微服务,包括服务提供者和消费者的完整实现。
服务提供者开发
项目结构
首先创建一个标准的项目结构:
server
├── main.go
└── conf
├── chassis.yaml
└── microservice.yaml
1. 定义REST处理结构体
创建一个结构体来封装HTTP处理逻辑:
type RestFulHello struct {}
func (r *RestFulHello) SayHello(b *rf.Context) {
b.Write([]byte("获取用户ID: " + b.ReadPathParameter("userid")))
}
关键点:
- 方法名必须大写字母开头
- 方法参数必须是
*restful.Context
类型 - 通过
ReadPathParameter
获取路径参数
2. 定义URL路由模式
实现URLPatterns()
方法定义路由规则:
func (r *RestFulHello) URLPatterns() []rf.Route {
return []rf.RouteSpec{
{
Method: http.MethodGet,
Path: "/sayhello/{userid}",
ResourceFunc: r.SayHello,
Returns: []*rf.Returns{{Code: 200}}
},
}
}
路由配置说明:
Method
: HTTP方法(GET/POST/PUT/DELETE等)Path
: URL路径,支持路径参数ResourceFunc
: 处理函数Returns
: 定义返回状态码
3. 配置文件设置
chassis.yaml
配置服务协议和注册中心:
servicecomb:
registry:
address: http://127.0.0.1:30100
protocols:
rest:
listenAddress: 127.0.0.1:5001
microservice.yaml
定义服务名称:
servicecomb:
service:
name: RESTServer
4. 注册服务并启动
在main.go中完成初始化和启动:
func main() {
chassis.RegisterSchema("rest", &RestFulHello{})
if err := chassis.Init(); err != nil {
openlog.Error("初始化失败: "+err.Error())
return
}
chassis.Run()
}
服务消费者开发
项目结构
消费者项目结构类似:
client
├── main.go
└── conf
├── chassis.yaml
└── microservice.yaml
1. 配置文件设置
chassis.yaml
配置注册中心:
servicecomb:
registry:
address: http://127.0.0.1:30100
microservice.yaml
定义消费者名称:
servicecomb:
service:
name: RESTClient
2. 调用服务
在main.go中实现服务调用:
func main() {
if err := chassis.Init(); err != nil {
openlog.Error("初始化失败: " + err.Error())
return
}
req, err := rest.NewRequest("GET", "http://RESTServer/sayhello/world", nil)
if err != nil {
openlog.Error("创建请求失败")
return
}
resp, err := core.NewRestInvoker().ContextDo(context.TODO(), req)
if err != nil {
openlog.Error("请求执行失败")
return
}
defer resp.Body.Close()
openlog.Info("服务响应: " + string(httputil.ReadBody(resp)))
}
高级路由配置
URLPatterns支持更丰富的配置:
func (d *Data) URLPatterns() []rf.Route {
return []rf.Route{
{
Method: http.MethodGet,
Path: "/price/{id}",
ResourceFunc: d.GetPrice,
Consumes: []string{goRestful.MIME_JSON, goRestful.MIME_XML},
Produces: []string{goRestful.MIME_JSON},
Returns: []*rf.Returns{
{Code: http.StatusOK, Message: "成功", Model: Data{}}
},
Parameters: []*rf.Parameters{
{"x-auth-token", "string", goRestful.HeaderParameterKind, "认证令牌"},
},
},
}
}
参数类型支持:
PathParameterKind
: 路径参数QueryParameterKind
: 查询参数BodyParameterKind
: 请求体参数HeaderParameterKind
: 头部参数FormParameterKind
: 表单参数
API文档生成
启动服务后,可以通过以下方式访问API文档:
- 访问
http://ip:port/apidocs.json
获取OpenAPI格式文档 - 将返回内容复制到Swagger Editor中查看可视化文档
配置说明
禁用自动生成schema
在chassis.yaml
中添加配置可禁用自动生成schema:
servicecomb:
noRefreshSchema: true
环境变量配置
如果配置文件不在工作目录下,可通过环境变量指定:
CHASSIS_HOME
: 配置文件父目录CHASSIS_CONF_DIR
: 配置文件目录
总结
本文详细介绍了使用ServiceComb/go-chassis开发REST服务的完整流程,包括服务提供者和消费者的实现、路由配置、API文档生成等关键内容。通过go-chassis,开发者可以快速构建高性能的微服务应用,并享受框架提供的服务注册、发现等微服务核心能力。
go-chassis 项目地址: https://gitcode.com/gh_mirrors/go/go-chassis
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考