VulcanSQL is an Analytics API generator that helps data engineers to build scalable analytics APIs using only SQL without writing any backend code.
APIs are still the primary programming interface for data consumers to utilize data in their daily business applications, such as BI, reports, dashboards, spreadsheets, and web applications. However, data stored in data warehouses are not accessible for those users and tools without an API consumption layer.
VulcanSQL aims to solve that problem by translating SQL into flexible APIs; it is contextual in that it can translate APIs into the corresponding SQL based on different user personas and business contexts. It is also extendable with custom business logic and complex SQL translation.
When scaling data usages outside the traditional data team to business users and application developers using APIs. VulcanSQL is the perfect solution for data using in applications.
- Parameterized SQL into scalable and secure APIs
- Built-in API access and version control
- Built-in self-generated API documentation
- Integrate with existing toolsets, such as Excel / Google spreadsheet, Zapier, Retool, etc.
- PosgreSQL
- DuckDB
- Snowflake
- BigQuery
Build APIs with just parameterized your SQL and with extendability.
Example: passing parameters from URL
select * from public.users where id = {{ context.params.userId }}
You can build an API endpoint /users
with userId
as input easily, You can immediately get data through API as below.
GET /users?userId=1
Response
[{
"name": "wwwy3y3",
"age": 30
}]
1. Error Handling
If you want to throw errors based on business logic. for example, run a query first, if no data return, throw 404 not found
.
{% req user %}
select * from public.users where userName = {{ context.parames.userName }} limit 1;
{% endreq %}
{% if user.value().length == 0 %}
{% error "user not found" %}
{% endif %}
select * from public.groups where userId = {{ user.value()[0].id }};
2. Authorization
You can pass in user attributes to achieve user access control. We will build the corresponding SQL on the fly.
select
--- masking address if query user is not admin
{% if context.user.name == 'ADMIN' %}
{% "address" %}
{% elif %}
{% "masking(address)" %}
{% endif %},
orderId,
amount
from orders
--- limit the data to the store user belongs to.
where store = {{ context.user.attr.store }}
3. Validation
You can add a number validator on userId
input.
- SQL
select * from public.users where id = {{ context.params.userId }}
- Schema
yaml parameters: userId: in: query validators: # set your validator here. - name: 'number'
VulcanSQL will automatically build documentation and catalog for you.
- API Catalog: VulcanSQL will build an API catalog page for data consumers to learn how to use the APIs and explore data in the dashboard.
- API Documentation: VulcanSQL will build a Swagger API page for backend engineers.
On API catalog page, you can preview data or read from your applications.
- You can
Copy API URL
and use it in your frontend/backend applications. - You can download the selected data as CSV or JSON.
- You can follow the steps to read from Excel/Google Spreadsheet/Zapier/Retools.
Visit the documentation for installation guide.
🔑 Login Page: Users will need to login.
📖 Catalog: After logged-in, users can see what endpoints are available to be used.
✅ Endpoint: Users can view the details of one endpoint and preview the data.
🔌 Connect: Users will be able to follow the guide and connect from their applications.
- Welcome to our Discord to give us feedback!
- If any issues, please visit Github Issues