APIのバージョン管理とドキュメント化

FastAPI を使った AI のプロダクション環境へのデプロイ

Matt Eckerle

Software and Data Engineering Leader

なぜAPIバージョン管理が必要か?

 

  • APIエンドポイントをメニュー項目として提供
  • 既存ユーザーへの影響を回避
  • 新機能を求めるユーザーにも対応
  • 既存ユーザーに影響を与えず反復開発が可能

レストランの画像

FastAPI を使った AI のプロダクション環境へのデプロイ

クラウドAIジョブ用API

from pydantic import BaseModel

class AIJobV1(BaseModel):
    job_name: str
    data: bytes
class AIJobV1(BaseModel):
    job_name: str
    data: bytes
    config: dict

FastAPIのロゴ AIクラウド

FastAPI を使った AI のプロダクション環境へのデプロイ

バージョン管理されたエンドポイント

from pydantic import BaseModel

class AIJobV1(BaseModel):
    job_name: str
    data: bytes

class AIJobV2(BaseModel): job_name: str data: bytes config: dict
from fastapi import FastAPI

app = FastAPI()

@app.post("/v1/ai-job")
def ai_job_v1(job: AIJobV1):
    ...

@app.post("/v2/ai-job") def ai_job_v2(job: AIJobV2): ...
FastAPI を使った AI のプロダクション環境へのデプロイ

エンドポイントのバージョンを更新する理由

 

  • スキーマの破壊的変更
  • 基礎関数の変更
    • モデルコードの更新
    • モデル学習データの更新
    • 前処理・後処理の更新
FastAPI を使った AI のプロダクション環境へのデプロイ

オプションフィールドによる反復開発

 

  • バージョン更新が常に必要とは限らない
  • オプションフィールドにより、スキーマを壊さずデータを追加できる
from pydantic import BaseModel

class AIJobV1(BaseModel):
    job_name: str
    data: bytes


from typing import Optional class AIJobV1(BaseModel): job_name: str data: bytes config: Optional[dict]
FastAPI を使った AI のプロダクション環境へのデプロイ

SwaggerによるAPIドキュメント化

 

 

  • APIドキュメント化の標準ツール
    • エンドポイントとバージョンを管理
    • OpenAPI標準メタデータに基づく

 

Swaggerのロゴ

OpenAPIのロゴ

FastAPI を使った AI のプロダクション環境へのデプロイ

Swagger UI

Swagger URL Swagger UI

FastAPI を使った AI のプロダクション環境へのデプロイ

エンドポイントのSwagger UI

エンドポイント用FastAPI Swagger UI

FastAPI を使った AI のプロダクション環境へのデプロイ

FastAPIのdescriptionフィールドの活用

from fastapi import FastAPI

app = FastAPI(
    description="AI Job API"
)

説明ヘッダー付きFastAPI Swagger UI

FastAPI を使った AI のプロダクション環境へのデプロイ

では、練習しましょう!

FastAPI を使った AI のプロダクション環境へのデプロイ

Preparing Video For Download...