用 Tornado 做了一个 JSON API Gateway - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
restran
V2EX    Python

用 Tornado 做了一个 JSON API Gateway

  •  2
     
  •   restran
    restran 2016-02-23 19:50:45 +08:00 9138 次点击
    这是一个创建于 3583 天前的主题,其中的信息可能已经有所发展或是发生改变。
    API 是连接 App 和服务器数据库的桥梁。在 App 和各种 API 多了之后,对这些 API 的管理和保护就带来了一系列的问题。比如:

    1. 如何保护 API 不被非法访问,只能由 App 正常发起请求?
    2. 如何控制不同 App 对多种多样 API 的访问权限?
    3. API 的访问情况怎样,日志如何查看?

    于是,就有了 API Gateway 这个项目

    项目地址: https://github.com/restran/api-gateway

    目前已经完成了 api-gateway 的服务端部分, Web 控制台还剩访问日志和访问统计查看。计划开发 Android 和 iOS 的 API Client 。

    在设计上有什么问题,还请大家多提意见。
    21 条回复    2016-03-08 14:42:49 +08:00
    rim99
        1
    rim99  
       2016-02-23 20:05:41 +08:00
    看上去蛮有意思,已关注。以后拿来学习
    Ge4Los
        2
    Ge4Los  
       2016-02-23 22:37:54 +08:00   1
    挺有意思的项目,先关注了
    Comdex
        3
    Comdex  
       2016-02-24 00:29:10 +08:00 via Android
    不明白具体用处?
    shajiquan
        4
    shajiquan  
       2016-02-24 01:18:18 +08:00
    已 star
    ewBuyVmLZMZE
        5
    ewBuyVmLZMZE  
       2016-02-24 04:55:42 +08:00 via iPad   1
    看了下,协议不是很规范,请参考项目 kong 。有点轮子的嫌疑。
    ewBuyVmLZMZE
        6
    ewBuyVmLZMZE  
       2016-02-24 04:56:47 +08:00 via iPad
    latyas
        7
    latyas  
       2016-02-24 07:25:31 +08:00
    不错 stared
    restran
        8
    restran  
    OP
       2016-02-24 08:43:45 +08:00
    @syhily 谢谢。为了管理我们很多 App 的 API ,我们内部有一个 api-gateway ,但是还比较粗糙,这是我重写的版本,在还没正式完成前,就来发帖,也是为了及早发现设计上的错误和不足。
    diyisoft
        9
    diyisoft  
       2016-02-24 08:49:11 +08:00
    期待这样的 api-gateway
    knktc
        10
    knktc  
       2016-02-24 08:50:10 +08:00
    已 star ,最近也想做类似的东西,参考一下。
    之前是想尝试用 falcon 啥来开发,但是一直也没有开始工作~
    restran
        11
    < href="/member/restran" class="dark">restran  
    OP
       2016-02-24 08:50:53 +08:00
    @Comdex 可以看看 kong 的文档 https://getkong.org/
    restran
        12
    restran  
    OP
       2016-02-24 08:52:59 +08:00
    @diyisoft 我承认是造了个轮子,由于之前在用的 api-gateway 跟业务有比较多的耦合,而且比较粗糙,所以我才重写了一个。现在你可以先试试 kong https://getkong.org/
    restran
        13
    restran  
    OP
       2016-02-24 08:53:30 +08:00
    @knktc 欢迎交流学习
    yishenggudou
        14
    yishenggudou  
       2016-02-24 09:36:50 +08:00
    也有类似的思路 做了一半
    diyisoft
        15
    diyisoft  
       2016-02-24 11:12:04 +08:00   1
    @restran 没有说你造轮子,期待你的 api-gateway ,已经 star
    viamcc
        16
    viamcc  
       2016-02-24 11:28:33 +08:00
    验证 Referer 和绑定对方 IP 来保证不被非法访问
    zeuss
        17
    zeuss  
       2016-02-24 11:40:44 +08:00   1
    不错,已 star ,持续关注。
    restran
        18
    restran  
    OP
       2016-02-24 12:17:23 +08:00
    @viamcc 因为 Referrer 可以被构造,只能做简单的防盗链,如果是 App 上的 API ,面向的用户 IP 不可预期,绑定 IP 就不太合适。所以我采用了 HMAC 签名来鉴权。
    viamcc
        19
    viamcc  
       2016-02-25 09:45:59 +08:00
    @restran 我理解的是 B2B 方式,所以绑定对方服务器的出口 IP 即可,无关乎用户
    restran
        20
    restran  
    OP
       2016-02-25 12:18:42 +08:00
    @viamcc 这种情况下可行
    gushan
        21
    gushan  
       2016-03-08 14:42:49 +08:00   1
    访问日志可以考虑直接对接阿里云日志服务。
    1 )丰富的 SDK ( https://help.aliyun.com/document_detail/sls/sdk/intros/overview.html?spm=5176.docsls/user-guide/overview.6.176.xzZp1l
    2 )日志收集到服务端后提供多种消费方式:数据通道(类 Kafka )/数据投递( ODPS 、 OSS-组合 E-MapReduce Spark )/实时搜索( https://help.aliyun.com/document_detail/sls/user-guide/overview.html
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5512 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 01:51 PVG 09:51 LAX 17:51 JFK 20:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86