API规范

我们在application/api/controller文件夹中开发不同版本(类型)的API,例如项目源码中,我们在application/api/controller文件夹中有两个子目录cmsv1 image

我们在对应版本(类型)的目录下去开发我们的控制器类,这样有利于我们管理和维护,说白了就是可以快速定位代码所在。

controller下的目录结构不是唯一也没有标准,项目源码仅提供一个参考。

接下来我们尝试通过阅读User控制器类的源码来了解下设计思路,其余的控制器类基本大同小异,以其中login方法为例

image

User类下面,我们定义了一个login方法,它就是一个Api,既然是Api,就必须要有一个与之对应的访问url,前端在访问这个url之后,就会路由到我们这个login方法。更多关于路由的介绍请阅读路由部分的内容。

这里方法里面做了如下几件事:

  • 调用了一个自定义的验证器

  • 获取了请求参数。

  • 验证用户是否存在和密码是否正确。

  • 生成令牌

  • 记录日志

  • 返回令牌

这里的代码很简单,控制器层没有做任何的逻辑判断和业务实现,交给了对应的模型或者方法去执行。控制器只负责流程的控制而不关心具体的实现。假如现在有一个需求,你要限制用户在某个时段不能登陆,那么你只需要封装好方法,然后在获取令牌之前插入一段调用方法的代码即可。控制器层不去处理逻辑判断和业务实现有助于后期的扩展和代码简洁性,在某些复杂的业务接口,如果在控制器层涉及过多的逻辑判断和业务处理必然导致后期的维护和扩展上的问题,而且也不便于理解执行流程。