ToB企服应用市场:ToB评测及商务社交产业平台

标题: UtilMeta - 简洁高效的 Python 后端元框架 [打印本页]

作者: 熊熊出没    时间: 2024-5-6 16:20
标题: UtilMeta - 简洁高效的 Python 后端元框架
最近开源了我开发多年的一个 Python 后端框架:UtilMeta
项目介绍

UtilMeta 是一个用于开发 API 服务的后端元框架,基于 Python 类型注解标准高效构建声明式接口与 ORM 查询,能够自动解析请求参数与生成 OpenAPI 文档,高效开发 RESTful 接口,产出的代码简洁清晰,并且支持使用主流 Python 框架(如 Django, Flask, FastAPI, Starlette, Sanic, Tornado 等)作为运行时实现或渐进式整合
安装
  1. pip install utilmeta
复制代码
核心特性

声明式接口开发

使用 UtilMeta 框架提供的声明能力,你可以轻松开发自动校验请求与生成 OpenAPI 文档的接口,也可以编写简洁的声明式 ORM 查询(支持关系对象查询且自动避免 N + 1 问题)
下面的例子是基于 Django 模型开发一个简洁的文章查询接口
  1. from utilmeta.core import api, orm
  2. from django.db import models
  3. class User(models.Model):
  4.     username = models.CharField(max_length=20, unique=True)
  5. class Article(models.Model):
  6.     author = models.ForeignKey(User, related_name="articles", on_delete=models.CASCADE)
  7.     content = models.TextField()
  8. class UserSchema(orm.Schema[User]):
  9.     username: str
  10.     articles_num: int = models.Count('articles')
  11. class ArticleSchema(orm.Schema[Article]):
  12.     id: int
  13.     author: UserSchema
  14.     content: str
  15. class ArticleAPI(api.API):
  16.     async def get(self, id: int) -> ArticleSchema:
  17.         return await ArticleSchema.ainit(id)
复制代码
如果请求 GET /article?id=1,则会得到类似如下的结果
  1. {
  2.   "id": 1,
  3.   "author": {
  4.     "username": "alice",
  5.     "articles_num": 3
  6.   },
  7.   "content": "hello world"
  8. }
复制代码
完全符合你的模式声明,并且会自动生成对应的 OpenAPI 文档,如
简洁的声明式开发可以显著降低接口开发的代码量,比如 UtilMeta 仅用 600 行代码就实现了 Realworld 博客后端, 与其他框架的对比如下
渐进式元框架

使用一套标准支持主流 Python 框架作为 HTTP 运行时实现,切换运行时实现只需要一个参数
  1. from utilmeta import UtilMeta
  2. from utilmeta.core import api
  3. import django
  4. class RootAPI(api.API):
  5.     @api.get
  6.     def hello(self):
  7.         return 'world'
  8. service = UtilMeta(
  9.     __name__,
  10.     name='demo',
  11.     backend=django,    # or flask / starlette / tornado / sanic
  12.     api=RootAPI,
  13.     route='/api'
  14. )
  15. app = service.application()  # wsgi app
  16. if __name__ == '__main__':
  17.     service.run()
复制代码
并且支持以接口为粒度渐进式接入现有项目,比如 Flask
  1. from flask import Flask
  2. from utilmeta.core import api, response
  3. app = Flask(__name__)
  4. @app.route("/")
  5. def hello_world():
  6.     return "<p>Hello, World!</p>"
  7. class CalcAPI(api.API):
  8.     @api.get
  9.     def add(self, a: int, b: int) -> int:
  10.         return a + b
  11. CalcAPI.__as__(app, route='/calc')
复制代码
高度可扩展与丰富的插件

内置一系列开箱即用的鉴权(Session / JWT),跨域处理,重试,请求控制,事务等插件
全周期监控运维解决方案

UtilMeta 框架配套了一个全周期的 API 管理平台,可以一站式解决中小团队的接口文档调试,日志查询,服务器监控,报警通知与事件管理等运维与管理需求(目前处于 Beta waitlist)
快速开始

你可以从下面几个由易到难的入门案例开始上手 UtilMeta 框架
如果你更希望从具体功能或用法入手学习,则可以参考
社区

如果你觉得这个项目不错,可以帮我们的 Github 仓库 点个 ⭐~
你也可以加入我们社区获取项目的最新进展或参与讨论
或扫码添加 UtilMeta 框架作者的微信加入开发者微信群

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4