Test in production without watermarks.
Works wherever you need it to.
Get 30 days of fully functional product.
Have it up and running in minutes.
Full access to our support engineering team during your product trial
FastAPI is a modern, high-performance web framework for building APIs with Python. It is designed to be easy to use and learn while providing powerful features like automatic validation, serialization, and automatic interactive API documentation. Additionally, it works with any template engine and allows you to use any default template configuration needed for your project.
Let’s dive into the details of FastAPI, its features, and how to use it effectively. Later in this article, we will also look into IronPDF, a PDF generation Python package from Iron Software.
You can install FastAPI and Uvicorn (an ASGI server) using pip:
pip install fastapi
pip install "uvicorn[standard]"
pip install fastapi
pip install "uvicorn[standard]"
Here’s a simple example to get you started with FastAPI and expose Python data through a user interface:
from fastapi import FastAPI
# Create a FastAPI 'app' instance
app = FastAPI()
# Root path operation
@app.get("/")
def read_root():
return {"Hello": "World"}
# Path operation for items including query parameter 'q'
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
from fastapi import FastAPI
# Create a FastAPI 'app' instance
app = FastAPI()
# Root path operation
@app.get("/")
def read_root():
return {"Hello": "World"}
# Path operation for items including query parameter 'q'
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
To run the application, use Uvicorn:
uvicorn main:app --reload
uvicorn main:app --reload
This command will start a development server and automatically reload for code changes. You can access the interactive API documentation at http://127.0.0.1:8000/docs
.
FastAPI supports a wide range of advanced features, making it suitable for complex applications:
Let’s build a simple CRUD (Create, Read, Update, Delete) API for managing items.
from pydantic import BaseModel
# Define a Pydantic model for the item with default description and tax
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
from pydantic import BaseModel
# Define a Pydantic model for the item with default description and tax
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
from fastapi import FastAPI, HTTPException
# Initialize 'app' instance and an empty 'items' dictionary
app = FastAPI()
items = {}
# Create operation: Add a new item
@app.post("/items/")
def create_item(item: Item):
item_id = len(items) + 1
items[item_id] = item
return item
# Read operation: Retrieve an item by 'item_id'
@app.get("/items/{item_id}")
def read_item(item_id: int):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
return items[item_id]
# Update operation: Replace an existing item
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
items[item_id] = item
return item
# Delete operation: Remove an item by 'item_id'
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
del items[item_id]
return {"message": "Item deleted"}
from fastapi import FastAPI, HTTPException
# Initialize 'app' instance and an empty 'items' dictionary
app = FastAPI()
items = {}
# Create operation: Add a new item
@app.post("/items/")
def create_item(item: Item):
item_id = len(items) + 1
items[item_id] = item
return item
# Read operation: Retrieve an item by 'item_id'
@app.get("/items/{item_id}")
def read_item(item_id: int):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
return items[item_id]
# Update operation: Replace an existing item
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
items[item_id] = item
return item
# Delete operation: Remove an item by 'item_id'
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
del items[item_id]
return {"message": "Item deleted"}
IronPDF is a powerful Python library designed for creating, editing, and signing PDFs from HTML, CSS, images, and JavaScript. It offers commercial-grade performance with a low memory footprint. Key features include:
Convert HTML files, HTML strings, and URLs to PDFs. For example, render a webpage as a PDF using the Chrome PDF renderer.
Compatible with various .NET platforms, including .NET Core, .NET Standard, and .NET Framework. It supports Windows, Linux, and macOS.
Set properties, add security with passwords and permissions, and apply digital signatures to your PDFs.
Customize PDFs with headers, footers, page numbers, and adjustable margins. Supports responsive layouts and custom paper sizes.
Adheres to PDF standards such as PDF/A and PDF/UA. Supports UTF-8 character encoding and handles assets like images, CSS, and fonts.
pip install fastapi
pip install ironPDF
pip install fastapi
pip install ironPDF
from fastapi import FastAPI
from fastapi.responses import FileResponse
from ironpdf import *
# Apply your IronPDF license key
License.LicenseKey = "key"
# Initialize 'app' instance
app = FastAPI()
# Route for simple greeting
@app.get("/")
def read_root():
return {"Hello": "IronPDF"}
# Route that reads items with path and query parameters
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
# Route for generating a PDF document
@app.get("/pdf")
async def get_pdf(greet1: str = None, greet2: str = None):
# Use ChromePdfRenderer to create PDF from HTML
renderer = ChromePdfRenderer()
content = "<h1>Document Generated using IronPDF with FastAPI GET</h1>"
content += "<p> Demonstrate PDF generation using User Inputs</p>"
content += f"<p>Greetings from: {greet1}</p>"
content += f"<p>And Greetings from: {greet2}</p>"
pdf = renderer.RenderHtmlAsPdf(content)
# Save the PDF to a file
pdf.SaveAs("fastapi.pdf")
# Create a response with the generated PDF
headers = {
"Content-Disposition": "inline; filename=sample.pdf"
}
return FileResponse("fastapi.pdf", media_type="application/pdf", headers=headers)
from fastapi import FastAPI
from fastapi.responses import FileResponse
from ironpdf import *
# Apply your IronPDF license key
License.LicenseKey = "key"
# Initialize 'app' instance
app = FastAPI()
# Route for simple greeting
@app.get("/")
def read_root():
return {"Hello": "IronPDF"}
# Route that reads items with path and query parameters
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
# Route for generating a PDF document
@app.get("/pdf")
async def get_pdf(greet1: str = None, greet2: str = None):
# Use ChromePdfRenderer to create PDF from HTML
renderer = ChromePdfRenderer()
content = "<h1>Document Generated using IronPDF with FastAPI GET</h1>"
content += "<p> Demonstrate PDF generation using User Inputs</p>"
content += f"<p>Greetings from: {greet1}</p>"
content += f"<p>And Greetings from: {greet2}</p>"
pdf = renderer.RenderHtmlAsPdf(content)
# Save the PDF to a file
pdf.SaveAs("fastapi.pdf")
# Create a response with the generated PDF
headers = {
"Content-Disposition": "inline; filename=sample.pdf"
}
return FileResponse("fastapi.pdf", media_type="application/pdf", headers=headers)
This code snippet demonstrates the integration of IronPDF with FastAPI to dynamically generate PDF documents based on user inputs and serve them as a downloadable response.
Setting License Key: Applies the IronPDF license key to enable its features.
FastAPI Initialization: Initializes a FastAPI instance (app
) to handle HTTP requests.
Basic Route Handlers:
read_root()
: Responds with a simple JSON message indicating "Hello IronPDF" when accessing the root URL (/
).read_item()
: Accepts an item_id
path parameter and an optional q
query parameter. Returns a JSON response with these parameters.PDF Generation Route (/pdf
):
get_pdf()
: This async function handles GET requests to the /pdf
endpoint with optional query parameters named greet1
and greet2
.content
) that includes:greet1
and greet2
).ChromePdfRenderer()
from IronPDF to render the HTML content into a PDF (pdf = renderer.RenderHtmlAsPdf(content)
).pdf.SaveAs("fastapi.pdf")
)."Content-Disposition": "inline; filename=sample.pdf"
).FileResponse
object pointing to the generated PDF file with the appropriate media type ("application/pdf"
).FileResponse
object, which triggers the download of the PDF document when the /pdf
endpoint is accessed.This code snippet illustrates how IronPDF can be seamlessly integrated with FastAPI to dynamically generate and serve PDF documents based on user inputs. It showcases the ability to convert HTML content into PDFs, making it suitable for applications requiring on-the-fly document generation and delivery over HTTP.
Below shows the swagger output generated from the APIs
IronPDF runs on the license key for Python. IronPDF for Python offers a free trial license key to allow users to check out features before purchase.
Place the License Key at the start of the script before using the IronPDF package:
from ironpdf import *
# Apply your license key
License.LicenseKey = "key"
from ironpdf import *
# Apply your license key
License.LicenseKey = "key"
FastAPI is a powerful and easy-to-use framework for building APIs in Python. FastAPI has high performance, automatic documentation, and advanced features make it an excellent choice for both beginners and experienced developers. Whether you’re building a simple API or a complex web application, FastAPI provides the tools you need to succeed.
IronPDF is a robust Python library for creating, manipulating, and rendering PDF documents from HTML content. It offers features like HTML to PDF conversion, interactive form creation, PDF manipulation (merging, splitting), and text extraction. Ideal for generating dynamic PDFs with ease and integrating into various Python applications.
FastAPI is a modern, high-performance web framework for building APIs with Python. It is designed to be easy to use and learn while providing powerful features like automatic validation, serialization, and interactive API documentation.
FastAPI is one of the fastest Python frameworks available, comparable to Node.js and Go, due to its use of Starlette for web parts and Pydantic for data parts.
You can install FastAPI and Uvicorn (an ASGI server) using pip with the following commands: 'pip install fastapi' and 'pip install "uvicorn[standard]"'.
To create a simple FastAPI application, initialize a FastAPI instance, define path operations using decorators like @app.get(), and run the app using Uvicorn.
FastAPI automatically generates interactive API documentation using OpenAPI and JSON Schema, accessible via /docs (Swagger UI) and /redoc (ReDoc). Updates to the API are automatically reflected in the documentation.
Yes, FastAPI supports WebSockets, enabling real-time communication between the client and server.
IronPDF is a powerful Python library for creating, editing, and signing PDFs from HTML content. It can be integrated with FastAPI to dynamically generate and serve PDF documents based on user inputs.
To generate PDFs using IronPDF and FastAPI, you can define a FastAPI route that uses IronPDF's ChromePdfRenderer to render HTML content into a PDF, and serve the PDF using FastAPI's FileResponse.
FastAPI leverages standard Python-type hints for data validation, using Pydantic models to ensure that data is validated and serialized correctly.
FastAPI supports advanced features such as dependency injection, background tasks, WebSockets, security features (e.g., OAuth2, JWT), and seamless database integration.