最近开源了我开发多年的一个 Python 后端框架:UtilMeta
项目介绍
UtilMeta 是一个用于开发 API 服务的后端元框架,基于 Python 类型注解标准高效构建声明式接口与 ORM 查询,能够自动解析请求参数与生成 OpenAPI 文档,高效开发 RESTful 接口,产出的代码简洁清晰,并且支持使用主流 Python 框架(如 Django, Flask, FastAPI, Starlette, Sanic, Tornado 等)作为运行时实现或渐进式整合
- Github 仓库
- 中文文档
安装
pip install utilmeta
核心特性
声明式接口开发
使用 UtilMeta 框架提供的声明能力,你可以轻松开发自动校验请求与生成 OpenAPI 文档的接口,也可以编写简洁的声明式 ORM 查询(支持关系对象查询且自动避免 N + 1 问题)
下面的例子是基于 Django 模型开发一个简洁的文章查询接口
from utilmeta.core import api, orm
from django.db import models
class User(models.Model):
username = models.CharField(max_length=20, unique=True)
class Article(models.Model):
author = models.ForeignKey(User, related_name="articles", on_delete=models.CASCADE)
content = models.TextField()
class UserSchema(orm.Schema[User]):
username: str
articles_num: int = models.Count('articles')
class ArticleSchema(orm.Schema[Article]):
id: int
author: UserSchema
content: str
class ArticleAPI(api.API):
async def get(self, id: int) -> ArticleSchema:
return await ArticleSchema.ainit(id)
如果请求 GET /article?id=1
,则会得到类似如下的结果
{
"id": 1,
"author": {
"username": "alice",
"articles_num": 3
},
"content": "hello world"
}
完全符合你的模式声明,并且会自动生成对应的 OpenAPI 文档,如
简洁的声明式开发可以显著降低接口开发的代码量,比如 UtilMeta 仅用 600 行代码就实现了 Realworld 博客后端, 与其他框架的对比如下
渐进式元框架
使用一套标准支持主流 Python 框架作为 HTTP 运行时实现,切换运行时实现只需要一个参数
from utilmeta import UtilMeta
from utilmeta.core import api
import django
class RootAPI(api.API):
@api.get
def hello(self):
return 'world'
service = UtilMeta(
__name__,
name='demo',
backend=django, # or flask / starlette / tornado / sanic
api=RootAPI,
route='/api'
)
app = service.application() # wsgi app
if __name__ == '__main__':
service.run()
并且支持以接口为粒度渐进式接入现有项目,比如 Flask
from flask import Flask
from utilmeta.core import api, response
app = Flask(__name__)
@app.route("/")
def hello_world():
return "Hello, World!
"
class CalcAPI(api.API):
@api.服务器托管网get
def add(self, a: int, b: int) -> int:
return a + b
CalcAPI.__as__(app, route='/calc')
高度可扩展与丰富的插件
内置一系列开箱即用的鉴权(Session / JWT),跨域处理,重试,请求控制,事务等插件
全周期监控运维解决方案
UtilMeta 框架配套了一个全周期的 API 管理平台,可以一站式解决中小团队的接口文档调试,日志查询,服务器监控,报警通知与事件管理等运维与管理需求(目前处于 Beta waitlist)
快速开始
你可以从下面几个由易到难的入门案例开始上手 UtilMeta 框架
- BMI 计算 API
- 用户注册登录查询 API
- Realworld 博客项目
如果你更希望从具体功能或用法入手学习,则可以参考
- 处理请求参数:如何处理路径参数,查询参数,请求体和请求头,以及如何处理文件上传
- API 类与接口路由:如何使用 API 类挂载简洁地定义树状接口路由,以及利用钩子等特性方便地在接口间复用代码,处理错误,模板化响应
- 数据查询与 ORM 操作:如何使用 Schema 声明式地编写 RESTful 接口所需要的增删改查和 ORM 操作
- 接口与用户鉴权:如何使用 Session, JWT, OAuth 等方式为接口的请求鉴权,获取当前请求用户与简化登录操作
- 配置运行与部署:如何使用声明式环境变量等特性配置服务的运行设置,启动与部署
- 从现有项目迁移:如何从现有的后端项目中渐进式地接入 UtilMeta 接口或迁移到 UtilMeta
社区
如果你觉得这个项目不错,可以帮我们的 Github 仓库 点个 ⭐~
你也可以加入我们社区获取项目的最新进展或参与讨论
- Discord
- X(Twitter)
或扫码添加 UtilMeta 框架作者的微信加入开发者微信群
服务器托管网服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: zookeeper源码(06)ZooKeeperServer及子类
ZooKeeperServer 实现了单机版zookeeper服务端功能,子类实现了更加丰富的分布式集群功能: ZooKeeperServer |– QuorumZooKeeperServer |– LeaderZooKeeperServer |– Le…