4.4 KiB
The simplest FastAPI file could look like this:
{!tutorial/src/first-steps/tutorial001.py!}
Copy that to a file main.py
.
Run the live server:
uvicorn main:app --debug
!!! note
The command uvicorn main:app
refers to:
* `main`: the file `main.py` (the Python "module").
* `app`: the object created inside of `main.py` with the line `app = FastAPI()`.
* `--debug`: make the server restart after code changes. Only use for development.
You will see an output like:
INFO: Started reloader process [17961]
INFO: Started server process [17962]
INFO: Waiting for application startup.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
That last line shows the URL where your app is being served, in your local machine.
Check it
Open your browser at http://127.0.0.1:8000.
You will see the JSON response as:
{"hello": "world"}
Interactive API docs
Now go to http://127.0.0.1:8000/docs.
You will see the automatic interactive API documentation (provided by Swagger UI):
Alternative API docs
And now, go to http://127.0.0.1:8000/redoc.
You will see the alternative automatic documentation (provided by ReDoc):
If you are curious about how the raw OpenAPI schema looks like, it is just an automatically generated JSON with the descriptions of all your API.
You can see it directly at: http://127.0.0.1:8000/openapi.json.
It will show a JSON starting with something like:
{
"openapi": "3.0.2",
"info": {
"title": "Fast API",
"version": "0.1.0"
},
"paths": {
"/items/": {
"get": {
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
...
Recap, step by step
Step 1: import FastAPI
{!tutorial/src/first-steps/tutorial001.py!}
FastAPI
is a Python class that provides all the functionality for your API.
Step 2: create a FastAPI
"instance"
{!tutorial/src/first-steps/tutorial001.py!}
Here the app
variable will be an "instance" of the class FastAPI
.
This will be the main point of interaction to create all your API endpoints.
This app
is the same one referred by uvicorn
in thet command:
uvicorn main:app --debug
If you create your app like:
{!tutorial/src/first-steps/tutorial002.py!}
And put it in a file main.py
, then you would call uvicorn
like:
uvicorn main:my_awesome_api --debug
Step 3: create an endpoint
{!tutorial/src/first-steps/tutorial001.py!}
The @app.get("/")
tells FastAPI that the function right below is an endpoint and that it should go to the path route /
.
You can also use other HTTP methods:
@app.post()
@app.put()
@app.delete()
And more exotic ones:
@app.options()
@app.head()
@app.patch()
@app.trace()
Step 4: define the endpoint function
{!tutorial/src/first-steps/tutorial001.py!}
This is a Python function.
It will be called by FastAPI whenever it receives a request to the URL "/
".
In this case, it is an async
function.
You could also define it as a normal function instead of async def
:
{!tutorial/src/first-steps/tutorial003.py!}
To know the difference, read the section about Concurrency and async
/ await
.
Step 5: return the content
{!tutorial/src/first-steps/tutorial001.py!}
You can return a dict
, list
, singular values as str
, int
, etc.
You can also return Pydantic models (you'll see more about that later).
There are many other objects and models that will be automatically converted to JSON.