フッターコンテンツにスキップ
製品比較

FastAPI Python(開発者向けの仕組み)

FastAPIは、PythonでAPIを構築するためのモダンで高性能なWebフレームワークです。 これは、使いやすく学びやすいように設計されており、自動バリデーション、シリアル化、自動インタラクティブAPIドキュメントのような強力な機能を提供します。 さらに、どのテンプレートエンジンとも互換性があり、プロジェクトに必要なデフォルトのテンプレート設定を使用できるようにします。

それでは、FastAPIの詳細、その機能、および効果的な使用方法について掘り下げてみましょう。 Later in this article, we will also look into IronPDF, a PDF generation Python package from Iron Software.

FastAPIの主な機能

  1. 高性能: FastAPIは、StarletteをWebパーツに、Pydanticをデータパーツに使用することで、Node.jsやGoと同等の高速なPythonフレームワークの1つです。
  2. 使いやすさ: 直感的に設計されており、ドキュメントを読む時間を短縮します。 フレームワークはデータバリデーションとシリアル化に標準のPython型ヒントを利用します。
  3. 自動インタラクティブドキュメント: FastAPIは、OpenAPIとJSON Schemaを使用してインタラクティブなAPIドキュメントを自動生成し、/docs (Swagger UI) および /redoc (ReDoc) でアクセス可能です。 APIに対するいかなる更新もドキュメントに自動的に反映されます。
  4. エディターサポート: VS Codeのようなエディターでのコード補完と型チェックの優れたサポートにより、開発が迅速になり、エラーが減少します。
  5. 標準ベース: これは、APIのオープンスタンダードであるOpenAPIとJSON Schemaに基づいており、完全に互換性があります。

インストール

FastAPIおよびUvicorn (ASGIサーバー) をpipでインストールできます:

pip install fastapi
pip install "uvicorn[standard]"
pip install fastapi
pip install "uvicorn[standard]"
SHELL

あなたの最初のFastAPIアプリケーションを作成する

以下は、FastAPIを使ってPythonデータをユーザーインターフェイスを通じて公開するための簡単な例です:

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}
PYTHON

アプリケーションを実行するためには、Uvicornを使用します:

uvicorn main:app --reload
uvicorn main:app --reload
SHELL

このコマンドは開発サーバーを起動し、コードの変更に自動的にリロードします。 インタラクティブなAPIドキュメントにはhttp://127.0.0.1:8000/docsでアクセスできます。

高度な機能

FastAPIは、複雑なアプリケーションに適した幅広い高度な機能をサポートしています:

  1. 依存性注入: FastAPIは依存関係をクリーンかつ効率的に管理するための強力な依存性注入システムを提供します。
  2. バックグラウンドタスク: 応答を返した後に実行するバックグラウンドタスクを定義でき、メールの送信やデータの処理などに役立ちます。
  3. WebSockets: FastAPIはWebSocketsをサポートしており、クライアントとサーバー間のリアルタイム通信を可能にします。
  4. セキュリティ: FastAPIには、OAuth2、JWTトークンなどのセキュリティを扱うためのツールが含まれています。
  5. データベース統合: FastAPIは、SQLAlchemyやTortoise-ORMなどのライブラリを使用してデータベースと容易に統合できます。

例: CRUD APIを構築する

アイテムを管理するためのシンプルなCRUD (Create, Read, Update, Delete) APIを構築してみましょう。

  1. データモデルの定義:
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
PYTHON
  1. FastAPIアプリケーションの作成:
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"}
PYTHON

IronPDFの紹介

FastAPI Python (How It Works For Developers): Figure 1

IronPDFは、HTML、CSS、画像、およびJavaScriptからPDFを作成、編集、署名するために設計された強力なPythonライブラリです。 商業グレードのパフォーマンスを提供し、低メモリフットプリントです。 主な特徴には以下が含まれます:

HTMLからPDFへの変換

HTMLファイル、HTML文字列、URLをPDFに変換します。 たとえば、Chrome PDFレンダラーを使用してWebページをPDFとしてレンダリングします。

クロスプラットフォームサポート

.NET Core、.NET Standard、および.NET Frameworkを含むさまざまな.NETプラットフォームと互換性があります。 Windows、Linux、macOSをサポートしています。

編集と署名

プロパティの設定、パスワードと権限でのセキュリティ追加、デジタル署名の適用が可能です。

ページテンプレートと設定

ヘッダー、フッター、ページ番号、調整可能な余白でPDFをカスタマイズします。 レスポンシブレイアウトとカスタムペーパーサイズをサポートします。

標準準拠

PDF/AおよびPDF/UAなどのPDF標準に準拠しています。 UTF-8文字エンコーディングをサポートし、画像、CSS、フォントなどのアセットを処理します。

IronPDFおよびFastAPIを使用したPDFドキュメントの生成

pip install fastapi
pip install ironPDF
pip install fastapi
pip install ironPDF
SHELL
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)
PYTHON

コードの説明

このコードスニペットは、ユーザー入力に基づいてPDFドキュメントを動的に生成し、それをダウンロード可能な応答として提供するためにIronPDFをFastAPIと統合する方法を示しています。

  1. ライセンスキーの設定: IronPDFのライセンスキーを適用してその機能を有効化します。

  2. FastAPIの初期化: HTTPリクエストを処理するためにFastAPIインスタンス (app) を初期化します。

  3. 基本ルートハンドラー:

    • read_root(): ルートURL (/) にアクセスした際に"Hello IronPDF"という単純なJSONメッセージを応答します。
    • read_item():item_idのパスパラメータおよびオプションのqクエリパラメータを受け取ります。 これらのパラメータを含むJSON応答を返します。
  4. PDF生成ルート (/pdf):

    • get_pdf(): /pdfエンドポイントへのGETリクエストをオプションのクエリパラメータgreet1greet2で処理する非同期関数。
    • HTML文字列 (content) を構築し、以下を含む:
      • ドキュメントの出所と目的を示すヘッダー。
      • ユーザー入力 (greet1greet2) を使用したPDF生成を示す段落。
    • IronPDFのChromePdfRenderer()を使用して、HTMLコンテンツをPDFにレンダリングします (pdf = renderer.RenderHtmlAsPdf(content))。
    • 生成されたPDFを"fastapi.pdf"として保存します (pdf.SaveAs("fastapi.pdf"))。
  5. PDFの提供:
    • レスポンスヘッダーを設定して、ブラウザ内でPDFがインラインで表示されるように指定します ("Content-Disposition": "inline; filename=sample.pdf")。
    • 適切なメディアタイプ ("application/pdf") で生成されたPDFファイルを指すFileResponseオブジェクトを作成します。
    • FileResponseオブジェクトを返し、/pdfエンドポイントにアクセスした際にPDFドキュメントのダウンロードをトリガーします。

このコードスニペットは、ユーザー入力に基づいてPDFドキュメントを動的に生成および提供するためにIronPDFをFastAPIとシームレスに統合する方法を示しています。 HTMLコンテンツをPDFに変換する能力を示し、オンデマンドでのドキュメント生成とHTTP経由での配信が必要なアプリケーションに適しています。

出力

以下は、APIから生成されたスワッガー出力です。

FastAPI Python (How It Works For Developers): Figure 2

PDF

FastAPI Python (How It Works For Developers): Figure 3

IronPDFライセンス

IronPDFは、Python用のライセンスキーで動作します。 IronPDF for Pythonは、購入前に機能を試せる無料体験ライセンスキーを提供しています。

IronPDFパッケージを使用する前にスクリプトの先頭にライセンスキーを配置してください。

from ironpdf import *
# Apply your license key
License.LicenseKey = "key"
from ironpdf import *
# Apply your license key
License.LicenseKey = "key"
PYTHON

結論

FastAPIは、PythonでのAPI構築のための強力で使いやすいフレームワークです。 FastAPIは高性能、自動ドキュメント、および高度な機能により、初心者と経験豊富な開発者の両方にとって優れた選択肢となります。 シンプルなAPIを構築する場合でも複雑なWebアプリケーションを構築する場合でも、FastAPIは成功に必要なツールを提供します。

IronPDFは、HTMLコンテンツからPDFドキュメントを作成、操作、およびレンダリングするための堅牢なPythonライブラリです。 HTMLからPDFへの変換、インタラクティブフォームの作成、PDF操作 (結合、分割)、およびテキスト抽出などの機能を提供します。 動的なPDFを簡単に生成し、さまざまなPythonアプリケーションに統合するために理想的です。

よくある質問

PythonアプリケーションでHTMLコンテンツをPDFに変換するにはどうすればよいですか?

IronPDFのChromePdfRendererを使用すると、HTML、CSS、JavaScriptコンテンツをPDFファイルに変換できます。これにより、ウェブコンテンツからのPDFドキュメントの生成をPythonアプリケーションにシームレスに統合できます。

APIを構築するためにFastAPIを使用する利点は何ですか?

FastAPIは高性能、自動検証、シリアル化、インタラクティブなAPIドキュメントを提供します。StarletteとPydanticを活用して、Node.jsやGoに匹敵する速度と効率性を確保しながら、OpenAPIなどのオープン標準をサポートします。

FastAPIでPDFドキュメントをどのように提供できますか?

IronPDFを使用してPDFドキュメントを生成し、FastAPIのFileResponseを使用して返すことで、FastAPIでPDFドキュメントを提供できます。このアプローチにより、クライアントのリクエストに基づいてPDFを動的に作成し提供することができます。

FastAPIがリアルタイムアプリケーションに適している理由は何ですか?

FastAPIはWebSocketsをサポートしており、クライアントとサーバー間のリアルタイム通信を可能にし、即時のデータ更新やライブの対話を必要とするアプリケーションに最適な選択肢です。

FastAPIはどのようにデータ検証とシリアル化を扱いますか?

FastAPIはPydanticモデルと標準のPythonタイプヒントを使用してデータ検証とシリアル化を扱います。これにより、入力データが正しく検証され、希望の形式に変換され、エラーの可能性が減少します。

FastAPIはどのようなセキュリティ機能を提供しますか?

FastAPIは、OAuth2、JWT認証、依存性注入を含む強力なセキュリティ機能を提供し、開発者が最小限の労力で安全なアプリケーションを構築できるようにします。

IronPDFはクロスプラットフォームアプリケーションで使用できますか?

はい、IronPDFはWindows、Linux、およびmacOSをサポートするクロスプラットフォーム用に設計されています。これにより、異なるオペレーティングシステムで実行されるアプリケーションにPDF生成を統合しようとしている開発者にとって柔軟な選択肢となります。

FastAPIはどのように開発者の生産性を向上させますか?

FastAPIは自動APIドキュメント、コード補完、およびタイプチェックを提供することにより、開発者の生産性を向上させます。これにより広範な手動ドキュメント作成の必要性が減少し、開発プロセスの早い段階でエラーをキャッチするのに役立ちます。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。