用这个喷火器点燃你的API
flama的Python项目详细描述
用这个喷火器点燃你的api。
弗拉玛
flama的目标是在Starlette之上添加一层,以提供一种易于学习和快速开发方法 构建高性能的graphql和restapi。与Starlette一样,Flama也是 开发asynchronous和production ready服务。
它具有以下特点:
- 泛型类用于在sqlalchemy表上提供标准crud方法的api资源。
- schema系统基于Marshmallow,它允许declare端点的输入和输出,并提供 根据这些模式验证数据的可靠方法validate。
- 依赖注入简化了管理端点所需参数的过程。flama asgi对象
像
Request
、Response
、Session
等等都被定义为组件并准备好注入到端点中。 - components作为插件生态系统的基础,允许您创建自定义或使用 你的端点,作为参数注入。
- 使用openapi标准自动生成api架构。它使用端点的模式系统来提取 生成API架构所需的信息。
- 自动生成的文档提供Swagger UI或ReDoc端点。
- 分页使用多种方法(如限制和偏移、页码)自动处理…
要求
- Python3.6+
- Starlette0.12.0+
- Marshmallow3.0.0+
安装
$ pip install flama
示例
frommarshmallowimportSchema,fields,validatefromflama.applicationsimportFlamaimportuvicorn# Data SchemaclassPuppy(Schema):id=fields.Integer()name=fields.String()age=fields.Integer(validate=validate.Range(min=0))# Databasepuppies=[{"id":1,"name":"Canna","age":6},{"id":2,"name":"Sandy","age":12},]# Applicationapp=Flama(components=[],# Without custom componentstitle="Foo",# API titleversion="0.1",# API versiondescription="Bar",# API descriptionschema="/schema/",# Path to expose OpenAPI schemadocs="/docs/",# Path to expose Swagger UI docsredoc="/redoc/",# Path to expose ReDoc docs)# Views@app.route("/",methods=["GET"])deflist_puppies(name:str=None)->Puppy(many=True):""" description: List the puppies collection. There is an optional query parameter that specifies a name for filtering the collection based on it. responses: 200: description: List puppies. """return[puppyforpuppyinpuppiesifpuppy["name"]==name]@app.route("/",methods=["POST"])defcreate_puppy(puppy:Puppy)->Puppy:""" description: Create a new puppy using data validated from request body and add it to the collection. responses: 200: description: Puppy created successfully. """puppies.append(puppy)returnpuppyif__name__=='__main__':uvicorn.run(app,host='0.0.0.0',port=8000)
依赖关系
遵循Starlette哲学Flama减少了作为核心的硬依赖项的数量:
它没有更多的硬依赖项,但其中一些是使用某些功能所必需的:
您可以使用pip3 install flama[full]
安装所有这些。
学分
该库深受APIStar服务器的启发,试图将大量的it本质用于 Starlette作为asgi框架,Marshmallow作为模式系统。
贡献
这个项目是绝对开放的贡献,所以如果你有一个好主意,创建一个问题,让社区 讨论一下。