Python开发RESTful API是否必须使用Flask等Web框架?还是纯Python即可?

手头有个项目,由于自己是做运维出身,想来想去,现在想用 Python 做个基于 HTTP 的 RESTful 充当服务器端,RESTful API 接收参数后交给对应的函数处理。由于是面向客户要有 GUI,就用 PyQT 之类的做个 GUI,调用 RESTful API。
API 服务器端的话,一般只用类似于 BaseHTTPServer 就行了?还是要用到 Django、Flask 之类的框架? API 是类似这样
Get http://api.haha.com/apiv1/info.json?authtoken=xxx&keyword=xxx&option1=xxx&option2=xxx
返回 json 或文本数据
Python开发RESTful API是否必须使用Flask等Web框架?还是纯Python即可?


19 回复

如果你用 BaseHTTPServer,那你的应用程序就是单线程生物,很慢。

如果你用某总支持 WSGI 的框架,包括不仅限于 Flask, Pyramid, Falcon 等,那你就可以在它前面对接一个 WSGI 的容器,比如 gunicorn。然后你就可以用多进程模式泡你的应用了。


必须用框架。纯Python写RESTful API就像用螺丝刀盖房子——理论上可行,但你会花大量时间重复造轮子,代码会变得臃肿且难以维护。

Flask、FastAPI这些框架的核心价值是提供了现成的、经过验证的基础设施:

  1. 路由系统:自动将URL映射到处理函数,不用自己写一堆if request.path == '/api/users'
  2. 请求/响应处理:自动解析JSON、表单数据,处理headers、状态码。
  3. 错误处理:统一的错误响应机制。
  4. 中间件支持:方便添加认证、日志、CORS等。

用纯Python硬写的话,光是解析HTTP请求就得几十行代码。看看这个对比:

纯Python实现(简化版):

import json
from http.server import BaseHTTPRequestHandler

class RawHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/api/users':
            data = [{'id': 1, 'name': 'Alice'}]
            self.send_response(200)
            self.send_header('Content-Type', 'application/json')
            self.end_headers()
            self.wfile.write(json.dumps(data).encode())
        else:
            self.send_response(404)

Flask实现:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/users')
def get_users():
    return jsonify([{'id': 1, 'name': 'Alice'}])

框架版本明显更简洁、可读。对于生产环境,你还需要考虑并发、安全性、文档生成等,这些框架都有成熟解决方案。

总结:别折腾,直接用框架。

稍微话半小时学一下 flask,在你用 http 模块搞第三个业务接口的时候或许用 flask 已经写好了十个。

不用框架确实可以写,用了框架你绝对不会回头。flask 写 restful API 不能再爽系列…

纯后端 api 推荐 falconframework,开发简单而且性能也好

web.py 照样撸得飞起

最近开发在用的:Flask 搭配 Flask-RESTful 插件写 api,调试用 Chrome 结合 Postman 插件。

框架是为了快吧,开发上性能上。。
从底层开始写也不是不行,但是不会觉得工作量太多了吗。。

flask 现用现查都来得及

恐怕不太行,WSGI 连基本的路由功能都没有,直接用你就只能自己解析路径了

可以试试阿里云的 API 网关+函数计算,https://www.v2ex.com/t/373578

基本好处是,你只负责写代码,函数计算负责运行代码的所有事情,不需要再考虑买 /升级 /维护虚机。

推荐 django restframework,一劳永逸。

2 个小时你的 django rfw 就跑起来了。

用过 django restframework 挺好用,不过 django 稍微麻烦点。

只需要 REST API 的话,推荐 Falcon,又小又快

当然不是一定要啊,但是不用的话,等于是自己重新做了个轮子,或者是部分轮子咯

小项目, restful 接口 tornado 很好. 部署方便.

可以参考 openstack 的 web 服务怎么写的

推荐一个适合新手的超棒的 flask 开发教程: http://xc.hubwiz.com/course/562427361bc20c980538e26f?affid=v2ex7878

回到顶部