Python backend framework. One of the fastest frameworks, directly compete with Node.js according to benchmarks. Widely used by multiple companies like Netflix and Microsoft.
Uses uvicorn as server (software that distributes an application), Starlette (low-level backend framework) and Pydantic to define models.
- GET - Client brings information from the server and send info in the path or query params.
- POST - Client sends JSON information (request) and receives a JSON response from the server.
- PUT - Updates information
- DELETE - Deletes information
- OPTIONS
- HEAD
- PATCH
- TRACE
Inside a path, a variable can be defined using the following notaiton: /route-name/{variable-name}
.
In general terms, these variables are used to point a resource within a collection. For example, a user_id.
Path parameters are mandatory
.
If information want to be send within the route, but don't want them to be mandatory, we can use query parameters. Query parameters looks like this:
/route-name?username=myname&age=20&height=184
When using HTTP we send the following:
- Body
- Headers
When a client send information to a server: Request
When a server sends information back to the client: Response
Both are send in JSON format and both can have headers values.
Descriptive representation of an real world entity e.g. an user. Models in FastAPI are created using Pydantic and this is done using Pydantic BaseModel
For query params we can use Query
class.
- For
str
- min_lenght
- max_lenght
- regex
- For
int
- ge (greater or equal to)
- le (less or equal to)
- gt (greater than)
- lt (less than)
str
int
float
bool
"Exotic" data from Pydantic:
enum
HttpUrl
: Validates if data is compliant with URL format. e.g.http://example.com
FilePath
: Validates if data is route to a file. e.g.path/to/file.py
DirectoryPath
: Validates if data is route to a directory. e.g.path/to/dir
EmailStr
: Validates if data i compliant with email format. e.g.hola@gmail.com
PaymentCardNumber
IPvAnyAddress
NegativeFloat
,PositiveFloat
,NegativeInt
,PositiveInt
More info: https://pydantic-docs.helpmanual.io/usage/types/#pydantic-types
https://fastapi.tiangolo.com/tutorial/path-params/#order-matters
Use uvicorn to start a server that serves requests and reload when code is modified (hot reloader).
uvicorn <name-of-file>:<name-of-fast-api-instance> --reload
OpenAPI is a set of rules that describes how to defined an API. OpenAPI specification can be visualized using Swagger UI
or Redoc
. To access the automatic generated docs using OpenAPI specification go to /docs
path for swagger UI and /redoc
for Redoc.
For example, openAPI specification:
{
"openapi": "3.0.2",
"info": {
"title": "FastAPI",
"version": "0.1.0"
},
"paths": {
"/": {
"get": {
"summary": "Home",
"operationId": "home__get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
}
}
}
}
}
}