EntityModel 系列之 后台API基础功能

1 控制器类(ApiControlerXXX类)

以下的类都是向前继承的

1.1 ApiControler

是ZeroNet的Api控制器的基类,实现了Api调用过程

  • 通讯支持及通讯透明化

透明化即使用者无须关心也无法直接更改

  • 实现ZeroNet调用流程处理
  • 定义基础的API规范
1.3 ApiControllerEx

为管理后台提供基础基础支持

1.4 ApiController<>
  1. 实体对象实现IIdentityData
  2. 业务逻辑类基于UiBusinessLogicBase类
    实现基础的增删改查接口
功能方法API的URLGet参数Form表单
列表List[RoutePrefix]/edit/list视具体而定查询条件
读取一行数据Details[RoutePrefix]/edit/listid-
新增一行数据AddNew[RoutePrefix]/edit/addnew-读取
更新一行数据Update[RoutePrefix]/edit/updateid读取
删除多行数据Delete[RoutePrefix]/edit/deleteselects-
1.5 ApiControllerForDataState<>

扩展支持数据状态管理,此时:

  1. 实体对象实现IStateData
  2. 业务逻辑类基于BusinessLogicByStateData类
  3. 读取列表数据时,如果参数包含dataState,则作为查询条件,否则只查询未删除的数据
var state = GetIntArg("dataState", 0x100);
if (state >= 0 && state < 0x100)
{
    lambda.AddRoot(p => p.DataState == (DataStateType)state);
}
else
{
    lambda.AddRoot(p => p.DataState < DataStateType.Delete);
}
功能方法API的URLGet参数
锁定数据Lock[RoutePrefix]/state/lockselects
废弃数据Discard[RoutePrefix]/state/discardselects
禁用数据Disable[RoutePrefix]/state/resetdisable
启用数据Enable[RoutePrefix]/state/enableselects
重置数据状态Reset[RoutePrefix]/state/resetselects
1.6 ApiControllerForAudit<>

扩展支持审核状态管理,此时

  • 实体实现IHistoryData, IAuditData, IIdentityData接口
  • 业务逻辑类基于BusinessLogicByAudit类
  1. 读取列表数据时,如果参数包含audit,则作为查询条件
var audit = GetIntArg("audit", -1);
if (audit == 0x100 || audit < 0)
    return base.GetListData(lambda);
if (audit <= (int) AuditStateType.End)
{
    lambda.AddRoot(p => p.AuditState == (AuditStateType)audit);
    return base.GetListData(lambda);
}

switch (audit)
{
    case 0x10: //废弃
    case 0xFF: //删除
        SetArg("dataState", audit);
        break;
    case 0x13: //停用
        SetArg("dataState", (int)DataStateType.Disable);
        break;
    case 0x11: //未审核
        lambda.AddRoot(p => p.AuditState <= AuditStateType.Again);
        break;
    case 0x12: //未结束
        lambda.AddRoot(p => p.AuditState < AuditStateType.End);
        break;
}
功能方法API的URLGet参数说明
校验审核数据Validate[RoutePrefix]/audit/validateselects提交时也会校验,且校验不通过是无法完成提交审核操作的
提交审核SubmitAudit[RoutePrefix]/audit/submitselects
拉回已提交的审核Pullback[RoutePrefix]/audit/pullbackselects30分钟内可操作
退回(审核)BackAudit[RoutePrefix]/audit/backselects已提交未审核的数据,重新进入编辑状态
审核不通过AuditDeny[RoutePrefix]/audit/denyselects数据锁定
审核通过AuditPass[RoutePrefix]/audit/passselects数据锁定
重新审核UnAudit[RoutePrefix]/audit/redoselects之前已审核过的数据,重新进入编辑状态

2 参数解析

一般前后端数据析,都是用反序列化方式,但这可能导致一些黑盒效应(不能精确控制行为),所以我们采用比较原始的方式去读取Form表单或Get参数。这同时导致的后果是,编码量很大,这里通过设计器自动生成代码来解决这个问题。

2.1 Arguments属性(protected)

这个是一个懒加载属性,即第一次使用前初始化,初始化时,会将Get参数读入到Arguments属性中),后续可通过对Arguments属性的操作得到传入参数。
为了方便编码,提供了SetArg族方法来扩展参数内容,GetArgXXX族方法来简洁地读取参数

参数规则:
  1. 所有只需要ID的用户单选或多选操作,参数都是selects,是以逗号分开的主键数组可通过GetLongArrayArg(“selects”)方法取得。
2.2 AddNew与Update时读取Form
  1. AddNew流程
    系统接收请求→构造FormConvert→构造Data对象→ReadFormData方法填充数据→Business.AddNew→返回操作结果

这两种用户调用的保存操作,数据的__IsFromUser属性会被设置为true,以便识别行为类型

  1. Update流程为 :
    系统接收请求→构造FormConvert对象→通过ID读取数据库最新数据→ReadFormData方法填充数据→Business.Update→返回操作结果

我们采用无并发处理方式,所以在Update操作时会先通过ID读取数据库最新数据 。

  1. FormConvert类
    在保存操作(AddNew\Update)时构造,在ReadFormData重载方法中使用。FormConvert类提供ToXXX族方法方便地获取表单的值

内部也是将Form表单数据预读到Arguments属性

  1. 重载ReadFormData方法填充数据
    数据填充的方法重要但很无趣,所以默认这部分工作由设计器生成代码完成。

为了让你能抄到生成的代码,所以生成在代码在的DefaultReadFormData方法中。

  1. 如何自定义控制
    当你感觉设计器生成的代码不够用时,你可以在ReadFormData中直接手工处理。我们建议可用的代码直接复制过来,防止手贱打错字而出现BUG。

一种常见的情况是:保存时只允许更新部分数据。

  1. 扩展Business方法
    参见:在数据保存时进行扩展操作

3 API调用的上下文

3.1 GlobalContext.Current

通过GlobalContext.Current属性暴露

  • IsManageMode = true
    让你在BL等状态无法类中可判断是否来自管理后台的API调用
  • LastState 与 LastMessage
    由于基类已直接实现了最常用的方法,为了方便基类判断具体的错误代码及错误消息,可在任意位置设置这两个属性。只要你的操作返回为false,基类就会取这两个值去构造错误返回。
  • User
    网关鉴权后,会将用户信息一直传递下去,你通过这个属性就可取得当前登录用户的基本信息。
3.2 BusinessContext.Context

BusinessContext是GlobalContext的默认扩展

  • PageItem 当前页面节点配置
  • CurrentPagePower 当前页面权限配置

可通过这两个属性进行权限控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值