Add business logic to your GraphQL API with Hasura Actions

whoami?

Software Engineer at Hasura

 

     @aleksandrasays

     @beerose

✍️ aleksandra.codes

  1. What is Hasura?
  2. What are Actions?
  3. Machinery behind Actions
  4. Example use cases
  5. Demo

Agenda

What is Hasura?

Open source • GraphQL engine • On Postgres

 

Realtime GraphQL Engine

 

GraphQL Queries Compiler

 

users {
  name
  posts {
    title
    content
    tags {
      name
    }
  }
}
SELECT 
  users.name
  posts.title
  posts.content
  tags.name
FROM 
  users, posts, tags
WHERE
  users.id = posts.author_id,
  posts.id = tags.post_id

Authorization

 

 

Authentication

 

 

Authentication

 

 

Remote Schemas

 

Event triggers

What are Actions?

How does it work?

mutation createUser(user: {...}) {
  ...
}
{
  "input": {
    "user": {...}
  },
  "session_variables": {...}
}

1. GraphQL mutation → Event payload

How does it work?

Async Mode:  Event captured → Persisted → Event delivered

2. Delivering event to the webhook


{ ... } 

Event store

Event store

How does it work?

2. Delivering event to the webhook

Sync Mode:  Event captured  → Event delivered


{ ... } 

How does it work?

3. Receiving event response

Async Mode:  event is put back the event store 

Event store


{ ... } 

Event store

Event store

How does it work?

3. Receiving event response

Sync mode:  Hasura keeps the request open till receiving a response from the handler


{ ... } 

How does it work?

4. Getting results of the event handler

Async mode:  Event response → GraphQL subscription

subscription {
  createUserResult(actionId: "") {
    userId
    
    events {
      name
      date
    }
  }
}

Event store

Postgres DB

How does it work?

4. Getting results of the event handler

Async mode:  Event response → GraphQL mutation

mutation {
  createUser(user: {...}) {
    userId
    
    events {
      name
      date
    }
  }
}

Postgres DB