Skip to content

GraphQL Quick Start Guide

GraphQL Quick Start Guide

Get up and running with HeliosDB’s GraphQL API in minutes. This guide covers essential operations from basic queries to real-time subscriptions.

Prerequisites

  • HeliosDB server running (default GraphQL endpoint: https://localhost:443/graphql)
  • API key or authentication token
  • A GraphQL client library (Apollo, gql, or curl)

Connection Details

ParameterDefault Value
Endpointhttps://localhost:443/graphql
WebSocketwss://localhost:443/graphql/ws
Playgroundhttps://localhost:443/graphql
ProtocolHTTP/HTTPS
Auth HeaderAuthorization: Bearer YOUR_API_KEY

5-Minute Getting Started

Step 1: Test Your Connection

Using curl to verify the GraphQL endpoint is accessible:

Terminal window
curl -X POST https://localhost:443/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "{ __typename }"}'

Step 2: Explore the Schema

Open the GraphQL Playground at https://localhost:443/graphql to explore auto-generated schemas from your database tables.

Step 3: Write Your First Query

query GetUsers {
users(limit: 10) {
id
name
email
created_at
}
}

Setting Up GraphQL Clients

JavaScript (Apollo Client)

import { ApolloClient, InMemoryCache, gql } from '@apollo/client';
const client = new ApolloClient({
uri: 'https://localhost:443/graphql',
cache: new InMemoryCache(),
headers: {
Authorization: 'Bearer YOUR_API_KEY'
}
});
// Execute a query
const { data } = await client.query({
query: gql`
query GetUsers {
users(limit: 10) {
id
name
email
}
}
`
});
console.log(data.users);

Python (gql)

from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport
transport = RequestsHTTPTransport(
url="https://localhost:443/graphql",
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
client = Client(transport=transport)
query = gql("""
query GetUsers {
users(limit: 10) {
id
name
email
}
}
""")
result = client.execute(query)
print(result["users"])

Writing Queries

Query with Variables

query GetUser($id: Int!) {
users_by_pk(id: $id) {
id
name
email
orders {
id
total
}
}
}

Variables:

{ "id": 123 }

Query with Filtering

query ActiveUsers {
users(
where: {
status: { _eq: "active" },
created_at: { _gt: "2024-01-01" }
},
order_by: { created_at: desc },
limit: 20
) {
id
name
email
}
}

Aggregation Query

query UsersWithOrderStats {
users(limit: 10) {
id
name
orders_aggregate {
aggregate {
count
sum { total }
}
}
}
}

Mutations for Data Modification

Insert Single Record

mutation CreateUser($input: users_insert_input!) {
insert_users_one(object: $input) {
id
name
email
created_at
}
}

Variables:

{
"input": {
"name": "Alice",
"email": "alice@example.com",
"status": "active"
}
}

Update Records

mutation UpdateUserStatus($id: Int!, $status: String!) {
update_users_by_pk(
pk_columns: { id: $id },
_set: { status: $status }
) {
id
status
updated_at
}
}

Delete Records

mutation DeleteUser($id: Int!) {
delete_users_by_pk(id: $id) {
id
name
}
}

Subscriptions for Real-Time Updates

Basic Subscription

subscription WatchNewOrders {
orders(
where: { status: { _eq: "pending" } },
order_by: { created_at: desc },
limit: 10
) {
id
total
status
created_at
user { name }
}
}

Apollo Client with Subscriptions

import { split, HttpLink } from '@apollo/client';
import { WebSocketLink } from '@apollo/client/link/ws';
import { getMainDefinition } from '@apollo/client/utilities';
const httpLink = new HttpLink({
uri: 'https://localhost:443/graphql',
headers: { Authorization: 'Bearer YOUR_API_KEY' }
});
const wsLink = new WebSocketLink({
uri: 'wss://localhost:443/graphql/ws',
options: {
reconnect: true,
connectionParams: { authToken: 'YOUR_API_KEY' }
}
});
const splitLink = split(
({ query }) => {
const definition = getMainDefinition(query);
return definition.kind === 'OperationDefinition' &&
definition.operation === 'subscription';
},
wsLink,
httpLink
);
// Subscribe to changes
client.subscribe({
query: gql`subscription { orders(limit: 10) { id status } }`
}).subscribe({
next: (result) => console.log(result.data),
error: (err) => console.error(err)
});

Key Features

FeatureDescription
Auto-generated SchemaGraphQL schema generated from database tables
Real-time SubscriptionsWebSocket-based live data updates
Query BatchingDataLoader integration for N+1 prevention
Schema FederationSupport for distributed architectures
Query ComplexityBuilt-in complexity analysis

Next Steps


Last Updated: January 2026