Skip to content
Closed
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
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.
43 changes: 43 additions & 0 deletions fastapi/books_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel

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
7 changes: 7 additions & 0 deletions fastapi/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
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
Loading