pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.3 KiB
5.3 KiB
FastAPI features
FastAPI gives you the following:
- Automatic API documentation with the open standard: OpenAPI.
- Automatic data model documentation with JSON Schema (as OpenAPI itself is based on JSON Schema).
- Interactive API documentation and exploration web user interface with Swagger UI.
- Alternative API documentation with ReDoc.
- All based on standard Python 3.6 type declarations (thanks to Pydantic). No new syntax to learn:
from typing import List, Dict
from datetime import date
from pydantic import BaseModel
# Declare a variable as an str
# and get editor support inside the function
def main(user_id: str):
return user_id
# A Pydantic model
class User(BaseModel):
id: int
name: str
joined: date
That can then be used like:
my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
second_user_data = {
"id": 4,
"name": "Mary",
"joined": "2018-11-30",
}
# **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
). - JSON array (
list
) defining item types. - String (
str
) fields, defining min and max lengths. - Numbers (
int
,float
) with min and max values, etc.
- JSON objects (
- 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 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.
- Automatic validation even for parameters from dependencies.
- Support for complex user authentication systems, database connections, etc.
- 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 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, as ORMs, ODMs for databases.
- 100% test coverage (* not yet, in a couple days).
- 100% type annotated code base.
Starlette features
Plus Starlette's features (FastAPI is just Starlette on steroids):
- Seriously impressive performance. It is one of the fastest Python frameworks available, on par with NodeJS and Go.
- WebSocket support.
- GraphQL support.
- In-process background tasks.
- Startup and shutdown events.
- Test client built on
requests
. - CORS, GZip, Static Files, Streaming responses.
- Session and Cookie support.
- 100% test coverage.
- 100% type annotated codebase.
Pydantic features
Plus Pydantic's features:
- No brainfuck:
- No new schema definition micro-language to learn.
- If you know Python types you know how to use Pydantic.
- Plays nicely with your IDE/linter/brain:
- Because pydantic data structures are just instances of classes you define; auto-completion, linting, mypy and your intuition should all work properly with your validated data.
- Fast:
- in benchmarks Pydantic is faster than all other tested libraries.
- Validate complex structures:
- Use of hierarchical Pydantic models, Python
typing
’sList
andDict
, etc. - And validators allow complex data schemas to be clearly and easily defined, checked and documented as JSON Schema.
- You can have deeply nested JSON objects and have them all validated and annotated.
- Use of hierarchical Pydantic models, Python
- Extendible:
- Pydantic allows custom data types to be defined or you can extend validation with methods on a model decorated with the validator decorator.