跳转至

定义与调用

定义

  • 要定义一个服务,只需要定义一个结构体,让其继承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:
    httpConfig := route.ServerHTTPConfig{Port: "8103", ServiceSuffix: "goss", Jsonp: true}
    srv := route.NewServerHTTP(httpConfig, "httpServer")
    
    Port:server的端口
    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字符串转为对象
  • 分页返回值