1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python入門 #2】FastAPIでPOST→GETの最小API構成を作ってみた

Posted at

はじめに

この記事では、PythonのWebフレームワークとしてAPI開発をする際に使用されているFastAPIについて解説しています。
最小のAPI構成を作り、POSTでデータを送信し、GETで取得するところまでをデモソースにて体系的にFastAPIの基礎的な使い方を学習、理解できるようにしています。
FastAPIの基本構造を理解する一助になればと思います。
現在、Pythonの自己学習兼アプリ開発をしているのでアウトプットとして実施したことを記載していきます。 このQiitaシリーズでは、アプリ開発のプロセスを通して学んだ技術や実装の工夫を、実践ベースで共有してます。
前回→【Python入門 #1】Python仮想環境の整え方(venv/poetryの使い分け)

:busts_in_silhouette:本記事の対象者

  • FastAPI自体を学びたい方
  • FastAPIを使用した開発を実施する方
  • PythonでのAPI開発がはじめての方

開発環境

  • Python 3.13.2
  • VScode 1.101.2
  • FastAPI 0.116.0

FastAPIとは?

FastAPIは、Pythonで書かれた軽量かつ高性能なWeb APIフレームワークです。
基本的なメリットとして、高速な実行速度とSwagger UIによる自動生成(エンドポイントの確認が簡易的に実施できる)等もあり使用するうえでもメリットが大きいフレームワークになります。
また、実際に使用してみた感覚としてシンプルな構造をしており初心者にもある程度取り組みやすいと感じました。ただ開発の基本的な知識がない場合は、少し苦労する部分はあるかなと思います。
FastAPI公式ドキュメント

他のAPIフレームワークとの比較を参考として記載します。

フレームワーク 主な特徴 難易度
Flask 軽量で柔軟。構成は自由度が高いが手動が多い 初級〜中級
Django フルスタック。管理画面や認証機能が充実 中級〜上級
FastAPI(今回) 高速・型安全・非同期対応。自動ドキュメント付き 初級〜中級

FastAPIの構築手順

【前提条件】:仮想環境の構築とPythonのインストールが完了した状態にしてください。
また、今回のライブラリ管理はPoetryを使用しています。
詳細については、こちらを確認ください。
【Python入門 #1】Python仮想環境の整え方(venv/poetryの使い分け)

ライブラリ(FastAPI)のインストール

今回は、Poetryを利用しているため下記のコマンドにて実行しています。

powershell
poetry add fastapi uvicorn

venv + pipの場合
以下のコマンドでインストールします。

powershell
pip install fastapi uvicorn

※FastAPIと同時にインストールしているuvicormについてはASGI (Asynchronous Server Gateway Interface) に準拠したPython製のWebサーバーで、FastAPIを実行するために必要なアプリケーションサーバーです。この後、APIの実行結果を確認する際必要になります。

:writing_hand:最小のFastAPI構成

環境の準備ができたところで実際にFastAPI構成を使用して動きの確認を行っていきます。
基本的な構成として、POST(ユーザ操作によるデータ送信)→GET(送信されたデータへの応答)を実施するような動きになります。
開発をする上で、基本となる動きにもなるので一度実施しておくことで今後の開発にもプラスになるかなと思います。

【サンプルコード】

Pythonの仮想環境へmain.pyのソースファイルを作成し実際に試しています。

main.py
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()
data_store = []

class Item(BaseModel):
    name: str
    value: int

@app.post("/items")
def create_item(item: Item):
    data_store.append(item)
    return {"message": "追加しました"}

@app.get("/items")
def read_items():
    return data_store

それぞれの部分について内容を説明していきます。

main.py
from fastapi import FastAPI
from pydantic import BaseModel

from fastapi import FastAPI: アプリ本体を構築するためのクラスを参照しています。
from pydantic import BaseModel: リクエストのデータ型(バリデーション含む)を定義するためのPydanticの基底クラスを参照しています。

