特别的自己 发表于 2024-2-23 16:51:14

UtilMeta - 简洁高效的 Python 后端元框架

最近开源了我开发多年的一个 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):
    username: str
    articles_num: int = models.Count('articles')

class ArticleSchema(orm.Schema):
    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 "<p>Hello, World!</p>"

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 框架作者的微信加入开发者微信群

来源:https://www.cnblogs.com/voidzxl/p/18029552/utilmeta-introduction
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: UtilMeta - 简洁高效的 Python 后端元框架