V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jziwenchen
V2EX  ›  PHP

在 Yii 1.x 基础上做了一个 API Framework (轻喷, 实在不该怎么称呼它) 支持多版本分发到不同处理路由中

  •  
  •   jziwenchen · 2016-01-28 16:26:07 +08:00 · 4138 次点击
    这是一个创建于 3220 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个 API Framework 模式基本上是自己工作中用到的,然后来来回回反反复复最终决定集成到 Yii 核心中去.

    我觉得最有意思的地方是根据不同的 version 加载不同的接口处理逻辑,并且在接口还不支持当前版本情况下会自动使用最新的接口版本.

    接口的 URL 长的像这样:

    http://domain.cn/user.info?v=1.2.0&uid=xxx&app_id=xx&sign=xxx&timestamp=xxx

    现在还支持 签名验证 ,在配置文件中 给 不同的平台 像 iOS / Android 之类配一个不同的 app_id ,加强接口安全.

    后面要做的:

    1. 接口日志

    2. 接口调用频率限制

    3. 更多的参数验证类

    ...

    有兴趣的朋友可以提意见哈..

    github:

    https://github.com/jackey/YiiAPI-Framework

    15 条回复    2016-01-29 17:32:28 +08:00
    lawmil
        1
    lawmil  
       2016-01-28 16:37:46 +08:00
    亲你实现的这些功能, yii2.0 已经实现了
    jziwenchen
        2
    jziwenchen  
    OP
       2016-01-28 16:42:11 +08:00
    @lawmil 是我看东西不认真嘛? 没看到 Yii 2.x 支持多版本的 API 呀?
    lawmil
        3
    lawmil  
       2016-01-28 17:01:09 +08:00
    @jziwenchen http://www.yiichina.com/doc/guide/2.0/rest-versioning 不知道你说的多版本是不是这个。。。 yii 一直以来都是支持模块化,
    jziwenchen
        4
    jziwenchen  
    OP
       2016-01-28 17:10:23 +08:00
    @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 去处理

    这样不同版本的发布 互不影响 功能也更加独立. 方便开发.
    cszchen
        5
    cszchen  
       2016-01-28 19:42:14 +08:00
    写个组件就能实现了,何必该核心代码,以后怎么升级
    再说都用 yii2 了
    不过还是支持一下楼主
    Outshine
        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

    更多参数验证类:
    不清楚什么意思
    orvice
        7
    orvice  
       2016-01-29 00:12:09 +08:00
    为啥还用 yii1 这种东西。。。
    jziwenchen
        8
    jziwenchen  
    OP
       2016-01-29 09:38:14 +08:00
    @orvice 个人比较熟 然后做了不少 接口的产品啦... 然后自己想把完全个人化 之后用于项目上更加好维护
    cai314494687
        9
    cai314494687  
       2016-01-29 10:08:51 +08:00
    @Outshine 接口日志可以配置一下,分分钟解决
    zhangxiaoman
        10
    zhangxiaoman  
       2016-01-29 10:19:50 +08:00
    目测楼主是给 app 做 api service , 要支持 app 多个版本同时正常运行..

    我当时用了一种做法是.. 利用 namespace .. 做版本切换..
    jziwenchen
        11
    jziwenchen  
    OP
       2016-01-29 10:24:13 +08:00
    @zhangxiaoman namesapce ? ?
    lawmil
        12
    lawmil  
       2016-01-29 10:39:36 +08:00
    @jziwenchen 可以切换到 yii2 了。。你说的这些已经都实现了。。而且可以用 header 也可以用 route ,可以看看 yii2 的文档 restful 的这块。。
    xujif
        13
    xujif  
       2016-01-29 11:13:20 +08:00
    1,2,3 一般都放在代理层做掉了吧。。不然怎么搞轮询
    zhangxiaoman
        14
    zhangxiaoman  
       2016-01-29 16:55:37 +08:00
    @jziwenchen
    记错了.. 用 namespace 是当时为了区分每个版本的日志记录,我重写了一个日志处理.

    有一种做法是. (我接手过一个公司的项目)
    每一个版本对应一个文件夹.
    根据 version 获取对应的文件夹.
    动态设置 $app -> setControllerPath();

    来做到兼容多个 app 版本的请求.



    看到当时的注释 我也是醉醉的..

    接手一个烂摊子.. 想去改成自己想要的样子已经很难了..
    jziwenchen
        15
    jziwenchen  
    OP
       2016-01-29 17:32:28 +08:00
    @zhangxiaoman

    想法其实差不多,基本上把不同版本的文件放在不同目录;

    我做这个我主要是不想使用默认的 Yii CApplication , 它太重了, 加载很多了 components . 其实 API 接口这边不需要其他的 Components. 按需加载就可以了.

    能接烂摊子也是一种挑战,我不知道接了多少烂摊子了 哈哈...~~~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1347 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:49 · PVG 07:49 · LAX 15:49 · JFK 18:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.