0
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?

FastAPIで「API仕様書いらず」のREST APIを最速で構築する方法

Posted at

こんにちわー

— 広告データ収集×差分分析プロジェクトで実際に刺さったポイントまとめ —

最近 Python で API を作る機会が増えたのですが、その中でも FastAPI が圧倒的に便利 だったので Qiita にまとめます。

特に、私がいま開発している 広告データ収集 × 差分分析 × 再生数ランキングツール のように、

  • 仕様が動く
  • API が後から増える
  • 外部サービス(YouTube / TikTok / Instagram / Facebook)と連携
  • 毎日差分処理(再生数 / CTR / クリエイティブ情報)
  • データ量が多い

といったプロジェクトでは FastAPI が“刺さりすぎる”フレームワークでした。

この記事では、
FastAPI を使って REST API を爆速構築しつつ、OpenAPI 仕様書まで自動生成される流れ
を、実務ベースの視点で紹介します。


なぜ FastAPI なのか?

■ API First が「できない現場」が多すぎる問題

業務ではよくあるケース:

  • 「まずデータを集めてみないと要件が決まらない」
  • 「スクレイピング・外部APIの仕様変更に追われてAPI設計どころじゃない」
  • 「とにかく動くプロトタイプがほしい」
  • 「クライアントの要望が毎週変わる」

= API First のドキュメントを書く暇がない。

でも、チーム開発では「仕様書がないと困る」と言われる…。

そこで FastAPI を使うと、

API を追加するだけで /docs と /openapi.json が自動更新される
ドキュメントを書く手間がゼロになる

という最高体験が手に入ります。


実務:広告データ分析ツールで FastAPI が刺さった瞬間

私が担当しているプロジェクトでは、
YouTube / TikTok / Instagram / Facebook の広告を毎日クロールし、以下を実装しています。

  • 各広告の再生数を 毎日蓄積して差分計算
  • クリエイティブを保存
  • 「今日もっとも伸びた広告ランキング」を生成
  • 外部API仕様が頻繁に変わる
  • 内部APIがどんどん増える

こういう API仕様が完成しないまま増殖し続けるプロジェクト では FastAPI が最高です。

なぜなら、

  • エンドポイントを追加 → swagger も openapi.json も自動更新
  • レスポンス型を Pydantic で定義 → バグ減少
  • uvicorn が軽くて反応が早い
  • 非同期処理 async/await が自然に使える
  • クライアントSDK を OpenAPI Generator で自動生成できる

というメリットがあるからです。
Screenshot_24.png


FastAPI の最小実装例

まずは本当にシンプルな REST API を例に。

■ インストール

pip install fastapi
pip install uvicorn

■ API 本体(api.py)

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

class Article(BaseModel):
    id: int
    title: str
    url: str
    year: int

articles = []

■ CRUD 実装

POST /articles

@app.post("/articles")
def create_article(article: Article):
    articles.append(article)
    return article

GET /articles

@app.get("/articles")
def get_articles():
    return articles

GET /articles/{id}

@app.get("/articles/{article_id}")
def get_article(article_id: int):
    for article in articles:
        if article.id == article_id:
            return article
    raise HTTPException(status_code=404, detail="記事が見つかりません")

■ 起動

uvicorn api:app --reload

/docs を開くと Swagger UI が自動生成されている

FastAPI の真骨頂。

http://localhost:8000/docs

にアクセスすると、Swagger UI が勝手に完成してます。

さらに

/openapi.json

を叩くと OpenAPI v3 仕様が自動生成済み。

これをそのまま OpenAPI Generator に流して、
TypeScript / Python / Go / Java の API クライアントを自動生成できます。


Heroku へのデプロイも超簡単

requirements.txt を生成し、

pip install pipreqs
pipreqs

Procfile を置けば、

web: uvicorn api:app --host=0.0.0.0 --port=${PORT}

あとは

heroku login
heroku create
git push heroku main

でデプロイ完了。

Python 初心者でも冗談抜きで 10 分で終わります。


実務で FastAPI を使うべきケース

広告データプロジェクト以外でも、FastAPI が向いているのはこんな場面です。

✔ とにかく開発スピードが重要

✔ スクレイピング + API連携 + 分析がセットの案件

✔ 細かい API が大量に増えるプロジェクト

✔ OpenAPI を手書きしたくない

✔ 非同期処理が多い

✔ プロトタイプ→PoC→本番の流れが前提

このあたりに一つでも当てはまるなら FastAPI は本当におすすめです。


まとめ

FastAPI を使うことで

  • 仕様書の更新負担がゼロに
  • 開発スピードが爆速に
  • 外部APIが多いプロジェクトに最適
  • Swagger と openapi.json が完全自動
  • Pydantic の型定義でバグが減る

というメリットが得られます。

広告データ分析ツールのような、
「仕様が先に固まらないタイプのプロダクト」 においては、
“FastAPI 一択” と感じました。


次のフェイズでは広告分析プロジェクトで使っている

  • 非同期処理(async/await)
  • バッチ処理
  • DB 設計(差分保存・日次ロールアップ)
  • キャッシュ戦略
  • 大量データ収集を FastAPI で捌く構成

などをまとめてみようと思います。

ちょっとでもお役に立ててたら嬉しいです☺️🌟

0
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
0
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?