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
BeanYoung
V2EX  ›  Python

如何用 flask 优雅的实现 restful api

  •  
  •   BeanYoung · 2015-01-27 22:06:16 +08:00 · 8483 次点击
    这是一个创建于 3605 天前的主题,其中的信息可能已经有所发展或是发生改变。

    api 这么来设计,访问 /users.json 返回 json 格式数据,访问 /users.csv 返回 csv 格式数据。

    目前想到这么几个实现方法:

    1. nginx 匹配 url,将 url 后缀去掉,对于不同的 url 后缀,添加对应的 Accept header,flask 里根据请求headers 里 Accept 的值返回对应格式的数据。flask-restful 这个库可以根据 Accept header 来返回对应的数据格式。
    2. 给一个函数添加路由
    @app.route('/users<data_type>')
    def users(data_type='.json'):
        pass
    

    第一种依赖外部代理服务器,第二种还没想好怎么和 flask-restful 一起用。

    有没有更优雅的方式来实现类似的需求?

    6 条回复    2015-01-28 09:22:47 +08:00
    gevin
        1
    gevin  
       2015-01-27 23:23:47 +08:00
    >>访问 /users.json 返回 json 格式数据,访问 /users.csv 返回 csv 格式数据

    这不是严格意义上的RESTful API
    9hills
        2
    9hills  
       2015-01-27 23:28:56 +08:00
    你的需求就不是restful api,标准做法是做到Accept中,而且不是你的Nginx来做,而是你的客户端来做
    9hills
        3
    9hills  
       2015-01-27 23:29:29 +08:00
    不过你的客户端说老子就是不遵守Restful,那么你也没必要非要在Server搞restful。。。
    zhangxiao
        4
    zhangxiao  
       2015-01-28 03:29:40 +08:00
    restful 就像是共产主义,大部分只能做到社会主义初级阶段
    elvis_w
        5
    elvis_w  
       2015-01-28 09:19:37 +08:00   ❤️ 1
    这问题浓浓的知乎(逼乎)风格
    flask不是有专门的扩展吗?
    https://flask-restful.readthedocs.org/en/0.3.1/
    够优雅吧
    elvis_w
        6
    elvis_w  
       2015-01-28 09:22:47 +08:00
    @elvis_w 没注意看帖子内容,你这严格说来根本不是RESTful啊,不同资源应该在HTTP头中请求才是RESTful啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3370 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 10:29 · PVG 18:29 · LAX 02:29 · JFK 05:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.