Service
说明¶
- service提供Get;GetList;Add;Update;Delete等方法
- 考虑接口暴露的安全性问题,上面的方法默认是不开放的(方法名小写)
- 要开放上述方法,需要修改文件尾部goExportsSettings标记对中的代码,将false改为true:
//goExportsSettingsBegin //true;Get;GetList;Add;Update;Delete;注意:修改true/false后要重新生成一次; //goExportsSettingsEnd
- 修改为true后,5个方法都会开放,不想开放的方法在此行删除即可,比如不想开放add、update、delete,则修改为:
//goExportsSettingsBegin //true;Get;GetList;注意:修改true/false后要重新生成一次; //goExportsSettingsEnd
- 注意,开放的方法,前后都要有;
- 每个方法都提供自定义代码标记对,供简单修改,如果修改太复杂,建议在customContentBegin标记对中添加新方法,方法定义与自动生成的方法类似(大写、需要一个args参数)
如何调用¶
- 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{},备用字段
分页返回值¶
- getList方法返回的是*paging.PagingData
- pageIndex:页码,从1开始
- rowsInPage:每页多少条数据
- pagecount:总页数
- total:总行数
- rows:结果数组
- userData:备用字段
add等方法中的事务处理¶
- 自动生成的add方法代码如下:
//Add .. func (s ConsumeRecordService) Add(args *route.ServiceArgs) string { item := s.getItem(args, true) mp := mapper.GetConsumeRecordMapper("") useTx := false //customBeforeAddContentBegin item.CreateTime = time.Now() //customBeforeAddContentEnd if !useTx { _, count := mp.Insert(nil, item) //item.ID = lastIntID if count == 0 { panic("Insert未成功") } } //customAfterAddContentBegin //customAfterAddContentEnd return item.ID }
- 默认情况下,add方法是不使用事务的。
如果需要使用事务,在customBeforeAddContent标记对中useTx赋值为false,然后在customAfterAddContent标记对中写入自己的代码。(当然,如果闲麻烦、包含无效代码等,可以直接添加一个函数写到customContent标记对中)
服务导出¶
- 自动生成的service代码包含init函数如下:
func init() { route.Add(&ConsumeRecordService{}) }
- 通过route.Services可以获取到所有注册的服务:
func appinit() { //... exportServices(route.Services, srv) //... } func exportServices(ss []route.IService, srv route.Server) { for _, s := range ss { srv.RegisterService(s) } }
- 在exportServices中可以增加导出逻辑,比如根据配置文件判断是否需要注册
- 自己添加的服务类,可以根据项目情况灵活应用确定是否添加init函数
高级¶
service的高级使用可参考 api开发