这个 API Framework 模式基本上是自己工作中用到的,然后来来回回反反复复最终决定集成到 Yii 核心中去.
我觉得最有意思的地方是根据不同的 version 加载不同的接口处理逻辑,并且在接口还不支持当前版本情况下会自动使用最新的接口版本.
接口的 URL 长的像这样:
http://domain.cn/user.info?v=1.2.0&uid=xxx&app_id=xx&sign=xxx×tamp=xxx
现在还支持 签名验证 ,在配置文件中 给 不同的平台 像 iOS / Android 之类配一个不同的 app_id ,加强接口安全.
后面要做的:
接口日志
接口调用频率限制
更多的参数验证类
...
有兴趣的朋友可以提意见哈..
github:
1
lawmil 2016-01-28 16:37:46 +08:00
亲你实现的这些功能, yii2.0 已经实现了
|
2
jziwenchen OP @lawmil 是我看东西不认真嘛? 没看到 Yii 2.x 支持多版本的 API 呀?
|
3
lawmil 2016-01-28 17:01:09 +08:00
@jziwenchen http://www.yiichina.com/doc/guide/2.0/rest-versioning 不知道你说的多版本是不是这个。。。 yii 一直以来都是支持模块化,
|
4
jziwenchen OP @lawmil
比如 user.info?v=1.0.0 的接口请求路由到 service/rest/v1.0.0/user/info.php 下去处理 user.info?v=1.1.0 的接口请求路由到 service/rest/v1.1.0/user/info.php 去处理 这样不同版本的发布 互不影响 功能也更加独立. 方便开发. |
5
cszchen 2016-01-28 19:42:14 +08:00
写个组件就能实现了,何必该核心代码,以后怎么升级
再说都用 yii2 了 不过还是支持一下楼主 |
6
Outshine 2016-01-28 21:15:59 +08:00
根据 version 切换不同的接口版本
这个 YII2 已经实现了,并且支持 header 和 get 两种切换方式: https://github.com/yiisoft/yii2/blob/master/docs/guide-zh-CN/rest-versioning.md 接口日志 这个很简单,没注意 YII2 有木有 接口调用频率限制 这个也是有哒: https://github.com/yiisoft/yii2/blob/master/docs/guide-zh-CN/rest-rate-limiting.md 更多参数验证类: 不清楚什么意思 |
7
orvice 2016-01-29 00:12:09 +08:00
为啥还用 yii1 这种东西。。。
|
8
jziwenchen OP @orvice 个人比较熟 然后做了不少 接口的产品啦... 然后自己想把完全个人化 之后用于项目上更加好维护
|
9
cai314494687 2016-01-29 10:08:51 +08:00
@Outshine 接口日志可以配置一下,分分钟解决
|
10
zhangxiaoman 2016-01-29 10:19:50 +08:00
目测楼主是给 app 做 api service , 要支持 app 多个版本同时正常运行..
我当时用了一种做法是.. 利用 namespace .. 做版本切换.. |
11
jziwenchen OP @zhangxiaoman namesapce ? ?
|
12
lawmil 2016-01-29 10:39:36 +08:00
@jziwenchen 可以切换到 yii2 了。。你说的这些已经都实现了。。而且可以用 header 也可以用 route ,可以看看 yii2 的文档 restful 的这块。。
|
13
xujif 2016-01-29 11:13:20 +08:00
1,2,3 一般都放在代理层做掉了吧。。不然怎么搞轮询
|
14
zhangxiaoman 2016-01-29 16:55:37 +08:00
@jziwenchen
记错了.. 用 namespace 是当时为了区分每个版本的日志记录,我重写了一个日志处理. 有一种做法是. (我接手过一个公司的项目) 每一个版本对应一个文件夹. 根据 version 获取对应的文件夹. 动态设置 $app -> setControllerPath(); 来做到兼容多个 app 版本的请求. 看到当时的注释 我也是醉醉的.. 接手一个烂摊子.. 想去改成自己想要的样子已经很难了.. |
15
jziwenchen OP @zhangxiaoman
想法其实差不多,基本上把不同版本的文件放在不同目录; 我做这个我主要是不想使用默认的 Yii CApplication , 它太重了, 加载很多了 components . 其实 API 接口这边不需要其他的 Components. 按需加载就可以了. 能接烂摊子也是一种挑战,我不知道接了多少烂摊子了 哈哈...~~~ |