इस प्रोजेक्ट के बारे में
QueryAPIGate एक स्व-होस्टेड, एकल Flask सेवा है जो आपके डेटाबेस पर SQL चलाती है और परिणाम JSON, NDJSON, XML, YAML, CSV, TSV या Excel के रूप में लौटाती है। एक बार क्वेरी सहेजें और वह typed, injection-safe parameters और run history वाला versioned REST endpoint बन जाती है, बिना controllers, repository layers, pagination, auth या serialization boilerplate लिखे।
Multi-database समर्थन में MySQL, PostgreSQL, ClickHouse, SQLite, H2 और DuckDB के लिए native drivers शामिल हैं, साथ ही driver jar वाली किसी भी चीज़ (Oracle, SQL Server, DB2, Snowflake, आदि) के लिए generic JDBC। वही SQL guard, pooling, parameter binding और output formats अंतर्निहित डेटाबेस की परवाह किए बिना लागू होते हैं।
सुरक्षा और access control सुविधाएँ:
- SHA-256 hashed key storage के साथ API key authentication।
- Database connection passwords QUERYAPIGATE_SECRET_KEY के माध्यम से at rest encrypted रहते हैं, और connection खुलने पर केवल memory में decrypt होते हैं।
- Scoped API keys: किसी key को विशिष्ट connections और/या saved queries की allow-list तक सीमित करें; write access तब तक बंद रहता है जब तक स्पष्ट रूप से सक्षम न किया जाए।
- Collections: saved queries को समूहित करें और किसी key को पूरा समूह प्रदान करें; क्वेरी को स्थानांतरित करने पर पूर्वावलोकन मिलता है कि कौन-सी keys access प्राप्त या खो देती हैं।
- Named permission roles: निर्माण के समय key पर कॉपी किए जाने वाले पुन: प्रयोज्य templates।
- API key expiry, revocation, per-key rate limiting और IP allowlisting (CIDR ranges)।
- SQL guard जो डिफ़ॉल्ट रूप से केवल single SELECT/WITH/SHOW/DESCRIBE/EXPLAIN statements की अनुमति देता है, bound :name parameters के साथ।
Saved queries versioned होती हैं—उसी नाम से सहेजने पर पुरानी को overwrite करने के बजाय नया version बनता है, और ?version=1 अभी भी पिछला version चलाता है। Parameters type, default, required/optional, enum, numeric range, length और pattern घोषित कर सकते हैं; अमान्य input डेटाबेस तक पहुँचने से पहले field-by-field 400 के साथ अस्वीकार कर दिया जाता है।
Response formats (JSON, NDJSON, XML, YAML, CSV, TSV, XLSX) प्रति request ?format= के माध्यम से चुने जा सकते हैं। Pagination ?page और ?page_size का उपयोग करता है, साथ में X-Has-More header। पूर्ण exports के लिए, ?stream=true buffer करने के बजाय database cursor से पूरा परिणाम stream करता है—MySQL, PostgreSQL और ClickHouse पर 1,000,000-row परिणामों और flat server memory के साथ सत्यापित। एक CLI command (queryapigate export) cron/systemd/Kubernetes CronJob उपयोग के लिए उसी streaming path को wrap करता है।
Query caching cache_ttl, Cache-Control, ETag, conditional requests, 304 Not Modified और X-Cache HIT/MISS header का समर्थन करती है; writes पर कभी लागू नहीं होती। Rate limiting एक server-wide IP-keyed limit को वैकल्पिक स्वतंत्र per-key limit के साथ जोड़ती है।
Observability में request IDs के साथ tagged structured JSON logs, per-query execution timing, slow-query warnings और /metrics पर Prometheus metrics शामिल हैं जो request/query counts, latencies, connection-pool occupancy और rate-limit rejections को कवर करते हैं। ऐतिहासिक metrics के लिए एक bundled Grafana dashboard उपलब्ध है।
OpenAPI 3.0 /openapi.json पर generate होता है (CI में आधिकारिक validator के विरुद्ध validated) जिसमें प्रत्येक saved query एक typed endpoint के रूप में होती है; /docs Swagger UI serve करता है, जो प्रत्येक key क्या पहुँच सकती है उसके अनुसार filtered होता है।
/ui पर अंतर्निहित admin UI connection management, syntax highlighting और schema browsing वाला SQL editor, query execution/preview, EXPLAIN, saved-query और version management, API key management, administrative changes का audit log, per-query execution history, collapsible JSON trees के साथ response inspection, numeric परिणामों के लिए quick bar charts, और one-click "copy as curl"/"copy as TSV" को कवर करता है। एक read-only Settings screen प्रत्येक environment variable और उसका effective value दिखाती है, जिसमें secrets केवल configured या नहीं के रूप में बताए जाते हैं।
Installation pip के माध्यम से optional driver extras (mysql, postgres, clickhouse, h2, duckdb, all, encryption) के साथ होती है। SQLite और DuckDB को किसी external runtime की आवश्यकता नहीं; H2 और generic JDBC को Java runtime चाहिए। Docker भी समर्थित है। `queryapigate examples load` command चार worked example scenarios (reporting API, dashboard data, streaming export, partner integration) को collections, queries, roles और ready-to-use API keys के रूप में install करती है।
Testing में unit tests, CI में वास्तविक MySQL, PostgreSQL, ClickHouse और H2 servers के विरुद्ध integration tests, DuckDB integration tests, Hypothesis के साथ SQL-guard fuzz testing, mypy static type checking, ruff linting और प्रत्येक push पर CI शामिल हैं। प्रोजेक्ट FSL-1.1-MIT के अंतर्गत licensed है और Python 3.9+ आवश्यक है।
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.