mirror of https://github.com/encode/starlette.git
Update Starlette API section in third-party docs (#377)
This commit is contained in:
parent
96d50862e4
commit
37782e7a55
|
@ -17,12 +17,71 @@ Document your REST API built with Starlette by declaring OpenAPI (Swagger) schem
|
|||
|
||||
Link: <a href="https://github.com/PeRDy/starlette-api" target="_blank">https://github.com/PeRDy/starlette-api</a>
|
||||
|
||||
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:
|
||||
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:
|
||||
|
||||
* **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.
|
||||
* **Schema system** based on [Marshmallow](https://github.com/marshmallow-code/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.
|
||||
* **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](https://swagger.io/tools/swagger-ui/) or
|
||||
[ReDocs](https://rebilly.github.io/ReDoc/) endpoint.
|
||||
|
||||
|
||||
```python
|
||||
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]
|
||||
```
|
||||
|
||||
### webargs-starlette
|
||||
|
||||
|
|
Loading…
Reference in New Issue