Getting started with
GraphQL on ASP.NET Core
Michael Staib
Monday:
09:00 Hello, Intro, Tech Check
09:25 What is GraphQL?
09:50 BREAK (10 minutes)
10:00 GraphQL Queries
10:50 BREAK (20 minutes)
11:10 Building a GraphQL Server
12:00 BREAK (10 minutes)
12:10 DataLoader
13:00 LUNCH
14:00 Schema Design
14:50 BREAK (10 minutes)
15:00 Middleware, Pagination and Filtering
15:50 BREAK (20 minutes)
16:10 GraphQL Subscriptions
17:00 FINISH
Tuesday:
09:00 Putting GraphQL to production
09:50 BREAK (10 minutes)
10:00 Introduction Distributed Schemas
10:50 BREAK (20 minutes)
11:10 Schema Stitching
12:00 BREAK (10 minutes)
12:10 Federated Schema Stitching
13:00 LUNCH
14:00 GraphQL in Blazor
14:50 BREAK (10 minutes)
15:00 Building a basic GraphQL client
15:50 BREAK (20 minutes)
16:10 GraphQL Subscriptions
17:00 FINISH
Let us get our machines ready.
{
me {
name
}
}
{
"me": {
"name": "Michael Staib"
}
}
{
me {
name
}
}
{
me {
name
image {
width
height
url
}
}
}
{
"me": {
"name": "Michael Staib",
"image": {
"width": 200,
"height": 300,
"url": "http://some/images/123.png"
}
}
}
{
me {
name
image {
width
height
url
}
}
}
{
me {
name
lastSeen
friends {
name
lastSeen
}
}
}
{
"me": {
"name": "Michael Staib",
"lastSeen": "2018-05-19T18:45",
"friends": [
{
"name": "Rafael Staib",
"lastSeen": "2018-05-24T12:37"
},
{
"name": "Pascal Senn",
"lastSeen": "2018-06-07T17:13"
}
]
}
}
{
me {
name
lastSeen
friends {
name
lastSeen
}
}
}
{
"me": {
"name": "Michael Staib",
"lastSeen": "2018-05-19T18:45",
"friends": [
{
"name": "Rafael Staib",
"lastSeen": "2018-05-24T12:37"
},
{
"name": "Pascal Senn",
"lastSeen": "2018-06-07T17:13"
}
]
}
}
{
me {
... PersonInfo
friends {
... PersonInfo
}
}
}
fragment PersonInfo on Person {
name
lastSeen
}
- One Endpoint
- One Request
- No over- or under-fetching
- Type System
- Predictable
DataLoader
Understanding Field Middleware
[UseApplicationDbContext]
[UsePaging]
public IQueryable<Attendee> GetAttendees(
[ScopedService] ApplicationDbContext context) =>
context.Attendees;
protected override void Configure(
IObjectTypeDescriptor<Query> descriptor)
{
descriptor
.Field(t => t.GetSessions())
.UsePaging();
}
descriptor.Use(next => async context =>
{
// logic
await next(context);
// more logic
})
https://chillicream.com
https://github.com/chillicream/hotchocolate
DotNetDays: Workshop - Getting started with GraphQL on ASP.NET Core and Hot Chocolate
By Michael Ingmar Staib
DotNetDays: Workshop - Getting started with GraphQL on ASP.NET Core and Hot Chocolate
- 664