main.py
app = FastAPI()

FastAPIインスタンスを生成。この app がアプリケーションのエントリーポイントになります。

main.py
data_store = []

一時的なメモリ上のデータ保存リストになっており簡易的にDBのような扱いになります。

main.py
class Item(BaseModel):
    name: str
    value: int

postやgetを実施した際にリクエストで受け取るデータ構造(バリデーション付き)を定義しています。

main.py
@app.post("/items")
def create_item(item: Item):
    data_store.append(item)
    return {"message": "追加しました"}

/items にPOSTリクエストが送られると呼び出される関数です。
受け取った item を data_store に追加し、「追加しました」というメッセージを返すします。

main.py
@app.get("/items")
def read_items():
    return data_store

/items にGETリクエストが送られると、今までにPOSTされたすべてのデータをdata_store(リスト)として返します。

処理の流れ

  • 1.POST /items にデータを送信(例:{"name": "test", "value": 123})
  • 2.create_item 関数が呼ばれて data_store に保存
  • 3.GET /items を呼ぶと、保存された全データを返す

実際の挙動を確認

実際のAPIの動きを画面表示で確認することができます。
それが、先ほどFastAPIと一緒にインストールしたuvicornです。
まずは、起動させる必要があるため下記のコマンドを実行してください。

uvicorn main:app --reload

実行されるとVScodeのターミナル上にINFO:~の列がいくつか表示されるようになります。
実行の確認ができたらURLを検索します。
http://127.0.0.1:8000/docs
※FastAPIの特徴の一つである、Swagger UIが/docsに自動生成されます。
エンドポイントやリクエストボディの構造をコードから生成してくれるので、テストや共同開発に大変有用です。

1. /docsをURL検索

http://127.0.0.1:8000/docs の検索に成功すると下記の画像のような画面が表示されます。
この画面上でAPIの動作について視覚的に確認することが可能になります。
スクリーンショット 2025-07-14 012847.png

2. POSTでデータをサーバ側で送信する

まずは、下記の矢印にあるドロップダウンリストを表示します。
スクリーンショット 2025-07-14 012847.png
開いた状態で「Try it out」ボタンを押下します。
スクリーンショット 2025-07-14 013850.png
ParametersタブのEdit valueに記載されいるnameにはstring、valueにはintとして任意の文字を入力します。
スクリーンショット 2025-07-14 014208.png
入力後は青色ボタンの「Execute」を実行しデータをサーバ側へ送信します。
成功するとサンプルコードのPOSTにあるreturn {"message": "追加しました"}がサーバ側から返されてきます。そのデータは下記の位置に記載されています。
スクリーンショット 2025-07-14 014741.png

3. GETでデータを受信する

次にPOSTで先ほどサーバ側へ送ったデータを画面側で取得し表示します。
まずは、下記の矢印にあるドロップダウンリストを表示します。
スクリーンショット 2025-07-14 015347.png
その後、青色ボタンの「Execute」を押下します。
image.png
実行すると下記のようにPOSTでサーバ側へ送信したデータを取得できます。
スクリーンショット 2025-07-14 015633.png

4. 同じ手順2~3を再実行した場合

データの状況がわかりやすいように手順2~3を再度実施しました。
下記のように"value":6が追加されていると思います。
スクリーンショット 2025-07-14 015759.png
このように、POSTでサーバ側へ送信しデータをdata_store = []へ追加再度データを受信し表示させるとこのような形で取得することが可能になります。

まとめ

今回は、POST→GETの最小API構成で基本的な動きを確認しました。実際の開発でもこのように画面とサーバ側へデータのやり取りを頻繁に行うため色々と応用を聞かせて行けるかなと思います。
また、FastAPIの書き方もそこまで難しくはないため初心者にも扱いやすいライブラリに感じました。
ぜひ、実際の開発や勉強の一助として試しに動かして使い倒してください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?