Skip to main content

Starlette API 层继承自 APIStar

项目描述

星光API

为 Starlette 启动 API

构建状态 覆盖范围 包版本


文档https ://starlette-api.perdy.io


星光API

Starlette API 旨在在 Starlette 之上添加一个层,以提供一种快速简便的方法来构建高性能 REST API。

它已准备好生产并提供以下功能:

  • API 资源的通用类,在 SQLAlchemy 表上提供标准 CRUD 方法。
  • 基于Marshmallow的模式系统允许声明端点的输入和输出,并提供一种针对这些模式验证数据的可靠方法。
  • 依赖注入简化了端点所需参数的管理过程。Starlette ASGI 对象(如RequestResponseSession)被定义为组件并准备好注入您的端点。
  • 组件作为插件生态系统的基础,允许您创建自定义或使用已在端点中定义的组件,作为参数注入。
  • 使用 OpenAPI 标准自动生成的 API 模式。它使用您的端点的模式系统来提取所有必要的信息来生成您的 API 模式。
  • 自动生成的文档,提供Swagger UIReDoc端点。
  • 使用限制和偏移、页码等多种方法自动处理分页...

要求

安装

$ pip install starlette-api

例子

from marshmallow import Schema, fields, validate
from starlette_api.applications import Starlette


# Data Schema
class Puppy(Schema):
    id = fields.Integer()
    name = fields.String()
    age = fields.Integer(validate=validate.Range(min=0))


# Database
puppies = [
    {"id": 1, "name": "Canna", "age": 6},
    {"id": 2, "name": "Sandy", "age": 12},
]


# Application
app = Starlette(
    components=[],      # Without custom components
    title="Foo",        # API title
    version="0.1",      # API version
    description="Bar",  # API description
    schema="/schema/",  # Path to expose OpenAPI schema
    docs="/docs/",      # Path to expose Swagger UI docs
    redoc="/redoc/",    # Path to expose ReDoc docs
)


# Views
@app.route("/", methods=["GET"])
def list_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 [puppy for puppy in puppies if puppy["name"] == name]
    

@app.route("/", methods=["POST"])
def create_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)
    
    return puppy

依赖项

遵循 Starlette 哲学 Starlette API 将硬依赖的数量减少到用作核心的那些:

  • starlette- Starlette API 是它之上的一层。
  • marshmallow- Starlette API 数据模式和验证。

它没有更多的硬依赖,但其中一些是使用某些功能所必需的:

  • pyyaml- API Schema 和 Docs 自动生成所必需的。
  • apispec- API Schema 和 Docs 自动生成所必需的。
  • python-forge- 需要分页。
  • sqlalchemy- 通用 API 资源所必需的。
  • databases- 通用 API 资源所必需的。

您可以使用pip3 install starlette-api[full].

学分

该库最初是对 APIStar 的改编,可与Starlette一起使用,但大量代码已被重写以使用Marshmallow作为模式系统。

贡献

这个项目对贡献是绝对开放的,所以如果你有一个好主意,请创建一个问题让社区讨论它。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

starlette-api-0.7.0.tar.gz (38.2 kB 查看哈希)

已上传 source

内置分布

starlette_api-0.7.0-py3-none-any.whl (135.1 kB 查看哈希

已上传 py3