このプロジェクトについて

QueryAPIGateは、データベースに対してSQLを実行し、結果をJSON、NDJSON、XML、YAML、CSV、TSV、またはExcelとして返す、セルフホスト型の単一Flaskサービスです。クエリを一度保存すれば、コントローラ、リポジトリ層、ページネーション、認証、シリアライズの定型コードを書くことなく、型付きでインジェクション安全なパラメータと実行履歴を備えたバージョン管理されたRESTエンドポイントになります。 マルチデータベース対応には、MySQL、PostgreSQL、ClickHouse、SQLite、H2、DuckDB用のネイティブドライバに加え、ドライバjarを持つもの(Oracle、SQL Server、DB2、Snowflakeなど)向けの汎用JDBCが含まれます。同じSQLガード、プーリング、パラメータバインディング、出力フォーマットが、基盤となるデータベースに関係なく適用されます。 セキュリティとアクセス制御の機能: - SHA-256でハッシュ化して保存されるAPIキー認証。 - データベース接続パスワードはQUERYAPIGATE_SECRET_KEYにより保存時に暗号化され、接続を開くときのみメモリ内で復号されます。 - スコープ付きAPIキー: キーを特定の接続や保存済みクエリの許可リストに制限できます。明示的に有効化しない限り書き込みアクセスは無効です。 - コレクション: 保存済みクエリをグループ化し、キーにグループ全体を付与できます。クエリを移動すると、どのキーがアクセスを得るか失うかをプレビューできます。 - 名前付き権限ロール: 作成時にキーへコピーされる再利用可能なテンプレート。 - APIキーの有効期限、失効、キーごとのレート制限、IP許可リスト(CIDR範囲)。 - SQLガードはデフォルトで単一のSELECT/WITH/SHOW/DESCRIBE/EXPLAIN文のみを許可し、バインドされた:nameパラメータを使用します。 保存済みクエリはバージョン管理されます。同じ名前で保存すると上書きではなく新しいバージョンが作成され、?version=1で以前のものを引き続き実行できます。パラメータは型、デフォルト、必須/任意、enum、数値範囲、長さ、パターンを宣言でき、不正な入力はデータベースに到達する前にフィールドごとの400で拒否されます。 レスポンスフォーマット(JSON、NDJSON、XML、YAML、CSV、TSV、XLSX)は、?format=でリクエストごとに選択できます。ページネーションは?pageと?page_sizeを使用し、X-Has-Moreヘッダーを伴います。完全なエクスポートでは、?stream=trueが結果全体をバッファリングせずにデータベースカーソルからストリーミングします。これはMySQL、PostgreSQL、ClickHouseで1,000,000行の結果とフラットなサーバーメモリで検証済みです。CLIコマンド(queryapigate export)は同じストリーミング経路をラップし、cron/systemd/Kubernetes CronJobで使用できます。 クエリキャッシュはcache_ttl、Cache-Control、ETag、条件付きリクエスト、304 Not Modified、X-Cache HIT/MISSヘッダーをサポートします。書き込みには決して適用されません。レート制限は、サーバー全体のIPキー付き制限と、任意の独立したキーごとの制限を組み合わせます。 可観測性には、リクエストIDでタグ付けされた構造化JSONログ、クエリごとの実行時間、スロークエリ警告、および/metricsでのPrometheusメトリクスが含まれ、リクエスト/クエリ数、レイテンシ、接続プール占有率、レート制限拒否をカバーします。履歴メトリクス用にバンドルされたGrafanaダッシュボードが利用可能です。 OpenAPI 3.0は/openapi.jsonで生成され(CIで公式バリデータに対して検証済み)、すべての保存済みクエリが型付きエンドポイントになります。/docsはSwagger UIを提供し、各キーが到達できる範囲にフィルタリングされます。 /uiの組み込み管理UIは、接続管理、構文ハイライトとスキーマ閲覧を備えたSQLエディタ、クエリ実行/プレビュー、EXPLAIN、保存済みクエリとバージョン管理、APIキー管理、管理変更の監査ログ、クエリごとの実行履歴、折りたたみ可能なJSONツリーによるレスポンス検査、数値結果の簡易棒グラフ、ワンクリックの「copy as curl」/「copy as TSV」をカバーします。読み取り専用のSettings画面は、すべての環境変数とその有効値を表示し、シークレットは設定済みかどうかのみを報告します。 インストールはpipとオプションのドライバextras(mysql、postgres、clickhouse、h2、duckdb、all、encryption)で行います。SQLiteとDuckDBは外部ランタイムを必要としません。H2と汎用JDBCはJavaランタイムを必要とします。Dockerもサポートされています。コマンド`queryapigate examples load`は、4つの実例シナリオ(レポーティングAPI、ダッシュボードデータ、ストリーミングエクスポート、パートナー統合)をコレクション、クエリ、ロール、すぐに使えるAPIキーとしてインストールします。 テストには、ユニットテスト、CIでの実際のMySQL、PostgreSQL、ClickHouse、H2サーバーに対する統合テスト、DuckDB統合テスト、HypothesisによるSQLガードファズテスト、mypy静的型チェック、ruffリンティング、および毎プッシュでのCIが含まれます。プロジェクトはFSL-1.1-MITでライセンスされ、Python 3.9+を必要とします。