Http接口请求
Http接口定义
语法
http_method : "接口基准相对路径" 接口类型 : "接口相对地址" [ ("接口简要说明") 处理逻辑定义 * fields_param: { 参数列表定义 } fields_cond: { 条件参数列表定义 } fields_checker: { 参数值检查验证定义 } fields_filter: { 参数值检查过滤转义 } 常规固定参数名设定列表 返回值定义说明
接口类型 定义接口的行为类型,由给定类型的字母开头。
可以有基础的由程序自动生成相关代码的 CURLD 创建,更新,读取,列表,删除
可以有自定义处理逻辑的 O,处理逻辑定义一定要有logic 指定函数名
可以在CURLDO后面追加1,2,3数字指定逻辑处理函数额外添加的参数
1: 最前面添加HttpRequest参数,可以通过这个参数直接获取原始的Http请求信息,比如请求的头信息,如果要对请求头做额外处理,可以指定 2: 在1的基础上,在HttpRequest参数后面再追加HttpResponse参数,可以通过这个参数直接对返回的应答做额外处理,比如返回额外的头信息 3. 在2的基础上,在逻辑函数的最后再追加_contentsetted 参数,用于表示是否已经在逻辑处理函数中设置好返回结果,不使用默认的代码生成的返回值
Logic函数的参数列表
参数类型 | 参数名 | 含义 | 出现条件 | 后缀 | 逻辑函数 |
CSHttpRequest | Request | 原始Http请求信息 | CRUDLO | 1,2,3 | logic,logic_pre,logic_pre2,logic_post |
CSHttpResponse | Response | 原始Http应答信息 | CRUDLO | 2,3 | logic,logic_pre,logic_pre2,logic_post |
map<string,string> | _data | 经过初始验证的请求参数 | CRUDLO | 必有 | logic,logic_pre,logic_pre2,logic_post |
map<string,string> | _cond | 经过初始验证的条件参数 | CRUDL | 有设置fields_cond | logic_pre,logic_pre2,logic_post |
Item * | item | 要处理的对象 | RUD | – | logic_post |
string | _extradata | 列表分页信息 | L | – | logic_pre,logic_pre2,logic_post |
list<Item *> | items | 要处理的对象列表 | L | logic_post | |
string | wherePart | 筛选数据的SQL条件部分 | CRUDL | – | logic_pre2 |
int | nErrorCode | 错误代码,正常为0 | CRUDLO | 必有 | logic,logic_pre,logic_pre2,logic_post |
string | res | 返回结果字符串 | CRUDLO | 必有 | logic,logic_pre,logic_pre2,logic_post |
string | _extra | 有列表分页信息 | O | – | logic |
bool | _contentsetted | 是否已手工设置好返回结果 | CRUDLO | 3 | logic,logic_pre,logic_pre2,logic_post |
处理逻辑定义 定义实际处理接口逻辑的代码函数名,函数名要以 do开头,这边写的名称不需要do
logic: 正常的处理逻辑,一般由自定义接口类型使用 logic_pre: 前置执行,比如检查一下传入的参数值是否合法等 logic_pre2: 前置执行,比如检查一下传入的参数值是否合法等,函数参数上有wherePart指定SQL条件范围,logic_pre2和logic_pre同时设置时,忽略logic_pre的设置 logic_post: 后置执行,比如添加了一个数据后要做一些处理
注: 一般logic为O类型自定义逻辑函数使用,logic_pre,logic_pre2,logic_post为CRULD默认创建的代码逻辑提供在数据操作前后的插入式Hook代码处理。
处理权限验证 定义响应接口所需要的相关权限验证
need_roles: 需要的身份 need_auth: 需要的权限 need_login: 需要用户先登录 need_sign: 参数需要签名处理 need_ips: 限制指定的一些IP可以访问这个接口
默认错误代码 定义一些默认错误代码,在没有到logic处理前由生成代码验证、执行过程碰到的错误
error_db: 数据库存取失败的错误代码 error_noparam: 缺少参数的错误代码,所有参数都为空情况或必要的条件参数组都为空 error_nodataparam: 缺少数据参数的错误代码,比如update更新,没有指定要更新的数据字段
参数的形式
has_extra: 是否有分页信息参数,用于列表数据获取类的接口 param_type: 参数类型 object, list param_form: 参数传递的方式, json,xml,field param_class:当为json,xml时,可以设置的对象,如果不设置,则将定义的参数列表封装为json或xml格式
参数列表定义 对参数做定义说明
update_fieldname : 当接口只更新一个字段值时,指定要更新的字段名 update_fieldvalue: 指定要更新的字段值 update_fieldnames : 当接口只更新多个字段值时,指定要更新的字段名列表 update_fieldvalues: 指定要更新的字段值列表,要和前面字段名顺序相同 update_fields: 限定哪些字段名可以用来更新,多个字段之间用逗号分隔,比如 status=0,enabled=1 设置status=0且设置enabled=1 fields_related: 关联字段 fields_show: 获取数据显示类的接口,限定输出的字段名列表,多个之间用逗号分隔 fields_showlist: 前端列表界面要显示的字段列表 fields_cond : 条件参数 fields_condvalues: 固定传入的条件参数和对应的参数值,多个字段之间用逗号分隔,比如 status=0,enabled=1 fields_cond_group: 条件分组,竖线分割各个组,当所有分组都有为空值时,提示err_noparam错误,比如id|mobile,userid表示条件要id不为空或者mobile不为空且userid不为空,否则做error_noparam出错提示 fields_param: 对应数据更新类的接口,可以是要更新值的字段 fields_canempty: 可以输入值为空的字段名列表,多个名称之间用逗号分隔 fields_upload: 用于上传文件的字段名列表,多个名称之间用逗号分隔
// 参数名 参数类型 参数说明 name (string) ("用户账号名,必须小写字母开头后面可以字母和数字")
常规固定参数名称设置 定义一些可以由系统自动设置值的参数名称,比如用户IP,创建时间等
可以有如下一些字段名称设置,要和参数列表中的名称做对应
// 用户IP field_clientip : ip, // 用户浏览器UA field_clientua : ua, // 当前登录用户名 field_loginuser: user, // 当前登录用户的ID field_loginuid: uid, field_loginusertype: usertype, // 当前时间 field_now : timestamp, // 数据创建时间 field_createtime: createtime, // 数据最后更新时间 field_lastoperate: lastoperate, field_creator : creator, field_lastoperator: lastoperator, field_creatorid: creatorid, field_lastoperatorid: lastoperatorid, // 状态字段 field_status: status,
字段输入值验证
fields_checker : 对输入字段值做验证 fields_filter : 对输入的字段做预先过滤处理,比如先做转义处理、去除前后的空格等
字段输入值验证
参数名 : [ 检查函数(检查参数列表) : 检查失败的错误代码 : 失败错误提示信息; ]
检查函数为定义文件中指定的validator类的方法,函数名要以check开头,参数值作为字符串类型位置放在检查函数参数列表的最后
比如定义文件中指定检查函数 maxLen(9),则在类中需要有bool checkMax(int val, const string & toCheck);
字段输入值过滤转义
参数名 : [ 过滤函数(过滤参数列表); ]
过滤函数为定义文件中指定的filter类的方法,函数名要以filter开头,参数值作为字符串类型位置放在检查函数参数列表的最后
比如定义文件中指定时间过滤函数 timeField(),将yyyymmdd格式的时间转换为unixtime格式,则在类中需要有string filterTimeField(const string & toFilter);
返回值定义说明,对返回值的类型,范例做定义
// 返回的类型,可以有object, list等 return_type : object; // 返回的数据形式,可以有json,xml等 return_form : json; // 如果为object,list则指明返回值的类型 return_class: UserItem; return_sample: "返回的结果"
一个接口定义范例
http_method : "account" C : "create" [ ("创建账号") logic_pre : PreNewAccount, fields_param : { name (string) "账号名"; password (string) "账号密码"; desc (string) "账号说明"; ip (string) "创建账号的ip"; }, fields_checker : { name : [ minLen(4) : LEN_TOO_SHORT : "长度小于4"; maxLen(9) : LEN_TOO_LONG : "长度大于9"; lenBetween(4, 9) : LEN_OUT_RANGE : "长度不在允许范围内"; ]; }, field_clientip : ip, return_sample : "ok" ]