Python中用什么框架写API比较好?

写一个爬虫项目,需要抓取多个平台的数据以及向多个平台 POST 文章,最终打算打包成 WEB API 以便其他项目调用,使用哪种 Python API 框架编写比较好呢?

目前了解的有 eve,一款基于 Flask 的 API 框架,和 Django REST Framework。感觉 eve 比较轻量化,适合新手,但是 eve 的文档和博客等资料比较少; Django 文档、博客资料挺详细但是感觉又有点重,该如何取舍呢?或者大佬们有什么适合新手的框架推荐吗?

谢谢!


Python中用什么框架写API比较好?

44 回复

选 drf 没错


FastAPI。这玩意儿现在就是Python里写API的首选,没跑。

它快得离谱,靠的是Pydantic做类型检查和序列化,还有Starlette这个异步框架打底。你只要用Python的类型提示(type hints)来定义数据模型和函数参数,框架自己就能生成JSON Schema、OpenAPI文档,连交互式的API文档(Swagger UI 和 ReDoc)都给你自动弄好,省心到爆。

给你看个最基础的例子,创建一个用户信息的POST接口:

from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional

# 定义数据模型,用Pydantic,类型提示写清楚就行
class User(BaseModel):
    name: str
    email: str
    age: Optional[int] = None  # 可选字段

# 创建FastAPI应用实例
app = FastAPI()

# 用装饰器定义API路由和HTTP方法
@app.post("/users/")
async def create_user(user: User):
    """
    创建新用户。
    直接接收一个符合User模型的JSON请求体。
    """
    # 这里通常是把user数据存到数据库,现在先简单返回
    return {"message": "User created", "user_data": user}

# 再写个GET例子
@app.get("/")
async def read_root():
    return {"Hello": "World"}

@app.get("/users/{user_id}")
async def read_user(user_id: int, q: Optional[str] = None):
    # 路径参数user_id,查询参数q
    return {"user_id": user_id, "query": q}

要跑起来,用命令 uvicorn main:app --reload 就行(假设文件叫main.py)。--reload参数让你改代码后自动重启,开发时巨方便。

自动生成的文档你访问 /docs/redoc 就能看到,所有接口、参数、模型清清楚楚,还能直接在上面测试调用。

总结:要现代、要快、要省事,直接用FastAPI。

博客 django 写的。。文档很全才能上手快啊。

个人觉得爬虫的话 Flask 比较适合吧,轻巧灵活一些,如果是大型的 Web 开发 推荐使用 django

为什么我近期觉得 python 部署很难啊,哭,php 那是真简单

flask+1

PHP 做 API 调 Python 脚本不就行了

适合的语言做适合的事情

把 django 改造成 mvc 形式的 然后做了 restful🤦‍♂️

可以使用下 flask 的扩展 flask_restful
上手挺快的

我们之前用 cherrypy 写的…

Django REST framework

只是单纯写 api 的话考虑重不重干嘛, dj+drf 一把梭,早点下班不好吗

考虑这个问题的人,我一律建议先从最重的开始.
就 drf.
用简洁的东西,并不会节省你的时间,可能还会有反效果,被莫名其妙的问题卡半天,何必呢.

falcon with pypy

Starletee

打错了,应该是 Starlette

直接用 PHP 调用 Python 脚本好了,如果用什么跨语言的 RPC,反倒是有性能损失

如果使用 flask 你说不定还会遇到主线程的问题,遇到再说吧

flask,不过 Django 的文档写的真香啊

前提:新手。新手的特点就是对任何问题都不熟,很有可能被一个很初级的问题莫名其妙卡住。

而设计简洁和使用简单完全是两码事。。。
使用简单适合新手。设计简洁。。。新手怎么评估和享受设计?

新手还是 Django 吧,如果有性能要求 弄 tornado 或者放弃 py 改用 go

django 吧,资料全功能全,
看着轻量反而正式用的时候比重的还麻烦

tornado 了解一下 我司接口全是 tornado

https://github.com/kennethreitz/responder 新出炉的螃蟹 要不要试试

我用 aiohttp 写过

没人推荐 tornado 吗? flask 这么流行了?

以我的实践经验来看,如果为了省时省事不太考滤性能那么最便捷的方案是
django+
djangorestframework+
scrapy+
scrapy-djangoitem
文档丰富教程多

回到顶部