モダンな AWS Lambda 用 API フレームワーク
Project description
lambapi
モダンな AWS Lambda 用 API フレームワーク
AWS Lambda で直感的でモダンな API を構築できる軽量フレームワーク。パスパラメータとクエリパラメータの自動注入、型変換、CORS サポートを標準提供。
✨ 主な特徴
- 🚀 直感的な記法 - デコレータベースのシンプルなルート定義
- 📋 自動パラメータ注入 - パス・クエリパラメータを関数引数として直接受け取り
- 🔄 型自動変換 -
int、float、bool、strの自動型変換 - 🛡️ バリデーション機能 - リクエストパラメータの自動バリデーションとエラーレスポンス
- 🌐 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)]}
🤝 コミュニティ
📄 ライセンス
MIT License - 詳細は LICENSE ファイルを参照
Project details
Release history Release notifications | RSS feed
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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
lambapi-0.2.2-py3-none-any.whl
(55.5 kB
view details)
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68fff8ede0f051b9e12959349eadc2412f096ca6255d900c9f1f9cbc7560ad06
|
|
| MD5 |
35fa45e0f521c950ca0b48285efaa4d8
|
|
| BLAKE2b-256 |
f4ac574197965762569c111db1a12804f2008d7ce18959bb9371b2e04e09662d
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7158bcc2cb4ef4d3ad6705e105a81da52aff189a6310c2f235e1366c0b09221a
|
|
| MD5 |
7d0eb55ca60689f51eed6a53ffeba187
|
|
| BLAKE2b-256 |
9d05ac1e85290d64c57284036f9ef8be3006854e0b0a0cf8759a1ed7112849b2
|