Skip to main content

Starlette API layer inherited from APIStar

Project description

Starlette API

API power up for Starlette

Build Status Coverage Package version


Documentation: https://starlette-api.perdy.io


Starlette API

Starlette API aims to bring a layer on top of Starlette to provide a fast and easy way for building highly performant REST APIs.

It is production-ready and provides the following:

  • Generic classes for API resources that provides standard CRUD methods over SQLAlchemy tables.
  • Schema system based on Marshmallow that allows to declare the inputs and outputs of endpoints and provides a reliable way of validate data against those schemas.
  • Dependency Injection that ease the process of managing parameters needed in endpoints. Starlette ASGI objects like Request, Response, Session and so on are defined as components and ready to be injected in your endpoints.
  • Components as the base of the plugin ecosystem, allowing you to create custom or use those already defined in your endpoints, injected as parameters.
  • Auto generated API schema using OpenAPI standard. It uses the schema system of your endpoints to extract all the necessary information to generate your API Schema.
  • Auto generated docs providing a Swagger UI or ReDoc endpoint.
  • Pagination automatically handled using multiple methods such as limit and offset, page numbers...

Requirements

Installation

$ pip install starlette-api

Example

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

Dependencies

Following Starlette philosophy Starlette API reduce the number of hard dependencies to those that are used as the core:

  • starlette - Starlette API is a layer on top of it.
  • marshmallow - Starlette API data schemas and validation.

It does not have any more hard dependencies, but some of them are necessaries to use some features:

  • pyyaml - Required for API Schema and Docs auto generation.
  • apispec - Required for API Schema and Docs auto generation.
  • python-forge - Required for pagination.
  • sqlalchemy - Required for Generic API resources.
  • databases - Required for Generic API resources.

You can install all of these with pip3 install starlette-api[full].

Credits

That library started as an adaptation of APIStar to work with Starlette, but a great amount of the code has been rewritten to use Marshmallow as the schema system.

Contributing

This project is absolutely open to contributions so if you have a nice idea, create an issue to let the community discuss it.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

starlette-api-0.6.4.tar.gz (38.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

starlette_api-0.6.4-py3-none-any.whl (134.3 kB view details)

Uploaded Python 3

File details

Details for the file starlette-api-0.6.4.tar.gz.

File metadata

  • Download URL: starlette-api-0.6.4.tar.gz
  • Upload date:
  • Size: 38.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.11 CPython/3.7.2 Linux/5.0.0-arch1-1-ARCH

File hashes

Hashes for starlette-api-0.6.4.tar.gz
Algorithm Hash digest
SHA256 00c523bcd5ae5f63870f4218cdf1600b564e72f2e25106c8a4ad616766e4ee52
MD5 8275b6ff8dd71167bbcf3ab92e6ba4eb
BLAKE2b-256 cfa48c4b92903162aa1b439371fa1c045ff31e768ec5eeb90efaa468378dde19

See more details on using hashes here.

File details

Details for the file starlette_api-0.6.4-py3-none-any.whl.

File metadata

  • Download URL: starlette_api-0.6.4-py3-none-any.whl
  • Upload date:
  • Size: 134.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.11 CPython/3.7.2 Linux/5.0.0-arch1-1-ARCH

File hashes

Hashes for starlette_api-0.6.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c9b0300e207a1bf099080af795ce88e3106f948b50de8e8a2f91f41cdd05de6d
MD5 15b23bf6d344a21115b8d5cfed2841d9
BLAKE2b-256 0c8902f95d0e5f3a234c6ccfa898703fdf076c17910588b80e1ae378d084ddc0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page