Pythonで非同期APIを作る方法を完全解説!asyncioとFastAPIで作る高速Web API入門
生徒
「PythonでWeb APIを作れるって聞いたんですが、非同期APIってなんですか?」
先生
「いいところに気が付きましたね。PythonではFastAPIというフレームワークと、asyncioという非同期処理の仕組みを使うことで、高速な非同期APIを作ることができます。」
生徒
「非同期っていう言葉が難しそうです。普通のプログラムと何が違うんですか?」
先生
「簡単に言うと、処理を待っている間に別の仕事を同時に進められる仕組みです。Web APIではアクセスが多いので、非同期処理を使うととても効率が良くなります。」
生徒
「Python初心者でも作れるんですか?」
先生
「もちろんです。Pythonの基本を理解しながら、FastAPIとasyncioを使った非同期APIの作り方を順番に解説していきましょう。」
1. Pythonの非同期APIとは?Web APIの基本を初心者向けに解説
Pythonで作る非同期APIとは、複数の処理を効率よく同時に実行できるWeb APIのことです。Web APIとは、インターネットを通してプログラム同士がデータをやり取りする仕組みのことを指します。
例えば天気アプリや地図アプリなどは、インターネット上のAPIからデータを取得しています。このような仕組みを作るのがAPI開発です。
普通のプログラムは「順番に一つずつ処理」をします。しかしWebサービスでは、同時にたくさんのアクセスが来るため、順番処理だけでは時間がかかります。
そこで使われるのが非同期処理です。これは「待ち時間の間に別の仕事をする」仕組みです。
例えるなら、レストランの店員の仕事です。
- 同期処理:料理が完成するまで何もしない
- 非同期処理:料理を待つ間に別のお客さんの注文を取る
このようにして効率よく処理を行うのがPythonの非同期APIです。
2. Pythonのasyncioとは?非同期処理の基本
asyncioはPythonに標準で用意されている非同期プログラミングのライブラリです。
ライブラリとは、便利な機能がまとめられたプログラム部品のことです。
asyncioでは主に次のキーワードを使います。
async:非同期関数を作るawait:処理が終わるまで待つ
まずは簡単なasyncioの例を見てみましょう。
import asyncio
async def hello():
print("処理開始")
await asyncio.sleep(2)
print("2秒後に処理終了")
asyncio.run(hello())
このプログラムではasyncio.sleep()を使って2秒待っています。
処理開始
(2秒待つ)
2秒後に処理終了
このように、待ち時間がある処理でも他の処理を進めることができるのがasyncioの特徴です。
3. FastAPIとは?PythonでAPI開発する人気フレームワーク
FastAPIはPythonでWeb APIを作るためのフレームワークです。
フレームワークとは、アプリ開発を簡単にするための「開発の土台」のようなものです。
FastAPIは次の特徴があります。
- Pythonの非同期処理に対応
- API開発がとても簡単
- 処理速度が非常に速い
- 自動でAPIドキュメントが作られる
まずはFastAPIをインストールします。
pip install fastapi
pip install uvicorn
uvicornはFastAPIを実行するためのサーバープログラムです。
サーバーとは、インターネットからのリクエストを受け取るコンピューターの仕組みのことです。
4. Pythonで最も簡単なFastAPIのAPIを作る
それではPythonで簡単なAPIを作ってみましょう。
次のコードは「Hello」というメッセージを返すシンプルなAPIです。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello FastAPI"}
このプログラムを実行するには次のコマンドを使います。
uvicorn main:app --reload
ブラウザで次のURLを開くと結果が表示されます。
http://127.0.0.1:8000
{"message":"Hello FastAPI"}
このようにPythonでは数行のコードだけでAPIを作ることができます。
5. FastAPIでasyncを使った非同期APIを作る方法
FastAPIではasyncを使うことで簡単に非同期APIを作ることができます。
次の例では非同期処理を使ってAPIを作っています。
from fastapi import FastAPI
import asyncio
app = FastAPI()
@app.get("/async")
async def async_api():
await asyncio.sleep(2)
return {"message": "非同期APIの処理が完了しました"}
ここで重要なのがasync defです。
これは非同期関数を作るための書き方です。
さらにawaitを使うことで、処理が終わるまで待つことができます。
FastAPIは内部でasyncioを使っているため、このような非同期処理がとても簡単に書けるのが特徴です。
6. 複数の非同期処理を同時に実行するPythonプログラム
非同期処理の最大のメリットは、複数の処理を同時に進められることです。
次のコードでは2つの処理を同時に実行しています。
import asyncio
async def task1():
await asyncio.sleep(2)
print("タスク1完了")
async def task2():
await asyncio.sleep(1)
print("タスク2完了")
async def main():
await asyncio.gather(task1(), task2())
asyncio.run(main())
タスク2完了
タスク1完了
asyncio.gather()を使うと、複数の非同期処理を同時に実行できます。
Web APIでは、データベースアクセスや外部API通信などの待ち時間が多い処理があります。そのような処理を効率よく動かすために非同期処理が使われています。
まとめ
Pythonで作る非同期APIの重要ポイントを振り返る
この記事では、Pythonを使って高速なWeb APIを開発する方法として、非同期処理の基本からFastAPIを使ったAPI開発までを順番に解説しました。現代のWebサービスでは、同時に多くのユーザーがアクセスするため、効率よく処理を行う仕組みがとても重要になります。
その中でも特に重要なのがPythonの非同期処理です。非同期処理とは、プログラムの処理を一つずつ順番に待つのではなく、待ち時間の間に別の処理を進めることで、全体の処理速度を大きく向上させる仕組みです。
Web API開発では、外部APIの呼び出し、データベースアクセス、ファイル処理など、待ち時間が発生する処理が多くあります。こうした処理を効率よく扱うために、Pythonではasyncioという非同期プログラミングライブラリが用意されています。
asyncioを使うことで、Pythonプログラムの中で非同期関数を作ることができ、asyncとawaitというキーワードを使って処理を管理することができます。この仕組みによって、複数の処理を効率よく同時に進めることが可能になります。
さらに、PythonでWeb APIを開発する場合にはFastAPIというフレームワークを使うことで、非常にシンプルなコードで高性能なAPIを作ることができます。FastAPIはPythonの非同期処理と相性が良く、asyncioと組み合わせることで、高速でスケーラブルなWeb APIを簡単に構築できます。
FastAPIの大きな特徴として、少ないコードでAPIエンドポイントを作れること、非同期処理を自然に書けること、自動でAPIドキュメントを生成してくれることなどがあります。そのため、Python初心者からプロの開発者まで幅広く利用されている人気のフレームワークです。
実際のWebサービス開発では、以下のような場面で非同期APIが活躍します。
- 大量アクセスがあるWebサービスのバックエンドAPI
- データベースと連携するWebアプリケーション
- 外部APIと通信するマイクロサービス
- リアルタイムデータを扱うWebシステム
これらのシステムでは、処理を順番に実行する同期処理だけではパフォーマンスが不足する場合があります。そのため、asyncioを使った非同期処理やFastAPIによる非同期API設計が重要になります。
非同期API開発のサンプルプログラム
最後に、PythonのFastAPIとasyncioを組み合わせたシンプルな非同期APIのサンプルプログラムをもう一度整理してみましょう。このコードでは、複数の処理を非同期で実行しながらAPIとしてレスポンスを返します。
from fastapi import FastAPI
import asyncio
app = FastAPI()
async def fetch_data():
await asyncio.sleep(2)
return {"data": "非同期データ取得完了"}
@app.get("/data")
async def get_data():
result = await fetch_data()
return result
このプログラムでは、fetch_data()という非同期関数を作り、APIエンドポイントから呼び出しています。asyncとawaitを使うことで、待ち時間のある処理でも効率よく実行できるようになります。
次に、複数の処理を同時に実行する例です。asyncioのgather()を使うことで、複数の非同期タスクを並行して処理できます。
import asyncio
async def api_call_1():
await asyncio.sleep(2)
return "API1完了"
async def api_call_2():
await asyncio.sleep(1)
return "API2完了"
async def main():
results = await asyncio.gather(
api_call_1(),
api_call_2()
)
print(results)
asyncio.run(main())
このようにPythonの非同期プログラミングを理解すると、Web APIの処理効率を大きく向上させることができます。特にFastAPIはPythonで高速APIを開発するための強力なフレームワークであり、asyncioと組み合わせることでスケーラブルなWebアプリケーションを作ることが可能になります。
PythonのWeb開発をこれから学びたい人にとって、FastAPIとasyncioは非常に重要な技術です。非同期処理の基本を理解しながらAPI開発を学ぶことで、実際のWebサービス開発にも応用できる実践的なスキルを身につけることができるでしょう。
生徒
「今回の記事を読んで、PythonでWeb APIが作れることが分かりました。でも非同期処理ってやっぱり少し難しそうですね。」
先生
「最初は難しく感じるかもしれませんが、基本はとてもシンプルです。Pythonではasyncとawaitを覚えるだけで非同期処理を書けるようになります。」
生徒
「なるほど。待ち時間の間に別の処理を進めるという仕組みなんですね。」
先生
「その通りです。特にWeb APIではデータベース通信や外部サービスの呼び出しなど、待ち時間が多い処理があります。そういう場面で非同期処理はとても効果的です。」
生徒
「FastAPIを使うと、その非同期APIを簡単に作れるんですね。」
先生
「そうです。FastAPIはPythonの非同期処理ととても相性が良いフレームワークです。少ないコードで高速なAPIを作れるので、最近は多くの開発現場で使われています。」
生徒
「PythonでWebサービスを作るなら、FastAPIとasyncioは覚えておいた方が良さそうですね。」
先生
「その通りです。Pythonの非同期処理を理解してFastAPIでAPI開発ができるようになると、実践的なWebバックエンド開発のスキルが身につきます。ぜひ実際にコードを書きながら練習してみてください。」