こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- FastAPIの概要・できることについて詳しく知りたい
- PythonとFastAPIを用いてAPIを実装する方法が知りたい
【Python】FastAPIとは
FastAPIとは、Python3.6以降でAPIを構築するためのWebフレームワークです。
Pythonの人気なWebフレームワークにはDjangoやFlaskがありますが、近年FastAPIも非常に注目されています。FastAPIは、直感的でシンプルな構文からなり、新規開発を迅速に行うことができます。
【参考】FastAPI学習におすすめの教材
UdemyではFast APIの学習に適した動画教材が多数配信されています。Fast APIの基礎をはじめ、データベースやフロントアプリ(ReactやAngular等)連携という応用に至るまで幅広く学ぶことができます。
FastAPIの特徴
FastAPIの特徴として以下が挙げられます。
高速処理
FastAPIは、高性能なASGI(Asynchronous Server Gateway Interface)サーバーを使用して非常に高速なリクエスト処理を実現します。また非同期処理によるリクエストの同時処理も可能です。
型ヒントのサポート
Pythonの型ヒントを活用して、リクエストとレスポンスのデータ型の宣言ができます。これにより、入力値の検証や自動的なAPIドキュメンテーション生成が行われ、型ヒントに基づいた検証も可能です。
自動的なAPIドキュメンテーション生成
FastAPIは、APIのエンドポイント、リクエスト/レスポンスのデータ型、パラメータ、エラーハンドリングなどの情報を自動的にドキュメント化できます。
Swagger UI(Rest API開発フォーマット)と連携し、視覚的なAPIドキュメントが生成できます。
シンプルでPythonicな構文
FastAPIはPythonicな構文を採用しており、シンプルなコードでAPIを構築できます。関数のデコレータを使用してルーティングやリクエストハンドリングを行うため、学習曲線が緩やかです。
セキュリティ機能
FastAPIは、OAuth2、JWT(JSON Web Tokens)、CORS(Cross-Origin Resource Sharing)などのセキュリティ機能を組み込んでいます。安全なAPIを構築するための機能が豊富に提供されています。
【環境構築】Pythonライブラリのインストール
FastAPI利用に際して必要なPythonライブラリをインストールしましょう。
fastapi
FastAPIのアプリケーション実装に際して必要となるライブラリです。
pip install fastapi
uvicorn
サーバーとして稼働するためのライブラリです。
pip install "uvicorn[standard]"
【Python】FastAPI ひな型コードの実装
はじめに、最もシンプルなFastAPIコードを記述し、APIの実装イメージを確かめてみましょう。
Pythonプログラム作成
main.py
というPythonファイルを作成し、以下コードを記述します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def index():
return {"message":"hello world"}
まず、FastAPIのインスタンスapp
を作成します。続いて@app
にGETメソッドを割り当て、get("url")
にアクセスがあった場合、関数index()
を実行するという仕組みとします。
また、関数index()
直前には同期処理sync
または非同期処理async
の指定ができます。
ローカルサーバーを起動 uvicorn
前述で作成したPythonプログラムを実行し、ローカルサーバー上でAPIの稼働確認を行います。
コマンド
ターミナル(MacOS)またはコマンドプロンプト(Windows)を起動し、前述で作成したmain.py
と同じディレクトリに移動します。そして、以下のコマンドを実行しましょう。
uvicorn main:app --reload
上記コマンドは、main.py
のapp
インスタンス起動を意味します。--reload
は、コードを書き換えた際も再起動を自動でしてくれるオプションです。実行後、次のような出力結果が得られます。
INFO: Will watch for changes in these directories: ['/Users/xxx/xxx/FastAPI']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [6053] using WatchFiles
INFO: Started server process [6055]
INFO: Waiting for application startup.
INFO: Application startup complete.
ブラウザ起動
uvicorn実行で得た出力記載のローカルサーバーのパス(http://127.0.0.1:8000)にアクセスすると、上図のように、Pythonファイルに記載した関数index()
の実行結果が確認できます。
SwaggerUIを用いたAPI仕様確認
FastAPIには、APIドキュメンテーションの自動生成という便利な機能があります。
実装したAPIは、http://127.0.0.1:8000/docsにアクセスすることで確認できます。
【Python】FastAPIのパスパラメータ
パスパラメータ(Path Parameters)とは、FastAPIにおいて、URLの一部として情報を渡すための機能です。URL内の特定のセクションに値を埋め込むことで、APIエンドポイントの動作を制御したり、特定のデータを取得できるようになります。
パスパラメータの例
例えば、以下のようなURLがあるとします。
/content/{content_id}
このURLの{content_id}
の部分がパスパラメータです。この部分に具体的な値を埋め込むことで、特定のコンテンツ情報を取得できます。
Pythonプログラム作成
FastAPIでは、パスパラメータを関数の引数として受け取ることができます。main.py
にパスパラメータを用いた関数を記述し、実際に動作確認してみましょう。
from fastapi import FastAPI
# FastAPIインスタンス
app = FastAPI()
# パスパラメータを用いた関数作成
@app.get("/user/{user_name}")
async def user(user_name: str) -> dict:
return {"UserName":user_name}
稼働確認
http://127.0.0.1:8000/user/TANAKA
uvicorn main:app --reload
でローカルサーバーを起動し、APIの稼働確認を行います。
上記パスでアクセスすると、UserName
にTANAKA
という値が取得できます。
【Python】FastAPIのパスパラメータ
クエリパラメータ(Query Parameters)とは、URLのクエリストリングとして渡されるキーと値のペアであり、APIエンドポイントに追加の情報を提供するために使用されます。
クエリパラメータの例
クエリパラメータは、APIエンドポイントのURLの後に?
を付け、その後にキーと値のペアをkey=value
の形式で続けて記述します。複数のクエリパラメータを指定する場合は、&
を使ってキーと値のペアを区切ります。
例えば、以下のようなURLがあるとします。
/users?name=John&age=30
このURLのname
とage
がそれぞれクエリパラメータに該当します。
Pythonプログラム作成
FastAPIでは、クエリパラメータを関数の引数として受け取ることができます。main.py
にクエリパラメータを用いた関数を記述し、実際に動作確認してみましょう。
from fastapi import FastAPI
# FastAPIインスタンス
app = FastAPI()
# クエリパラメータを用いた関数作成
@app.get("/user/{user_name}")
async def user(user_name: str, age:int = None, address: str = None) -> dict:
# 出力結果
result = {
"UserName": user_name,
"Age": age,
"Address": address,
}
return result
上記の例では、クエリパラメータとしてage
およびaddress
を設定しました。クエリパラメータは@app.get()
のパスの固定部分ではないため、オプショナルとしたり、デフォルト値を持たせることができます。
稼働確認
http://127.0.0.1:8000/user/Tanaka?age=30&address=Tokyo
uvicorn main:app --reload
でローカルサーバーを起動し、APIの稼働確認を行います。
上記パスでアクセスすると、クエリパラメータとして指定した値が取得できます。
【Python】FastAPIのリクエストボディ
リクエストボディとは、クライアントからAPIへ送られるデータです。レスポンスボディとは、APIがクライアントに送るデータを意味します。
POSTメソッド等を用いてクライアントからAPIにデータ送信する場合、リクエストボディ (request body) に指定します。以下、Pythonプログラムを用いた実装例を確認しましょう。
Pythonプログラム作成
FastAPIでリクエストボディを宣言する場合、Pydantic(BaseModel)
というデータ処理モデルを用います。
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional
# =============================================================
# リクエストボディ
# =============================================================
# BaseModelを継承したクラスとしてデータモデルを宣言
class Item(BaseModel):
name: str
price: int
tax: Optional[float] = None
# =============================================================
# API
# =============================================================
# FastAPIインスタンス
app = FastAPI()
# 関数作成
@app.post("/item/")
async def calculate_item(item: Item):
result = {
"ItemName":item.name,
"Message":f'税込価格{int(item.price * item.tax)}円です。'
}
return result
稼働確認
http://127.0.0.1:8000/docs
自動ドキュメントとして生成されたスキーマを用いて前述で実装したAPIの稼働確認を行います。
ブラウザを開き、上記リンクにアクセスしましょう。
POSTメソッドの稼働確認は、対象APIの右上Try it out
から実施できます。
上図のように、レスポンスボディを任意の値に書き換え、Execute
押下します。
正常に処理が実行されると、HTTPレスポンス200とレスポンスボディが併せて確認できます。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら