Skip to content

Add materials for the "Get Started With FastAPI tutorial" #692

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion crud-operations/crud_fastapi.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from crud_sql_alchemy import Bird, init_db
from crud_sql_alchemy import Session as SessionLocal
from fastapi import Depends, FastAPI, HTTPException
from pydantic import BaseModel, ConfigDict
from sqlalchemy import select
from sqlalchemy.orm import Session

from fastapi import Depends, FastAPI, HTTPException

app = FastAPI()
init_db()

Expand Down
5 changes: 3 additions & 2 deletions fastapi-url-shortener/source_code_final/shortener_app/main.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import validators
from fastapi import Depends, FastAPI, HTTPException, Request
from fastapi.responses import RedirectResponse
from sqlalchemy.orm import Session
from starlette.datastructures import URL

from fastapi import Depends, FastAPI, HTTPException, Request
from fastapi.responses import RedirectResponse

from . import crud, models, schemas
from .config import get_settings
from .database import SessionLocal, engine
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import secrets

import validators
from sqlalchemy.orm import Session

from fastapi import Depends, FastAPI, HTTPException, Request
from fastapi.responses import RedirectResponse
from sqlalchemy.orm import Session

from . import models, schemas
from .database import SessionLocal, engine
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import validators
from sqlalchemy.orm import Session

from fastapi import Depends, FastAPI, HTTPException, Request
from fastapi.responses import RedirectResponse
from sqlalchemy.orm import Session

from . import crud, models, schemas
from .database import SessionLocal, engine
Expand Down
15 changes: 15 additions & 0 deletions fastapi/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Get Started With FastAPI

This repository contains code snippets discussed in the associated tutorial on [Get Started With FastAPI](https://realpython.com/get-started-with-fastapi/).

## Installation

The recommended way to install FastAPI is with the `[standard]` extra dependencies. This ensures you get all the tools you need for developing an API without having to hunt down additional packages later:

```console
$ python -m pip install "fastapi[standard]"
```

The quotes around `"fastapi[standard]"` ensure the command works correctly across different [terminals](https://realpython.com/terminal-commands/) and operating systems. With the command above you install several useful packages, including the [FastAPI CLI](https://fastapi.tiangolo.com/fastapi-cli/) and [uvicorn](https://www.uvicorn.org/), an ASGI server for running your application.

You can also use the `requirements.txt` file in this folder and run `python -m pip install -r requirements.txt` to install the standard dependencies of FastAPI.
53 changes: 53 additions & 0 deletions fastapi/books_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
from typing import Optional

from pydantic import BaseModel

from fastapi import FastAPI

app = FastAPI()

books = [
{"id": 1, "title": "Python Basics", "author": "Real P.", "pages": 635},
{
"id": 2,
"title": "Breaking the Rules",
"author": "Stephen G.",
"pages": 99,
},
]


class Book(BaseModel):
title: str
author: str
pages: int


@app.get("/books")
def get_books(limit: Optional[int] = None):
"""Get all books, optionally limited by count."""
if limit:
return {"books": books[:limit]}
return {"books": books}


@app.get("/books/{book_id}")
def get_book(book_id: int):
"""Get a specific book by ID."""
for book in books:
if book["id"] == book_id:
return book
return {"error": "Book not found"}


@app.post("/books")
def create_book(book: Book):
"""Create a new book entry."""
new_book = {
"id": len(books) + 1,
"title": book.title,
"author": book.author,
"pages": book.pages,
}
books.append(new_book)
return new_book
8 changes: 8 additions & 0 deletions fastapi/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def home():
return {"message": "Hello, FastAPI!"}
39 changes: 39 additions & 0 deletions fastapi/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
annotated-types==0.7.0
anyio==4.10.0
certifi==2025.8.3
click==8.2.1
dnspython==2.7.0
email_validator==2.2.0
fastapi==0.116.1
fastapi-cli==0.0.8
fastapi-cloud-cli==0.1.5
h11==0.16.0
httpcore==1.0.9
httptools==0.6.4
httpx==0.28.1
idna==3.10
Jinja2==3.1.6
markdown-it-py==4.0.0
MarkupSafe==3.0.2
mdurl==0.1.2
pydantic==2.11.7
pydantic_core==2.33.2
Pygments==2.19.2
python-dotenv==1.1.1
python-multipart==0.0.20
PyYAML==6.0.2
rich==14.1.0
rich-toolkit==0.15.0
rignore==0.6.4
sentry-sdk==2.34.1
shellingham==1.5.4
sniffio==1.3.1
starlette==0.47.2
typer==0.16.0
typing-inspection==0.4.1
typing_extensions==4.14.1
urllib3==2.5.0
uvicorn==0.35.0
uvloop==0.21.0
watchfiles==1.1.0
websockets==15.0.1
3 changes: 2 additions & 1 deletion langchain-rag-app/source_code_final/chatbot_api/src/main.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from agents.hospital_rag_agent import hospital_rag_agent_executor
from fastapi import FastAPI
from models.hospital_rag_query import HospitalQueryInput, HospitalQueryOutput
from utils.async_utils import async_retry

from fastapi import FastAPI

app = FastAPI(
title="Hospital Chatbot",
description="Endpoints for a hospital system graph RAG chatbot",
Expand Down
3 changes: 2 additions & 1 deletion langchain-rag-app/source_code_step_5/chatbot_api/src/main.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from agents.hospital_rag_agent import hospital_rag_agent_executor
from fastapi import FastAPI
from models.hospital_rag_query import HospitalQueryInput, HospitalQueryOutput
from utils.async_utils import async_retry

from fastapi import FastAPI

app = FastAPI(
title="Hospital Chatbot",
description="Endpoints for a hospital system graph RAG chatbot",
Expand Down
3 changes: 2 additions & 1 deletion python-serialize/http-payload/fastapi-rest-api/main.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from datetime import datetime
from uuid import UUID, uuid4

from fastapi import FastAPI
from pydantic import BaseModel, Field

from fastapi import FastAPI

app = FastAPI()


Expand Down
3 changes: 2 additions & 1 deletion python-yaml/formatter/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@
from typing import Optional

import yaml
from pydantic import BaseModel

from fastapi import FastAPI
from fastapi.responses import HTMLResponse, JSONResponse
from fastapi.staticfiles import StaticFiles
from pydantic import BaseModel

TEST_DATA = {
"person": {
Expand Down