Skip to main content

Starlette API layer inherited from APIStar

Project description

Starlette API

Build Status codecov PyPI version

  • Version: 0.6.0
  • Status: Production/Stable
  • Author: José Antonio Perdiguero López

Introduction

That library aims to bring a layer on top of Starlette framework to provide useful mechanism for building APIs. It's based on API Star, inheriting some nice ideas like:

  • 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.
  • Components as the base of the plugin ecosystem, allowing you to create custom or use those already defined in your endpoints, injected as parameters.
  • Starlette ASGI objects like Request, Response, Session and so on are defined as components and ready to be injected in your endpoints.
  • 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 ReDocs endpoint.
  • Pagination automatically handled using multiple methods such as limit and offset, page numbers...

Requirements

  • Python 3.6+
  • Starlette 0.10+

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):
    """
    List the puppies collection. There is an optional query parameter that 
    specifies a name for filtering the collection based on it.
    
    Request example:
    GET http://example.com/?name=Sandy
    
    Response example:
    200
    [
        {"id": 2, "name": "Sandy", "age": 12}
    ]
    """
    return [puppy for puppy in puppies if puppy["name"] == name]
    

@app.route("/", methods=["POST"])
def create_puppy(puppy: Puppy) -> Puppy:
    """
    Create a new puppy using data validated from request body and add it
    to the collection.
    
    Request example:
    POST http://example.com/
    {
        "id": 1,
        "name": "Canna",
        "age": 6
    }
    
    Response example:
    200
    {
        "id": 1,
        "name": "Canna",
        "age": 6
    }
    """
    puppies.append(puppy)
    
    return puppy

Credits

That library started mainly as extracted pieces from APIStar and adapted to work with Starlette.

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.0.tar.gz (36.7 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.0-py3-none-any.whl (129.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: starlette-api-0.6.0.tar.gz
  • Upload date:
  • Size: 36.7 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.0.tar.gz
Algorithm Hash digest
SHA256 8ef6082b935caa579120f9f18689bf753bcccc82f0f31970e46731c7a46aac5a
MD5 532022e8f1bdb73b2cb0707dcc7743f0
BLAKE2b-256 ccd5e59435c800b2a2074be7fa2efa22f3ab9e2b3e490fa7fe1ff248c0ad206e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: starlette_api-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 129.6 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 47ffd2c6df0e33cd41703ab236b61f6452fa6204d64e539e1c13ced58dd0592b
MD5 d5ac81f5091e0a2814818f25b12438cc
BLAKE2b-256 72895f56a71b9d090fd3bce9b2d45965b03586eedffb3a0ce7ea21262ca860e1

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