定义与调用
定义¶
- 要定义一个服务,只需要定义一个结构体,让其继承route.BaseService即可,如:
//import "github.com/ie310mu/ie310go/route" //TimeService .. type TimeService struct { route.BaseService }
- 注意,代码生成的基础类型是BaseLoginedService,此类型需要自己添加
- 服务名需要添加后缀Service
- 在服务中添加方法,只需要定义一个公开的方法即可,如:
//GetServerTime .. func (s TimeService) GetServerTime(args *route.ServiceArgs) string { now := time.Now() str := convert.DateTimeWithSecToStr(now) return str }
- 方法必须且只能有一个参数:args *route.ServiceArgs,实际需要的参数值的获取在后文说明
- 方法可以有0个或1个返回值,返回值可以是任何被json序列化的类型
注册、启动¶
- 生成一个httpServer:
Port:server的端口
httpConfig := route.ServerHTTPConfig{Port: "8103", ServiceSuffix: "goss", Jsonp: true} srv := route.NewServerHTTP(httpConfig, "httpServer")
ServiceSuffix:服务的后缀,比如TimeService最终的服务访问名是timeService.goss
Jsonp:server是否支持跨域请求 - 将service注册到server中:
srv.RegisterService(&TimeService{})
- 注册server:
route.RegisterServer(srv)
- 启动server:
ie310go.Run(nil)
- 关于优雅退出请参考 优雅退出
调用¶
- api路径示例:http://host:port/xxxxService.xxx?m=xxx&par1=xxx&par2=xxx
xxxxService.xxx部分:服务名.服务后缀(服务名对应于服务类ConsumeRecordService,首字母小写)
m=xxx:要调用的方法名称(服务类中的方法,必须是公开的方法,即首字母大写的方法)
par1=xxx&par2=xxx:传递的参数(需要什么参数,由方法内部代码逻辑确定) - 参数可以用get方式传递也可以用post方式传递,简单参数可用get传递,复杂参数建议用post,避免编码错乱问题
(post方式的调用可以参考 快速开始 )
返回值¶
- 返回的数据是一个json字符串, 是一个JSONServiceResult结构体:
state:接口调用状态,整数,返回0表示调用成功
message:字符串,state!=0时的错误消息
data:interface{},接口的返回值(服务方法的实际返回值)
DataJSON:字符串,备用字段
ExtandData:interface{},备用字段 - 如果使用jQuery调用接口,会自动转换为对象,使用其他框架可能需要做一次处理,将json字符串转为对象
- 分页返回值