Skip to main content

モダンな AWS Lambda 用 API フレームワーク

Project description

lambapi

モダンな AWS Lambda 用 API フレームワーク

Python Version License

AWS Lambda で直感的でモダンな API を構築できる軽量フレームワーク。パスパラメータとクエリパラメータの自動注入、型変換、CORS サポートを標準提供。

✨ 主な特徴

  • 🚀 直感的な記法 - デコレータベースのシンプルなルート定義
  • 📋 自動パラメータ注入 - パス・クエリパラメータを関数引数として直接受け取り
  • 🔄 型自動変換 - intfloatboolstr の自動型変換
  • 🛡️ バリデーション機能 - リクエストパラメータの自動バリデーションとエラーレスポンス
  • 🌐 CORS サポート - プリフライトリクエストの自動処理
  • 🔐 認証システム - DynamoDB + JWT による完全な認証・認可機能
  • 🛡️ 構造化エラーハンドリング - 本番運用に適した統一エラーレスポンス
  • 📦 軽量 - 標準ライブラリのみ、外部依存なし(認証機能は別途)
  • 🔒 型安全 - 完全な型ヒント対応

🚀 クイックスタート

インストール

pip install lambapi

基本的な使用例

from lambapi import API, create_lambda_handler, Query, Path, Body
from dataclasses import dataclass
from typing import Optional

@dataclass
class CreateUserRequest:
    name: str
    email: str
    age: Optional[int] = None

def create_app(event, context):
    app = API(event, context)

    @app.get("/")
    def hello():
        return {"message": "Hello, lambapi!"}

    @app.get("/search")
    def search(
        query: str = Query(..., description="検索クエリ", min_length=1),
        limit: int = Query(10, ge=1, le=100, description="結果数"),
        category: str = Query("all", description="カテゴリー")
    ):
        return {"query": query, "limit": limit, "category": category}

    @app.post("/users")
    def create_user(user_data: CreateUserRequest = Body(...)):
        return {
            "message": "ユーザーが作成されました",
            "user": {"name": user_data.name, "email": user_data.email}
        }

    return app

lambda_handler = create_lambda_handler(create_app)

ローカル開発

# 新しいプロジェクトを作成
lambapi create my-api --template basic

# ローカルサーバーを起動(ホットリロード付き)
lambapi serve app

# ブラウザで確認
curl http://localhost:8000/

📚 ドキュメント

完全なドキュメントは https://sskyh0208.github.io/lambapi/ で公開されています。

💡 なぜ lambapi?

従来の問題

# 従来の Lambda ハンドラー(煩雑)
def lambda_handler(event, context):
    method = event['httpMethod']
    path = event['path']
    query_params = event.get('queryStringParameters', {}) or {}
    limit = int(query_params.get('limit', 10))  # 手動型変換

    if method == 'GET' and path == '/users':
        # 複雑なルーティング...
        pass

    return {
        'statusCode': 200,
        'headers': {'Content-Type': 'application/json'},
        'body': json.dumps({'data': 'result'})
    }

lambapi なら

# lambapi 版(シンプル)
@app.get("/users")
def get_users(limit: int):
    return {"users": [f"user-{i}" for i in range(limit)]}

🤝 コミュニティ

  • 📁 GitHub - ソースコード・ Issues ・ Discussions
  • 📦 PyPI - パッケージダウンロード
  • 📚 ドキュメント - 完全な使用ガイド

📄 ライセンス

MIT License - 詳細は LICENSE ファイルを参照

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lambapi-0.2.2.tar.gz (97.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lambapi-0.2.2-py3-none-any.whl (55.5 kB view details)

Uploaded Python 3

File details

Details for the file lambapi-0.2.2.tar.gz.

File metadata

  • Download URL: lambapi-0.2.2.tar.gz
  • Upload date:
  • Size: 97.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.13.1 Linux/6.11.0-1018-azure

File hashes

Hashes for lambapi-0.2.2.tar.gz
Algorithm Hash digest
SHA256 68fff8ede0f051b9e12959349eadc2412f096ca6255d900c9f1f9cbc7560ad06
MD5 35fa45e0f521c950ca0b48285efaa4d8
BLAKE2b-256 f4ac574197965762569c111db1a12804f2008d7ce18959bb9371b2e04e09662d

See more details on using hashes here.

File details

Details for the file lambapi-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: lambapi-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 55.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.13.1 Linux/6.11.0-1018-azure

File hashes

Hashes for lambapi-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7158bcc2cb4ef4d3ad6705e105a81da52aff189a6310c2f235e1366c0b09221a
MD5 7d0eb55ca60689f51eed6a53ffeba187
BLAKE2b-256 9d05ac1e85290d64c57284036f9ef8be3006854e0b0a0cf8759a1ed7112849b2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page