2推荐
[任务]
用筋斗云框架创建一个Web接口项目叫mysvc,创建数据库,提供对ApiLog对象的操作接口。
先从github上下载开源的筋斗云后端框架及示例应用:https://github.com/skyshore2001/jdcloud-php
建议安装git工具直接下…...
天笑
发表于 2017-02-24
推荐
函数型接口
如果不是典型的对象增删改查操作,可以设计函数型接口,比如登录、修改密码、上传文件这些。
函数型接口一般实现在文件 php/api_functions.php 中,它被主文件api.php包含。
假设有以下接口定义:
获取登录信息(who am i?)
who…...
天笑
发表于 2017-03-01
推荐
函数mparam用来取必传参数(m表示mandatory),参数既可以用URL参数,也可以用POST参数传递。如果是取一个可选参数,可以用param函数。
与直接用php的$_GET等变量相比,param/mparam可指定参数类型,如
// 取id参数,特别地,对id参数会…...
天笑
发表于 2017-03-01
推荐
接口返回
函数应返回符合接口原型中描述的对象,框架会将其转为最终的JSON字符串。
比如登录接口要求返回{id, _isNew}:
login(uname, pwd, _app?=user) -> {id, _isNew?}
因而在api_login中,返回结构…...
天笑
发表于 2017-03-01
推荐
数据库操作
数据库连接一开始是通过tool/init.php在线配置的,或直接手改文件 php/conf.user.php 文件的相关配置如:
putenv("P_DB=localhost/jdcloud");
putenv("P_DBCRED…...
天笑
发表于 2017-03-01
推荐
对象型接口
为了更好的理解之后章节的示例,我们先了解一下示例中用到的数据模型。
[数据模型描述方式]
下面是几个数据表,每个表都应有个作为主键的id字段,是可自动增长的整数类型,即使是关联表也应定义id字段作为主键。
用户:
@User: id, uname, phon…...
天笑
发表于 2017-03-03
推荐
对象接口通过继承AccessControl类来实现,默认允许5个标准对象操作,可以改写属性$allowedAc来限定允许的操作:
class AC_ApiLog extends AccessControl
{
protected $allowedAc = ["get…...
天笑
发表于 2017-03-03
推荐
绑定访问控制类与权限
前面在讲函数型接口时,提到权限检查用checkAuth函数来实现。
在对象型接口中,通过绑定访问控制类与权限,来实现不同角色通过不同的类来控制。
比如前例中ApiLog对象接口允许员工登录(AUTH_EMP)后访问,只要定义:
class AC2_A…...
天笑
发表于 2017-03-08
推荐
定制可访问数据
除了限制用户可以访问哪些表和字段,还常会遇到一类需求是限制用户只能访问自己的数据。
[任务]
用户登录后,可以添加订单、查看自己的订单。
我们在设计文档中设计接口如下:
添加订单
Ordr.add()(amount) -> id
查看订单
Ord…...
天笑
发表于 2017-03-08
推荐
前面已经学习过怎样把一个数据库中的表作为对象暴露出去。
其中,表的字段就可直接映射为对象的属性。对于不在对象主表中定义的字段,统称为虚拟字段。
通过$vcolDefs来定义虚拟字段,最简单的一类虚拟字段是字段别名,比如
class AC1_Ordr extends Acce…...
天笑
发表于 2017-03-09
推荐
关联字段依赖
假设设计有“订单评价”对象,它与“订单”相关联:
@Rating: id, orderId, content
一个订单可有多个评价,表间的关系为:
订单评价Rating(orderId) n<->1 订单Ordr
订单Ordr(userId)…...
天笑
发表于 2017-03-09
推荐
计算字段
在定义虚拟字段时,"res"也可以是一个计算值,或一个很复杂的子查询。
例如表OrderItem是Ordr对象的一个子表,表示订单中每一项产品的名称、数量、价格:
@Ordr: id, userId, status(2), amount, d…...
天笑
发表于 2017-03-09
推荐
子表对象
前面提到过想在对象中返回子表时,可以使用压缩成一个字符串的子表字段,一般适合数据比较简单的场合。
另一种方式是用$subobj来定义子表对象。
例如在获取订单时,同时返回订单日志,设计接口如下:
Ordr.get() -> {id, ..., @orde…...
天笑
发表于 2017-03-14
推荐
虚拟表和视图
表ApiLog中有一个字段叫app,表示前端应用名:
@ApiLog: id, tm, addr, app, userId
- userId: 如果app=user,则关联到User表;如果app=emp,则关联到员工表Employee
@Employee…...
天笑
发表于 2017-03-14
推荐
接口返回前回调
示例:添加订单到Ordr表时,自动添加一条"创建订单"日志到OrderLog表,可以这样实现:
class AC1_Ordr extends AccessControl
{
protected function onValidate()
…...
天笑
发表于 2017-03-14
推荐
非标准对象接口
对象的增删改查(add/set/get/query/del共5个)接口称为标准接口。
可以为对象增加其它非标准接口,例如取消订单接口:
Ordr.cancel(id)
应用逻辑
- 权限: AUTH_USER
- 用户只能操作自己的订单
只要在相应的访…...
天笑
发表于 2017-03-14
推荐
日志与调试
输出日志可以用logit函数,将信息输出到后端文件中,默认存在服务目录下的trace.log文件中。
logit("### debug info");
除直接查看文件外,也可以在浏览器中访问 tool/log.php 页面来查看最近的日志…...
天笑
发表于 2017-03-21
推荐
会话管理
筋斗云使用cookie机制来维持与客户端的会话。
它默认使用的cookie名称是"userid",但可以由客户端请求中URL参数_app来修改,比如_app=emp,则使用cookie名称为"empid"。
在筋斗云中,_ap…...
天笑
发表于 2017-03-21
推荐
批量请求
筋斗云框架支持批量请求,即在一次请求中,包含多条接口调用。
假设一个前端页面进入时,需要接连调用好多次接口才能完成展现,一般的做法是需要后端重新设计接口来优化。
筋斗云支持batch接口,这时后端不必做任何设计修改,前端只要调用batch接口即可获得优化。
假如…...
天笑
发表于 2017-03-21
推荐
随着移动互联网的快速发展,各行业对手机应用开发需求旺盛。
应用开发一般分为前端和后端,后端关注数据和业务,需要对前端各类应用(如安卓应用、苹果应用、H5应用等)提供基于HTTP协议的交互接口。
筋斗云是一个Web接口开发框架,它不讲MVC,不做对象-数据表映射(OR Mapp…...
天笑
发表于 2017-02-20