Part II: GraphQL schema¶
GraphQL has its own type language that’s used to write GraphQL schemas - GraphQL schema language and it allows us to talk about GraphQL schemas in a language-agnostic way, since GraphQL can be used with any backend framework or programming language.
In a very simple form, a GraphQL schema looks something like this:
type Author {
id: ID!
name: String
}
This is a simple type definition of author model in our application. id and name are fields defined for the author model with their respective types.
Now lets build a simple schema for a blog app where our basic data requirements are as follows:
- Storing the profile data of each user
- Storing the article data and the author of each article
- Storing the likes given by users to articles
- Storing the comments written by users on articles
Create tables¶
As you would normally do with any relational database, data is modelled as tables.
| Table | Columns |
|---|---|
| author | id, name |
| article | id, title, content, rating, author_id |
| like | user_id, article_id |
| comment | id, user_id, article_id, comment |
Note: If you are using the hello-world quickstart, tables author and article have already been created
via migrations
Note
With Hasura’s GraphQL engine, you don’t need to write your GraphQL Schema separately. It is automatically managed for you as you keep modifying the schema via the UI. Migration files will also be generated as you do this.
You can create tables via the API console.
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.
Head to Data -> Add Table.
Create table like:
Create Table comment:
Create the author and article tables similarly if not already created.
Once these tables are created via console, the GraphQL schema for the same is generated by the Hasura data API.
Add foreign key constraints:¶
After creating the tables, the following foreign key constraints need to be set up to complete our data modelling:
article::author_id -> author::idlike::article_id -> article::idcomment::article_id -> article::id
To add foreign key constraints, click on the table, go to the Modify tab and edit the columns for which you wish to add foreign keys.
Adding a foreign key constraint to the article_id of the like table:
Similarly, add the other foreign key constraints.
Note All of these schema related modifications will automatically reflect in GraphQL APIs.
Next: Explore the GraphQL APIs¶
Next, head to Part III: GraphQL APIs.