Part III: GraphQL APIs¶
Now that you’ve created the data models, you can use Hasura’s GraphQL to query your data directly.
The “data” microservice¶
Every Hasura project comes with a data microservice. The data
microservice provides a GraphQL API and an HTTP JSON API
over PostgreSQL, an extremely versatile open source relational database. We create tables in Postgres and access the
data using the APIs provided by the data
microservice.
Any user with the admin
role has full-access to the data microservice. All GraphQL requests to the data
microservice
are POST
requests to the /v1alpha1/graphql
endpoint.
Explore using the API explorer & the query builder¶
Run:
# Run this command inside your project directory
$ hasura api-console
This will open up the API console
and show you the API explorer
page which you can use to understand the APIs
provided by the data microservice.
Note
You can try out all of the API examples below in the API explorer.
Head to API explorer > Data > GraphQL
for GraphQL APIs or head to API explorer > Data > JSON Query Builder
for JSON APIs
Inserting data¶
Let’s insert a couple of authors. The full definition of an insert request can be found here.
mutation insert_author {
insert_author (objects: [{id: 100, name: "Warren"},{id: 101, name: "Greg"}]) {
returning {
id
}
}
}
Note the returning
key. We would like to get back the id
assigned for each inserted row.
Querying data¶
The query language lets you make simple, as well as complex queries.
Let’s look at a simple select query on the article table. The full definition of a select query can be found here
query fetch_article {
article {
id
title
}
}
This query returns the id
and title
rows from the article
table.
In the above query, we can have a where
clause to apply filters on the data. Boolean operators like $and
, $or
,
$not
can be used in a where
clause. See here for a full list of supported Boolean operators.
query fetch_article {
article (where: {_and: [{rating: {_gte: 2} author_id: {_eq: 6} }] } ) {
id
title
author_id
}
}
order_by
is used to sort the results by a column. A prefix of +
or -
indicates ascending or descending order
respectively. limit
and offset
are used to slice the result set.
Example,
query fetch_article {
article (limit: 10, order_by: ["+author_id"]) {
id
title
author_id
}
}
Updating data¶
The request to update data consists of two parts - the new values and a where
indicating what to update. The syntax
of the where clause is same as the one in the select query. For the full syntax of an update request, see here.
mutation update_article {
update_article(where: {id: {_eq: 4}} _set: {title: "Mystery affair at Styles"}) {
affected_rows
}
}
Delete data¶
The request to delete data takes a where
clause indicating what to delete. The syntax of the where clause is the same as the one in
the select query. For the full syntax of a delete request, see here.
mutation delete_article {
delete_article(where: {rating: {_lte: 1}}) {
affected_rows
}
}
Next: Add relationships to data¶
Next, let’s head to Part IV: Add relationships.