FastAPI Guide

Introduction

FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.8+ based on standard Python type hints.

Prerequisites

  • a UNIX-like system (see WSL if you are using Windows), in order to use the Software Citadel CLI
  • a Software Citadel account, with a registered payment method (you can sign up here)
  • Python3 and installed on your machine

Installing the CLI

curl -L https://cli.softwarecitadel.com/install.sh | sh

You can inspect the installation script here and the GitHub repository.

Authenticating

citadel auth login

Initializing the project

In the first place, we are going to install FastAPI dependencies. You can refer to the official documentation for more information.

pip install fastapi
pip install uvicorn[standard]

Then, we can scaffold a new FastAPI project :

mkdir -p fastapi-testing/app && cd fastapi-testing && touch app/main.py

Make sure to create a requirements.txt file, in order to install the dependencies in the Docker image :

touch requirements.txt

For this example, we are going to use the following dependencies :

# requirements.txt
fastapi>=0.68.0,<0.69.0
pydantic>=1.8.0,<2.0.0
uvicorn>=0.15.0,<0.16.0

In the app/main.py file, we can add the following code :

# app/main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
  return {"Hello": "World"}

Now, we can initialize the citadel.toml configuration file, that allows to link the local codebase, to a Software Citadel application :

citadel init

This command will ask you to select/create a project and an associated application.

Adding the Dockerfile

Let's add a Dockerfile so that Software Citadel can build a Docker image for your application.

touch Dockerfile

We can fill it with the following Dockerfile (coming from here) :

FROM python:3.9

WORKDIR /code

COPY ./requirements.txt /code/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

COPY ./app /code/app

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

Deploy the project

Software Citadel makes use of the PORT environment variable to determine which port to expose. We can set it with the following command :

citadel env set PORT=80

Then, we can deploy the application :

citadel deploy

Once the deployment is finished, type :

citadel open

to test your FastAPI application in your browser.