* Automatic data model documentation with <ahref="http://json-schema.org/"target="_blank"><strong>JSON Schema</strong></a> (as OpenAPI itself is based on JSON Schema).
* Interactive API documentation and exploration web user interface with <ahref="https://github.com/swagger-api/swagger-ui"target="_blank"><strong>Swagger UI</strong></a>.
# item_tags is a dict with str as keys, and lists of str as values
item_tags: Dict[str, List[str]] = {
"foo": ["The Foo", "Foo Fighters"],
"bar": ["Bar Halen", "Bars N' Roses"]
}
# A Pydantic model
class User(BaseModel):
id: int
name: str
joined: datetime
joined: date
```
That can then be used like:
```Python
my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
second_user_data = {
@ -54,14 +47,27 @@ second_user_data = {
}
# **second_user_data means "pass the keys and values of the dict directly as arguments
# **second_user_data means:
# pass the keys and values of the dict
# directly as key-value arguments
# equivalent to:
# id=4, name="Mary", joined="2018-11-30"
my_second_user: User = User(**second_user_data)
```
* Sensible **defaults** for everything, with optional configurations everywhere.
* Validation for many **data types**, including JSON objects (`dict`) fields, JSON array (`list`) item types, string (`str`) min and max lengths, number (`int`, `float`) min and max values, etc.
* Security and authentication included: all the security schemes defined in OpenAPI, including HTTP Basic, **OAuth2** (also with **JWT tokens**), API keys, etc. Plus the security features from Starlette (including session cookies). All built as reusable tools and components that are easy to integrate with your systems, data stores, databases, etc.
* Extremely easy, but extremely powerful **Dependency Injection** (also known as "components", "resources", "services", "providers"):
* Validation for many **data types**, including:
* JSON objects (`dict`).
* JSON array (`list`) defining item types.
* String (`str`) fields, defining min and max lengths.
* Numbers (`int`, `float`) with min and max values, etc.
* Security and authentication included: all the security schemes defined in OpenAPI, including:
* HTTP Basic.
* **OAuth2** (also with **JWT tokens**)
* API keys, etc.
* Plus the security features from Starlette (including session cookies).
* All built as reusable tools and components that are easy to integrate with your systems, data stores, databases, etc.
* Extremely easy, but extremely powerful <abbrtitle='also known as "components", "resources", "services", "providers"'><strong>Dependency Injection</strong></abbr> system:
* Even dependencies can have dependencies, creating a hierarchy or **"graph" of dependencies**.
* All **automatically handled** by the framework.
* All the dependencies can **augment the endpoint** parameters and constraints.
@ -70,12 +76,12 @@ my_second_user: User = User(**second_user_data)
* **No compromise** with databases, frontends, etc. But easy integration with all.
* **Unlimited "plug-ins"**:
* Or in other way, no need for them, import and use the code you need.
* Any integration is designed to be so simple to use (with dependencies) that you can create a "plug-in" for your application in 2 lines of code.
* Any integration is designed to be so simple to use (with dependencies) that you can create a "plug-in" for your application in 2 lines of code using the same structure and syntax as for your endpoints.
* Fully compatible with (and based on) **Starlette**.
* Any additional Starlette code you have, will also work.
* Fully compatible with (and based on) **Pydantic**.
* Any additional Pydantic code you have will also work.
* Including external libraries also based on Pydantic.
* Including external libraries also based on Pydantic, as <abbrtitle="Object-Relational Mapper">ORM</abbr>s, <abbrtitle="Object-Document Mapper">ODM</abbr>s for databases.
* 100% test coverage (* not yet, in a couple days).