Domain-first GraphQL API platforms for your .Net stack | Software Architecture Conference
0 views
Aug 6, 2025
In this combination of a talk and a demo, we'll take a look at how contemporary architecture design patterns and new data storage capabilities now both allow and require .Net developers to build a GraphQL API platform that serves as a common semantic layer over a set of heterogenous data sources with the ability to serve real time transactional data at scale. This API layer can also service the data augmentation requirements of your AI stack. š Conference Website: https://softwarearchitecture.live šŗ CSharp TV - Dev Streaming Destination http://csharp.tv š C# Corner - Community of Software and Data Developers https://www.c-sharpcorner.com #CSharpTV #CSharpCorner #CSharp #SoftwareArchitectureConf
View Video Transcript
0:03
hello everyone my name is sandep um I
0:06
hello everyone my name is sandep um I
0:06
hello everyone my name is sandep um I work at this company called H we make
0:08
work at this company called H we make
0:08
work at this company called H we make tools for uh graphql developers so
0:11
tools for uh graphql developers so
0:11
tools for uh graphql developers so people like yourselves uh who might be
0:14
people like yourselves uh who might be
0:14
people like yourselves uh who might be interested in using graphql um on any
0:17
interested in using graphql um on any
0:17
interested in using graphql um on any stack that you uh use right um and today
0:20
stack that you uh use right um and today
0:20
stack that you uh use right um and today I'm going to talk a little bit about
0:22
I'm going to talk a little bit about
0:22
I'm going to talk a little bit about using um graphql with net stack however
0:26
using um graphql with net stack however
0:26
using um graphql with net stack however you can take the approach you can take
0:28
you can take the approach you can take
0:28
you can take the approach you can take the concepts and apply it to any
0:30
the concepts and apply it to any
0:30
the concepts and apply it to any language framework of your choice um as
0:32
language framework of your choice um as
0:32
language framework of your choice um as you will see we kind of circumvent this
0:35
you will see we kind of circumvent this
0:35
you will see we kind of circumvent this API middleware and go straight to the
0:37
API middleware and go straight to the
0:37
API middleware and go straight to the domain in the database um but I I'll
0:40
domain in the database um but I I'll
0:40
domain in the database um but I I'll save that for the subsequent slides um
0:42
save that for the subsequent slides um
0:42
save that for the subsequent slides um so here's what we are going to do um I'm
0:45
so here's what we are going to do um I'm
0:45
so here's what we are going to do um I'm going to take just one more minute to
0:47
going to take just one more minute to
0:47
going to take just one more minute to introduce myself we will take a look at
0:49
introduce myself we will take a look at
0:49
introduce myself we will take a look at graphql for those of you who are new to
0:51
graphql for those of you who are new to
0:51
graphql for those of you who are new to graphql who have heard of graphql but
0:52
graphql who have heard of graphql but
0:52
graphql who have heard of graphql but I've never uh quite suned into it U
0:56
I've never uh quite suned into it U
0:56
I've never uh quite suned into it U we'll take a brief look at graph K
0:58
we'll take a brief look at graph K
0:58
we'll take a brief look at graph K hopefully it'll just be five minutes and
1:00
hopefully it'll just be five minutes and
1:00
hopefully it'll just be five minutes and um we will also take a look at some
1:03
um we will also take a look at some
1:03
um we will also take a look at some concerns that API platform Architects or
1:06
concerns that API platform Architects or
1:06
concerns that API platform Architects or developers uh need to uh kind of grapple
1:09
developers uh need to uh kind of grapple
1:09
developers uh need to uh kind of grapple with uh as you kind of build out your
1:12
with uh as you kind of build out your
1:12
with uh as you kind of build out your API platform or data access layer in
1:14
API platform or data access layer in
1:14
API platform or data access layer in inside an organization um these are
1:17
inside an organization um these are
1:17
inside an organization um these are concerns that everyone has to face as
1:20
concerns that everyone has to face as
1:20
concerns that everyone has to face as especially as your uh team as your data
1:23
especially as your uh team as your data
1:23
especially as your uh team as your data landscape gets more complex and and it
1:26
landscape gets more complex and and it
1:26
landscape gets more complex and and it evolves and grows these are concerns
1:28
evolves and grows these are concerns
1:28
evolves and grows these are concerns that everyone inevitably faces as their
1:31
that everyone inevitably faces as their
1:31
that everyone inevitably faces as their organization skills so we'll take a look
1:32
organization skills so we'll take a look
1:32
organization skills so we'll take a look at some of them and then we'll quickly
1:34
at some of them and then we'll quickly
1:34
at some of them and then we'll quickly move to something slightly more
1:36
move to something slightly more
1:36
move to something slightly more productive which is a demo of how these
1:38
productive which is a demo of how these
1:38
productive which is a demo of how these things will work um and towards the end
1:40
things will work um and towards the end
1:40
things will work um and towards the end hopefully we'll have some time left over
1:41
hopefully we'll have some time left over
1:41
hopefully we'll have some time left over for a Q&A um so that's a plan um I I'm
1:46
for a Q&A um so that's a plan um I I'm
1:46
for a Q&A um so that's a plan um I I'm not sure uh if you got my introduction
1:49
not sure uh if you got my introduction
1:49
not sure uh if you got my introduction in the beginning but uh the field C at
1:52
in the beginning but uh the field C at
1:52
in the beginning but uh the field C at this company H we build tools for Graal
1:54
this company H we build tools for Graal
1:54
this company H we build tools for Graal um I started my career building net
1:57
um I started my career building net
1:57
um I started my career building net tools uh building applications with net
2:00
tools uh building applications with net
2:00
tools uh building applications with net um
2:01
um
2:01
um 25ish is where I started watched the
2:04
25ish is where I started watched the
2:04
25ish is where I started watched the transition to three and then went on to
2:06
transition to three and then went on to
2:06
transition to three and then went on to do other things uh so cop and net holder
2:10
do other things uh so cop and net holder
2:10
do other things uh so cop and net holder special place in my hand and I used to
2:12
special place in my hand and I used to
2:12
special place in my hand and I used to use that old clunky visual studio um
2:15
use that old clunky visual studio um
2:15
use that old clunky visual studio um code editor Plus cicd tool plus
2:19
code editor Plus cicd tool plus
2:19
code editor Plus cicd tool plus everything in one right um so that's how
2:22
everything in one right um so that's how
2:22
everything in one right um so that's how I began my journey and uh very excited
2:25
I began my journey and uh very excited
2:25
I began my journey and uh very excited to be here and talking to you about do
2:27
to be here and talking to you about do
2:27
to be here and talking to you about do Andra so without further ado let's talk
2:30
Andra so without further ado let's talk
2:30
Andra so without further ado let's talk about graph Guild um quick and I'll keep
2:34
about graph Guild um quick and I'll keep
2:34
about graph Guild um quick and I'll keep these sections quick and rolling if you
2:36
these sections quick and rolling if you
2:36
these sections quick and rolling if you have any questions towards the end I'll
2:38
have any questions towards the end I'll
2:38
have any questions towards the end I'll be more than happy to take it um so
2:40
be more than happy to take it um so
2:41
be more than happy to take it um so quick uh bit of trivia graphi originated
2:43
quick uh bit of trivia graphi originated
2:43
quick uh bit of trivia graphi originated in Facebook an organization that is very
2:47
in Facebook an organization that is very
2:47
in Facebook an organization that is very much like an Enterprise lots of data
2:49
much like an Enterprise lots of data
2:49
much like an Enterprise lots of data lots of teams and more importantly lot
2:51
lots of teams and more importantly lot
2:51
lots of teams and more importantly lot of scale I think nobody in the world had
2:53
of scale I think nobody in the world had
2:53
of scale I think nobody in the world had SK seen uh very few teams in the world
2:57
SK seen uh very few teams in the world
2:57
SK seen uh very few teams in the world had seen scale the way Facebook and I
3:00
had seen scale the way Facebook and I
3:00
had seen scale the way Facebook and I think the WhatsApp team saw um I believe
3:03
think the WhatsApp team saw um I believe
3:03
think the WhatsApp team saw um I believe around between 2010 to 2015 um
3:08
around between 2010 to 2015 um
3:08
around between 2010 to 2015 um and this was also the time they
3:11
and this was also the time they
3:11
and this was also the time they introduced react into the developer
3:14
introduced react into the developer
3:14
introduced react into the developer ecosystem uh react component started to
3:16
ecosystem uh react component started to
3:17
ecosystem uh react component started to become a thing uh people started to
3:19
become a thing uh people started to
3:19
become a thing uh people started to understand the um kind of reinvented for
3:22
understand the um kind of reinvented for
3:22
understand the um kind of reinvented for most of you folks who been around it
3:25
most of you folks who been around it
3:25
most of you folks who been around it should sound familiar but the idea of um
3:28
should sound familiar but the idea of um
3:28
should sound familiar but the idea of um data hierarchy
3:30
data hierarchy
3:30
data hierarchy and architecture and individual
3:32
and architecture and individual
3:32
and architecture and individual components being able to represent their
3:33
components being able to represent their
3:33
components being able to represent their own needs asynchronously all of these
3:36
own needs asynchronously all of these
3:36
own needs asynchronously all of these things started to take off in a new way
3:37
things started to take off in a new way
3:38
things started to take off in a new way of course uh in in in a new fashion
3:40
of course uh in in in a new fashion
3:40
of course uh in in in a new fashion between in that in that time frame 10 to
3:42
between in that in that time frame 10 to
3:42
between in that in that time frame 10 to uh 12 to 15 I think is the the right
3:45
uh 12 to 15 I think is the the right
3:45
uh 12 to 15 I think is the the right window for this so graph emerged from
3:48
window for this so graph emerged from
3:49
window for this so graph emerged from developers being lazy and refusing to
3:51
developers being lazy and refusing to
3:51
developers being lazy and refusing to write new apis and they said that hey we
3:54
write new apis and they said that hey we
3:54
write new apis and they said that hey we will come up with a query language we
3:55
will come up with a query language we
3:56
will come up with a query language we will write one
3:57
will write one
3:57
will write one endpoint let's say it's some do m/g
4:00
endpoint let's say it's some do m/g
4:00
endpoint let's say it's some do m/g graphql we will Define a way in which
4:03
graphql we will Define a way in which
4:03
graphql we will Define a way in which people can express the query that we'll
4:06
people can express the query that we'll
4:06
people can express the query that we'll Define the semantics of this query
4:07
Define the semantics of this query
4:07
Define the semantics of this query language uh so that frontend
4:10
language uh so that frontend
4:10
language uh so that frontend applications can request whatever data
4:12
applications can request whatever data
4:12
applications can request whatever data they want and without getting into the
4:15
they want and without getting into the
4:15
they want and without getting into the implementation details of how we will
4:16
implementation details of how we will
4:16
implementation details of how we will service that request we will be able to
4:19
service that request we will be able to
4:20
service that request we will be able to return any such request with the data
4:22
return any such request with the data
4:22
return any such request with the data that has been requested so you can see
4:23
that has been requested so you can see
4:23
that has been requested so you can see this dri on uh the right where depending
4:26
this dri on uh the right where depending
4:26
this dri on uh the right where depending on the request you have a response that
4:28
on the request you have a response that
4:28
on the request you have a response that goes from your uh uh graph API um the
4:32
goes from your uh uh graph API um the
4:32
goes from your uh uh graph API um the idea is that you bring your own data and
4:33
idea is that you bring your own data and
4:33
idea is that you bring your own data and write your code but
4:35
write your code but
4:35
write your code but essentially you build out a graph schema
4:39
essentially you build out a graph schema
4:39
essentially you build out a graph schema that has types in it you write resolvers
4:43
that has types in it you write resolvers
4:43
that has types in it you write resolvers you generate resolvers you do whatever
4:44
you generate resolvers you do whatever
4:44
you generate resolvers you do whatever that's completely up to you but Define a
4:47
that's completely up to you but Define a
4:47
that's completely up to you but Define a schema expose the schema to your
4:49
schema expose the schema to your
4:49
schema expose the schema to your frontend developers ask them to query
4:51
frontend developers ask them to query
4:51
frontend developers ask them to query whatever they want against the schema
4:53
whatever they want against the schema
4:53
whatever they want against the schema you have types that will help you pull
4:55
you have types that will help you pull
4:55
you have types that will help you pull this information out from the underlying
4:57
this information out from the underlying
4:57
this information out from the underlying implementation and return this uh
5:00
implementation and return this uh
5:00
implementation and return this uh response data set to uh the consumer
5:03
response data set to uh the consumer
5:03
response data set to uh the consumer applications um whatever else you focus
5:06
applications um whatever else you focus
5:07
applications um whatever else you focus on in this half an hour s of talk uh if
5:10
on in this half an hour s of talk uh if
5:10
on in this half an hour s of talk uh if there's one thing you want to take away
5:12
there's one thing you want to take away
5:12
there's one thing you want to take away it is the fact that graphql brings types
5:16
it is the fact that graphql brings types
5:16
it is the fact that graphql brings types that are consistent across the
5:18
that are consistent across the
5:18
that are consistent across the underlying implementation you could be
5:20
underlying implementation you could be
5:20
underlying implementation you could be using graph on top of a single table a
5:23
using graph on top of a single table a
5:23
using graph on top of a single table a single database uh 20,000 databases but
5:27
single database uh 20,000 databases but
5:27
single database uh 20,000 databases but you will ultimately represent them using
5:29
you will ultimately represent them using
5:29
you will ultimately represent them using one type system which you define but the
5:32
one type system which you define but the
5:32
one type system which you define but the ability to do that is what
5:33
ability to do that is what
5:33
ability to do that is what differentiates it from let's say um Json
5:37
differentiates it from let's say um Json
5:37
differentiates it from let's say um Json best API with open API specification um
5:40
best API with open API specification um
5:40
best API with open API specification um where you have information about
5:41
where you have information about
5:41
where you have information about individual endpoints that are discrete
5:43
individual endpoints that are discrete
5:43
individual endpoints that are discrete but graphel is kind of I mean if if if
5:46
but graphel is kind of I mean if if if
5:46
but graphel is kind of I mean if if if you kind ofe a little bit ignore o data
5:49
you kind ofe a little bit ignore o data
5:49
you kind ofe a little bit ignore o data and some of these other Frameworks from
5:51
and some of these other Frameworks from
5:51
and some of these other Frameworks from the past uh the first time that you have
5:53
the past uh the first time that you have
5:53
the past uh the first time that you have such a schema driven uh approach uh that
5:57
such a schema driven uh approach uh that
5:57
such a schema driven uh approach uh that does this um in the modern world again
5:59
does this um in the modern world again
5:59
does this um in the modern world again again uh for people who've been around
6:01
again uh for people who've been around
6:01
again uh for people who've been around the block you know
6:03
the block you know
6:03
the block you know that soap and other protocols have kind
6:07
that soap and other protocols have kind
6:07
that soap and other protocols have kind of done the same thing but this is the
6:08
of done the same thing but this is the
6:08
of done the same thing but this is the new way of uh the same Frameworks so to
6:12
new way of uh the same Frameworks so to
6:12
new way of uh the same Frameworks so to say
6:13
say
6:13
say um using types helps graphel kind of
6:16
um using types helps graphel kind of
6:16
um using types helps graphel kind of self doent itself that makes for an
6:18
self doent itself that makes for an
6:18
self doent itself that makes for an interesting experience we will see that
6:20
interesting experience we will see that
6:20
interesting experience we will see that in the demo and uh most implementations
6:23
in the demo and uh most implementations
6:23
in the demo and uh most implementations of graph are in HTTP and Json if people
6:27
of graph are in HTTP and Json if people
6:27
of graph are in HTTP and Json if people want live queries and uh things called
6:29
want live queries and uh things called
6:29
want live queries and uh things called subscriptions in in graphel which let
6:32
subscriptions in in graphel which let
6:32
subscriptions in in graphel which let you access data uh in a realtime fashion
6:35
you access data uh in a realtime fashion
6:35
you access data uh in a realtime fashion then you can use we circuits as well and
6:37
then you can use we circuits as well and
6:37
then you can use we circuits as well and there are libraries that can help with
6:39
there are libraries that can help with
6:39
there are libraries that can help with this entire implementation so that's a
6:41
this entire implementation so that's a
6:41
this entire implementation so that's a uh not so quick uh trivia around uh
6:44
uh not so quick uh trivia around uh
6:44
uh not so quick uh trivia around uh graphql uh the important thing is that
6:46
graphql uh the important thing is that
6:47
graphql uh the important thing is that it's a single end point you specify what
6:49
it's a single end point you specify what
6:49
it's a single end point you specify what you need you get exactly that data um
6:52
you need you get exactly that data um
6:52
you need you get exactly that data um this lets you declaratively define the
6:54
this lets you declaratively define the
6:54
this lets you declaratively define the needs of a single component in your
6:56
needs of a single component in your
6:56
needs of a single component in your application and that's it no one needs
6:58
application and that's it no one needs
6:58
application and that's it no one needs to write any code no expensive
7:00
to write any code no expensive
7:00
to write any code no expensive interactions between front end and
7:01
interactions between front end and
7:01
interactions between front end and backend developers to figure out um the
7:04
backend developers to figure out um the
7:04
backend developers to figure out um the API spec and to test it uh to have test
7:07
API spec and to test it uh to have test
7:07
API spec and to test it uh to have test data and all of these things get away
7:09
data and all of these things get away
7:09
data and all of these things get away with all of that uh once you build a
7:11
with all of that uh once you build a
7:11
with all of that uh once you build a graph schema any permutation of request
7:14
graph schema any permutation of request
7:14
graph schema any permutation of request uh in that schema is kind of supportive
7:16
uh in that schema is kind of supportive
7:16
uh in that schema is kind of supportive because you kind of do the hard work
7:18
because you kind of do the hard work
7:18
because you kind of do the hard work with the way you write resolvers um
7:20
with the way you write resolvers um
7:20
with the way you write resolvers um which should sound ominous and we are
7:22
which should sound ominous and we are
7:22
which should sound ominous and we are going to get into this
7:24
going to get into this
7:24
going to get into this so graph
7:26
so graph
7:26
so graph evolved as I said from front-end
7:30
evolved as I said from front-end
7:30
evolved as I said from front-end Engineers not wishing to get into
7:33
Engineers not wishing to get into
7:33
Engineers not wishing to get into extended back and forths with backend
7:35
extended back and forths with backend
7:35
extended back and forths with backend Engineers right so uh it emerged as a
7:37
Engineers right so uh it emerged as a
7:37
Engineers right so uh it emerged as a layer on top of rest apis or whatever
7:40
layer on top of rest apis or whatever
7:40
layer on top of rest apis or whatever your domain apis were um written and
7:44
your domain apis were um written and
7:44
your domain apis were um written and requested by front-end Engineers um so
7:48
requested by front-end Engineers um so
7:48
requested by front-end Engineers um so over time what has happened is that the
7:50
over time what has happened is that the
7:50
over time what has happened is that the scope of building graphql has gone back
7:53
scope of building graphql has gone back
7:53
scope of building graphql has gone back to backend Engineers this is because
7:56
to backend Engineers this is because
7:56
to backend Engineers this is because when you had a well defined domain API
8:00
when you had a well defined domain API
8:00
when you had a well defined domain API set it was easy to build Graal uh I mean
8:03
set it was easy to build Graal uh I mean
8:03
set it was easy to build Graal uh I mean it was okay to build Graal um a layer of
8:06
it was okay to build Graal um a layer of
8:06
it was okay to build Graal um a layer of graphel on top of it but the moment you
8:08
graphel on top of it but the moment you
8:08
graphel on top of it but the moment you need to introduce new data into the mix
8:11
need to introduce new data into the mix
8:11
need to introduce new data into the mix you need to troubleshoot performance
8:14
you need to troubleshoot performance
8:14
you need to troubleshoot performance because if you notice in the left hand
8:16
because if you notice in the left hand
8:17
because if you notice in the left hand side of this diagram let me see if I can
8:18
side of this diagram let me see if I can
8:18
side of this diagram let me see if I can get my pointer turn on um you have apis
8:22
get my pointer turn on um you have apis
8:22
get my pointer turn on um you have apis that talk to other API that talk to your
8:24
that talk to other API that talk to your
8:24
that talk to other API that talk to your database um now anyone who's ever
8:26
database um now anyone who's ever
8:26
database um now anyone who's ever written code um that finds more than
8:29
written code um that finds more than
8:29
written code um that finds more than ,000 lines of cod and works multiple
8:31
,000 lines of cod and works multiple
8:31
,000 lines of cod and works multiple databases uh will know that this is a
8:34
databases uh will know that this is a
8:34
databases uh will know that this is a very hard problem to solve you don't
8:35
very hard problem to solve you don't
8:35
very hard problem to solve you don't know what is going on multiple pieces of
8:37
know what is going on multiple pieces of
8:37
know what is going on multiple pieces of code talking to each other add
8:39
code talking to each other add
8:39
code talking to each other add unnecessary latency and it's very hard
8:41
unnecessary latency and it's very hard
8:41
unnecessary latency and it's very hard to troubleshoot and it's very hard to
8:43
to troubleshoot and it's very hard to
8:43
to troubleshoot and it's very hard to you know standardize performance in a
8:44
you know standardize performance in a
8:44
you know standardize performance in a single place so a lot of these uh these
8:47
single place so a lot of these uh these
8:47
single place so a lot of these uh these patterns kind of started moving back to
8:50
patterns kind of started moving back to
8:50
patterns kind of started moving back to the backend engineering uh scope so to
8:53
the backend engineering uh scope so to
8:53
the backend engineering uh scope so to say U for full stack developers uh the
8:56
say U for full stack developers uh the
8:56
say U for full stack developers uh the the balance kind of Tails more towards
8:58
the balance kind of Tails more towards
8:58
the balance kind of Tails more towards back end Engineering Systems where you
9:00
back end Engineering Systems where you
9:00
back end Engineering Systems where you get closer to the underlying domain
9:02
get closer to the underlying domain
9:02
get closer to the underlying domain right so this is one of the things that
9:04
right so this is one of the things that
9:04
right so this is one of the things that has happened in this 9 years of graph by
9:06
has happened in this 9 years of graph by
9:06
has happened in this 9 years of graph by the way um the
9:09
the way um the
9:09
the way um the sub the tooling ecosystem that lets you
9:12
sub the tooling ecosystem that lets you
9:12
sub the tooling ecosystem that lets you build a subgraph and we'll get to the
9:15
build a subgraph and we'll get to the
9:15
build a subgraph and we'll get to the definition of subgraph as well but it
9:17
definition of subgraph as well but it
9:17
definition of subgraph as well but it should be fairly self-explanation you
9:19
should be fairly self-explanation you
9:19
should be fairly self-explanation you build a subgraph one team owns a
9:21
build a subgraph one team owns a
9:21
build a subgraph one team owns a subgraph on one or more data sources you
9:24
subgraph on one or more data sources you
9:24
subgraph on one or more data sources you write some code which is called
9:26
write some code which is called
9:26
write some code which is called resolvers this entire thing is called a
9:28
resolvers this entire thing is called a
9:28
resolvers this entire thing is called a subgraph right um so tooling started in
9:32
subgraph right um so tooling started in
9:32
subgraph right um so tooling started in the graphical ecosystem being very
9:34
the graphical ecosystem being very
9:34
the graphical ecosystem being very schema first where people would
9:36
schema first where people would
9:36
schema first where people would laboriously hand write a graph schema
9:39
laboriously hand write a graph schema
9:39
laboriously hand write a graph schema step two is kind of write resolvers to
9:41
step two is kind of write resolvers to
9:41
step two is kind of write resolvers to help implement the schema and a few
9:44
help implement the schema and a few
9:44
help implement the schema and a few years of doing this uh after the initial
9:47
years of doing this uh after the initial
9:47
years of doing this uh after the initial hype kind of warm down people realize
9:50
hype kind of warm down people realize
9:50
hype kind of warm down people realize that hey maybe there is a way in which
9:52
that hey maybe there is a way in which
9:52
that hey maybe there is a way in which we can generate the schema instead of
9:54
we can generate the schema instead of
9:54
we can generate the schema instead of having to hand write the whole thing we
9:56
having to hand write the whole thing we
9:56
having to hand write the whole thing we have a complex domain I don't want to
9:58
have a complex domain I don't want to
9:58
have a complex domain I don't want to sit and write thousand or lines of graph
10:00
sit and write thousand or lines of graph
10:00
sit and write thousand or lines of graph schema in some cases I already have apis
10:03
schema in some cases I already have apis
10:03
schema in some cases I already have apis and database domains which have defined
10:06
and database domains which have defined
10:06
and database domains which have defined what the schema should be why am I
10:08
what the schema should be why am I
10:08
what the schema should be why am I building another layer on top of it
10:10
building another layer on top of it
10:10
building another layer on top of it that's the kind of thinking that led to
10:11
that's the kind of thinking that led to
10:11
that's the kind of thinking that led to people to um do other things like code
10:14
people to um do other things like code
10:14
people to um do other things like code first where if you have code you can
10:17
first where if you have code you can
10:17
first where if you have code you can generate a graph field schema on top of
10:19
generate a graph field schema on top of
10:20
generate a graph field schema on top of it so this is code first and the the
10:22
it so this is code first and the the
10:22
it so this is code first and the the third approach is domain first where if
10:24
third approach is domain first where if
10:24
third approach is domain first where if you already have types in your domain
10:28
you already have types in your domain
10:28
you already have types in your domain which usually come from your
10:29
which usually come from your
10:30
which usually come from your database just
10:31
database just
10:32
database just generate the graph schema most of your
10:34
generate the graph schema most of your
10:34
generate the graph schema most of your graph schema from it and allow the
10:37
graph schema from it and allow the
10:37
graph schema from it and allow the definition of business logic to uh can
10:39
definition of business logic to uh can
10:39
definition of business logic to uh can customize this if any of that is needed
10:42
customize this if any of that is needed
10:42
customize this if any of that is needed um over
10:43
um over
10:43
um over time uh people have realize that uh this
10:47
time uh people have realize that uh this
10:47
time uh people have realize that uh this is academically so very sound schema
10:50
is academically so very sound schema
10:50
is academically so very sound schema first uh but it takes a lot of time and
10:53
first uh but it takes a lot of time and
10:53
first uh but it takes a lot of time and it doesn't solve all the problems uh and
10:56
it doesn't solve all the problems uh and
10:56
it doesn't solve all the problems uh and the the adoption has kind of started to
10:59
the the adoption has kind of started to
10:59
the the adoption has kind of started to shift towards code first and domain
11:01
shift towards code first and domain
11:02
shift towards code first and domain first in the first two three years and
11:03
first in the first two three years and
11:03
first in the first two three years and now there's a lot of stuff Happening
11:05
now there's a lot of stuff Happening
11:05
now there's a lot of stuff Happening Here we we kind of take a look at what
11:07
Here we we kind of take a look at what
11:07
Here we we kind of take a look at what is happening in the ecosystem um in the
11:09
is happening in the ecosystem um in the
11:09
is happening in the ecosystem um in the recent past as well right but a quick
11:12
recent past as well right but a quick
11:13
recent past as well right but a quick caveat here these are all steps that you
11:16
caveat here these are all steps that you
11:16
caveat here these are all steps that you will take to seed your graph field
11:18
will take to seed your graph field
11:18
will take to seed your graph field schema now and like if you have uh if
11:20
schema now and like if you have uh if
11:20
schema now and like if you have uh if you build applications think about all
11:22
you build applications think about all
11:22
you build applications think about all the different tables all the different
11:24
the different tables all the different
11:24
the different tables all the different models that you have in your domains um
11:27
models that you have in your domains um
11:27
models that you have in your domains um in your domain and think about having to
11:29
in your domain and think about having to
11:29
in your domain and think about having to write a whole bunch of code and a new
11:32
write a whole bunch of code and a new
11:32
write a whole bunch of code and a new schema on top of that right um You might
11:35
schema on top of that right um You might
11:36
schema on top of that right um You might want to start with domain first you will
11:38
want to start with domain first you will
11:38
want to start with domain first you will do that and this will meet 80% of your
11:41
do that and this will meet 80% of your
11:41
do that and this will meet 80% of your requirements but eventually you will
11:42
requirements but eventually you will
11:42
requirements but eventually you will come and tweak something you'll drop a
11:44
come and tweak something you'll drop a
11:44
come and tweak something you'll drop a column you'll write a you'll Define a
11:46
column you'll write a you'll Define a
11:46
column you'll write a you'll Define a schema to kind of take the place of this
11:49
schema to kind of take the place of this
11:49
schema to kind of take the place of this autogenerated schema you will handw
11:50
autogenerated schema you will handw
11:51
autogenerated schema you will handw write this one column schema and write a
11:53
write this one column schema and write a
11:53
write this one column schema and write a resolver to kind of support that so for
11:55
resolver to kind of support that so for
11:55
resolver to kind of support that so for 80% of your needs one of these
11:57
80% of your needs one of these
11:57
80% of your needs one of these approaches will work for the other 20
11:59
approaches will work for the other 20
12:00
approaches will work for the other 20 you might want to lean on uh the other
12:02
you might want to lean on uh the other
12:02
you might want to lean on uh the other two right so this is not a silver bullet
12:04
two right so this is not a silver bullet
12:04
two right so this is not a silver bullet none of these approaches are you will
12:05
none of these approaches are you will
12:05
none of these approaches are you will have to mix and match it but only two of
12:09
have to mix and match it but only two of
12:09
have to mix and match it but only two of them let you kind of quickly deliver a
12:11
them let you kind of quickly deliver a
12:11
them let you kind of quickly deliver a graph field project and not kind of sit
12:13
graph field project and not kind of sit
12:13
graph field project and not kind of sit and write code endlessly um so that
12:16
and write code endlessly um so that
12:16
and write code endlessly um so that that's one of the kind of patterns that
12:18
that's one of the kind of patterns that
12:18
that's one of the kind of patterns that has been uh emerging in the Graal
12:21
has been uh emerging in the Graal
12:21
has been uh emerging in the Graal ecosystem the other uh thing that has
12:23
ecosystem the other uh thing that has
12:23
ecosystem the other uh thing that has happened is graphi is being used to
12:26
happened is graphi is being used to
12:27
happened is graphi is being used to solve increasingly complex problems it
12:29
solve increasingly complex problems it
12:29
solve increasingly complex problems it is being it was being used for a single
12:31
is being it was being used for a single
12:31
is being it was being used for a single graph earlier now it is being used for a
12:35
graph earlier now it is being used for a
12:35
graph earlier now it is being used for a graph of graphs right so you have
12:37
graph of graphs right so you have
12:37
graph of graphs right so you have multiple teams kind of
12:40
multiple teams kind of
12:40
multiple teams kind of collaborating without expensive uh
12:43
collaborating without expensive uh
12:43
collaborating without expensive uh coordination uh to contribute to a
12:45
coordination uh to contribute to a
12:45
coordination uh to contribute to a single super graph if you will right so
12:49
single super graph if you will right so
12:49
single super graph if you will right so the complexity of use cases is
12:51
the complexity of use cases is
12:51
the complexity of use cases is increasing because graphel has become
12:55
increasing because graphel has become
12:55
increasing because graphel has become this lingua franker for API platform so
12:57
this lingua franker for API platform so
12:57
this lingua franker for API platform so it's a uh
13:00
it's a uh
13:00
it's a uh the problem with different teams
13:02
the problem with different teams
13:02
the problem with different teams heterogeneous systems different kinds of
13:04
heterogeneous systems different kinds of
13:04
heterogeneous systems different kinds of apis how do you kind of standardize that
13:07
apis how do you kind of standardize that
13:08
apis how do you kind of standardize that you go back to that one takeaway I asked
13:10
you go back to that one takeaway I asked
13:10
you go back to that one takeaway I asked you to keep in mind which is types that
13:12
you to keep in mind which is types that
13:12
you to keep in mind which is types that remain consistent regardless of what is
13:15
remain consistent regardless of what is
13:15
remain consistent regardless of what is there in your underlying domain so
13:18
there in your underlying domain so
13:18
there in your underlying domain so this middle layer if it speaks graphql
13:22
this middle layer if it speaks graphql
13:22
this middle layer if it speaks graphql you kind of standardized whatever is
13:24
you kind of standardized whatever is
13:24
you kind of standardized whatever is happening in your individual domains to
13:27
happening in your individual domains to
13:27
happening in your individual domains to graphql and therefore allow a consumer
13:30
graphql and therefore allow a consumer
13:30
graphql and therefore allow a consumer application to speak one language to any
13:33
application to speak one language to any
13:33
application to speak one language to any of your underlying uh domain sources I
13:35
of your underlying uh domain sources I
13:35
of your underlying uh domain sources I use the word language Loosely please
13:37
use the word language Loosely please
13:37
use the word language Loosely please excuse that uh I don't mean to imply C
13:40
excuse that uh I don't mean to imply C
13:40
excuse that uh I don't mean to imply C or whatever I just mean a particular way
13:43
or whatever I just mean a particular way
13:43
or whatever I just mean a particular way of interacting with your underlying
13:44
of interacting with your underlying
13:44
of interacting with your underlying domain but no one needs to know whether
13:47
domain but no one needs to know whether
13:47
domain but no one needs to know whether U underneath your API layers you have
13:50
U underneath your API layers you have
13:50
U underneath your API layers you have SQL Server postgress snowflake or
13:52
SQL Server postgress snowflake or
13:52
SQL Server postgress snowflake or anything uh else at um a front end
13:55
anything uh else at um a front end
13:55
anything uh else at um a front end application should just should just
13:56
application should just should just
13:57
application should just should just never bother uh with uh so that's what's
14:00
never bother uh with uh so that's what's
14:00
never bother uh with uh so that's what's happening with the graphel it is being
14:02
happening with the graphel it is being
14:03
happening with the graphel it is being used to solve the problem of building
14:05
used to solve the problem of building
14:05
used to solve the problem of building API platforms because it provides that
14:07
API platforms because it provides that
14:07
API platforms because it provides that language for people uh to standardize on
14:11
language for people uh to standardize on
14:11
language for people uh to standardize on and the rest of this talk is kind of
14:14
and the rest of this talk is kind of
14:14
and the rest of this talk is kind of taking that approach um and applying it
14:17
taking that approach um and applying it
14:17
taking that approach um and applying it to your underlying domains as well um so
14:21
to your underlying domains as well um so
14:21
to your underlying domains as well um so if you take a look at the graph
14:22
if you take a look at the graph
14:22
if you take a look at the graph landscape right um this is a pretty
14:25
landscape right um this is a pretty
14:25
landscape right um this is a pretty stock landscape diagram for the
14:27
stock landscape diagram for the
14:27
stock landscape diagram for the graphical ecosystem you have Team uh you
14:30
graphical ecosystem you have Team uh you
14:30
graphical ecosystem you have Team uh you have tooling that helps you build um
14:33
have tooling that helps you build um
14:33
have tooling that helps you build um kind of subgraphs on top of individual
14:35
kind of subgraphs on top of individual
14:35
kind of subgraphs on top of individual or multiple data sets or apis um managed
14:39
or multiple data sets or apis um managed
14:39
or multiple data sets or apis um managed by one team you have tools that allow
14:42
by one team you have tools that allow
14:42
by one team you have tools that allow collaboration there are tools that you
14:44
collaboration there are tools that you
14:44
collaboration there are tools that you can consolidate this into that graph of
14:47
can consolidate this into that graph of
14:47
can consolidate this into that graph of graphs and there are tools that help you
14:49
graphs and there are tools that help you
14:49
graphs and there are tools that help you kind of consume graph your apis as well
14:51
kind of consume graph your apis as well
14:51
kind of consume graph your apis as well and what we' have seen in the recent
14:55
and what we' have seen in the recent
14:55
and what we' have seen in the recent past is that the subgraph tooling has
14:58
past is that the subgraph tooling has
14:58
past is that the subgraph tooling has been been moving to more code first and
15:01
been been moving to more code first and
15:01
been been moving to more code first and domain driven approaches right and um uh
15:05
domain driven approaches right and um uh
15:05
domain driven approaches right and um uh there's a whole host of things that have
15:07
there's a whole host of things that have
15:07
there's a whole host of things that have come up here not just from independent
15:08
come up here not just from independent
15:09
come up here not just from independent vendors but also from uh Cloud providers
15:13
vendors but also from uh Cloud providers
15:13
vendors but also from uh Cloud providers and the whole reason for this is if you
15:15
and the whole reason for this is if you
15:15
and the whole reason for this is if you go back to the origins of graph right so
15:18
go back to the origins of graph right so
15:18
go back to the origins of graph right so this is a tweet from Nick shock who's
15:21
this is a tweet from Nick shock who's
15:21
this is a tweet from Nick shock who's one of the co- developers of of graphql
15:24
one of the co- developers of of graphql
15:24
one of the co- developers of of graphql back in Facebook he's moved on to do
15:26
back in Facebook he's moved on to do
15:26
back in Facebook he's moved on to do other things but he said that hey like a
15:28
other things but he said that hey like a
15:28
other things but he said that hey like a lot of people people will fail to scale
15:30
lot of people people will fail to scale
15:30
lot of people people will fail to scale graph or use it effectively because
15:33
graph or use it effectively because
15:33
graph or use it effectively because people forget that before graph became a
15:37
people forget that before graph became a
15:37
people forget that before graph became a thing Facebook had already kind of built
15:39
thing Facebook had already kind of built
15:39
thing Facebook had already kind of built out this data access layer this this
15:43
out this data access layer this this
15:43
out this data access layer this this common layer that interacted with the I
15:46
common layer that interacted with the I
15:46
common layer that interacted with the I don't know um the news feed team the the
15:49
don't know um the news feed team the the
15:49
don't know um the news feed team the the contacts team or the Friends team uh the
15:52
contacts team or the Friends team uh the
15:52
contacts team or the Friends team uh the market I don't think they had
15:53
market I don't think they had
15:53
market I don't think they had Marketplace back then but assume that
15:55
Marketplace back then but assume that
15:55
Marketplace back then but assume that the marketplace team had its own systems
15:57
the marketplace team had its own systems
15:57
the marketplace team had its own systems just standardizing all of them on a
15:59
just standardizing all of them on a
15:59
just standardizing all of them on a common scalable business object layer is
16:02
common scalable business object layer is
16:02
common scalable business object layer is something that Facebook had done before
16:05
something that Facebook had done before
16:05
something that Facebook had done before implementing a thin layer on top of that
16:08
implementing a thin layer on top of that
16:08
implementing a thin layer on top of that with uh graph right just to make the
16:11
with uh graph right just to make the
16:11
with uh graph right just to make the front end to multiple backends
16:13
front end to multiple backends
16:13
front end to multiple backends communication easier now you you you can
16:16
communication easier now you you you can
16:16
communication easier now you you you can use it in completely different context
16:18
use it in completely different context
16:18
use it in completely different context if you want to you're not required to
16:20
if you want to you're not required to
16:20
if you want to you're not required to use it only for those benefits there's
16:22
use it only for those benefits there's
16:22
use it only for those benefits there's lots of benefits as you come down to the
16:24
lots of benefits as you come down to the
16:24
lots of benefits as you come down to the back end as well um and uh uh but having
16:28
back end as well um and uh uh but having
16:28
back end as well um and uh uh but having this
16:29
this
16:29
this this kind of data access layer is uh
16:32
this kind of data access layer is uh
16:32
this kind of data access layer is uh something that is uh important and one
16:36
something that is uh important and one
16:36
something that is uh important and one of the the the Crux of the domain first
16:39
of the the the Crux of the domain first
16:39
of the the the Crux of the domain first approach uh is that you can be metadata
16:42
approach uh is that you can be metadata
16:43
approach uh is that you can be metadata driven to leverage your underlying
16:46
driven to leverage your underlying
16:46
driven to leverage your underlying databases as much as possible to be this
16:50
databases as much as possible to be this
16:50
databases as much as possible to be this business object layer um and I I don't
16:53
business object layer um and I I don't
16:53
business object layer um and I I don't want to belab this point but if you
16:55
want to belab this point but if you
16:55
want to belab this point but if you think about it you spend a lot of time
16:58
think about it you spend a lot of time
16:58
think about it you spend a lot of time getting your database domain right
17:00
getting your database domain right
17:00
getting your database domain right that's the the true snapshot of what is
17:03
that's the the true snapshot of what is
17:03
that's the the true snapshot of what is going on in your system especially folks
17:04
going on in your system especially folks
17:04
going on in your system especially folks who work a lot withp or relational
17:07
who work a lot withp or relational
17:07
who work a lot withp or relational databases right database design is
17:10
databases right database design is
17:10
databases right database design is important because it captures the the
17:12
important because it captures the the
17:12
important because it captures the the state of your systems everything else
17:15
state of your systems everything else
17:15
state of your systems everything else has to connect to this stateful uh
17:18
has to connect to this stateful uh
17:18
has to connect to this stateful uh system to understand what is going on um
17:21
system to understand what is going on um
17:21
system to understand what is going on um domain first
17:23
domain first
17:23
domain first approaches posit that hey you've modeled
17:26
approaches posit that hey you've modeled
17:26
approaches posit that hey you've modeled your domain already why can't I also
17:28
your domain already why can't I also
17:28
your domain already why can't I also model your graph kill schema using the
17:30
model your graph kill schema using the
17:30
model your graph kill schema using the same domain and take care of 80 to 90%
17:34
same domain and take care of 80 to 90%
17:34
same domain and take care of 80 to 90% of your needs most application code is
17:36
of your needs most application code is
17:36
of your needs most application code is cred most application code is just doing
17:39
cred most application code is just doing
17:39
cred most application code is just doing Simple IO with the underlying uh
17:41
Simple IO with the underlying uh
17:41
Simple IO with the underlying uh database domain why don't we just allow
17:43
database domain why don't we just allow
17:43
database domain why don't we just allow that to happen as efficiently as
17:45
that to happen as efficiently as
17:45
that to happen as efficiently as possible and if you need to customize
17:47
possible and if you need to customize
17:47
possible and if you need to customize right business logic which no one can
17:48
right business logic which no one can
17:49
right business logic which no one can help you with right uh that's the the
17:51
help you with right uh that's the the
17:51
help you with right uh that's the the the key principle of domain first
17:54
the key principle of domain first
17:54
the key principle of domain first approaches and this is kind of where the
17:56
approaches and this is kind of where the
17:56
approaches and this is kind of where the graph ecosystem is heading as well in
17:59
graph ecosystem is heading as well in
17:59
graph ecosystem is heading as well in addition to all of those tools that I
18:01
addition to all of those tools that I
18:01
addition to all of those tools that I showed you in the ecosystem um which of
18:04
showed you in the ecosystem um which of
18:04
showed you in the ecosystem um which of course I'm biased with um you
18:07
course I'm biased with um you
18:07
course I'm biased with um you have all kinds of cloud provider
18:09
have all kinds of cloud provider
18:09
have all kinds of cloud provider Services kind of taking the same
18:11
Services kind of taking the same
18:11
Services kind of taking the same approach uh AWS has its own things I
18:13
approach uh AWS has its own things I
18:13
approach uh AWS has its own things I won't get into that today uh but
18:16
won't get into that today uh but
18:16
won't get into that today uh but Microsoft has in the last four to five
18:19
Microsoft has in the last four to five
18:19
Microsoft has in the last four to five months I guess um done two
18:22
months I guess um done two
18:22
months I guess um done two implementations of uh domain first apis
18:26
implementations of uh domain first apis
18:26
implementations of uh domain first apis one with uh fabric um that allows you to
18:29
one with uh fabric um that allows you to
18:29
one with uh fabric um that allows you to connect to diverse set of data sources
18:32
connect to diverse set of data sources
18:32
connect to diverse set of data sources and the other is a collaboration sorry
18:34
and the other is a collaboration sorry
18:34
and the other is a collaboration sorry for this Shameless pedling here but uh
18:37
for this Shameless pedling here but uh
18:37
for this Shameless pedling here but uh the point I'm trying to make is that if
18:39
the point I'm trying to make is that if
18:40
the point I'm trying to make is that if you have a Cosmos TV you want graph AP
18:42
you have a Cosmos TV you want graph AP
18:42
you have a Cosmos TV you want graph AP on top of it you can just use some
18:45
on top of it you can just use some
18:45
on top of it you can just use some middle Weare that will give you instant
18:46
middle Weare that will give you instant
18:46
middle Weare that will give you instant apis and let you customize whatever you
18:49
apis and let you customize whatever you
18:49
apis and let you customize whatever you need for business logic right this is
18:51
need for business logic right this is
18:51
need for business logic right this is the direction in which um I like to say
18:56
the direction in which um I like to say
18:56
the direction in which um I like to say nonprofit uh or rather for profit teams
18:59
nonprofit uh or rather for profit teams
18:59
nonprofit uh or rather for profit teams are in if you're a nonprofit if you're
19:00
are in if you're a nonprofit if you're
19:00
are in if you're a nonprofit if you're looking at like academic stuff and you
19:02
looking at like academic stuff and you
19:02
looking at like academic stuff and you have a lot of money to throw on
19:04
have a lot of money to throw on
19:04
have a lot of money to throw on Professional Services you can start with
19:07
Professional Services you can start with
19:07
Professional Services you can start with let's say a schema first approach and so
19:08
let's say a schema first approach and so
19:08
let's say a schema first approach and so on but the the te leaves have spoken
19:13
on but the the te leaves have spoken
19:13
on but the the te leaves have spoken that like if you want to deliver uh
19:16
that like if you want to deliver uh
19:16
that like if you want to deliver uh successful graft Feld projects in this
19:18
successful graft Feld projects in this
19:18
successful graft Feld projects in this market um bootstrap your projects with
19:22
market um bootstrap your projects with
19:22
market um bootstrap your projects with more quote First more domain first uh
19:24
more quote First more domain first uh
19:24
more quote First more domain first uh stuff um is is my personal
19:29
stuff um is is my personal
19:29
stuff um is is my personal recommendation um so with that uh we'll
19:31
recommendation um so with that uh we'll
19:31
recommendation um so with that uh we'll spend a couple of minutes on API
19:33
spend a couple of minutes on API
19:33
spend a couple of minutes on API platforms I feel like I might be running
19:36
platforms I feel like I might be running
19:36
platforms I feel like I might be running late so I'm going to rush through this
19:38
late so I'm going to rush through this
19:38
late so I'm going to rush through this um again not
19:40
um again not
19:40
um again not um not too many profound points that I
19:44
um not too many profound points that I
19:44
um not too many profound points that I want to make two simple points think of
19:46
want to make two simple points think of
19:46
want to make two simple points think of API platforms like marketplaces there
19:49
API platforms like marketplaces there
19:49
API platforms like marketplaces there are API or data producers there are API
19:52
are API or data producers there are API
19:52
are API or data producers there are API or data consumers you want to make sure
19:54
or data consumers you want to make sure
19:54
or data consumers you want to make sure that both their concerns are addressed
19:56
that both their concerns are addressed
19:56
that both their concerns are addressed and this uh uh this matchmaking of
19:59
and this uh uh this matchmaking of
19:59
and this uh uh this matchmaking of consumers and producers happens as
20:01
consumers and producers happens as
20:01
consumers and producers happens as efficiently as possible right that's the
20:04
efficiently as possible right that's the
20:04
efficiently as possible right that's the uh flywheel that you want to create of
20:06
uh flywheel that you want to create of
20:07
uh flywheel that you want to create of data consumption and Supply whether API
20:09
data consumption and Supply whether API
20:09
data consumption and Supply whether API API format grpc versus rest versus gra
20:12
API format grpc versus rest versus gra
20:12
API format grpc versus rest versus gra none of that matters fundamentally it's
20:14
none of that matters fundamentally it's
20:14
none of that matters fundamentally it's about data people want to read it people
20:16
about data people want to read it people
20:16
about data people want to read it people want to write to it other people want to
20:18
want to write to it other people want to
20:18
want to write to it other people want to do the same as well so just making this
20:20
do the same as well so just making this
20:21
do the same as well so just making this happen as seamlessly as possible is the
20:23
happen as seamlessly as possible is the
20:23
happen as seamlessly as possible is the role of API platforms the second point I
20:25
role of API platforms the second point I
20:25
role of API platforms the second point I want to make is that API platforms again
20:28
want to make is that API platforms again
20:28
want to make is that API platforms again think of Amazon um if you will right um
20:32
think of Amazon um if you will right um
20:32
think of Amazon um if you will right um as a user you ideally don't want to
20:34
as a user you ideally don't want to
20:34
as a user you ideally don't want to write an email to a seller or a vendor
20:37
write an email to a seller or a vendor
20:37
write an email to a seller or a vendor on Amazon you just want to see what what
20:39
on Amazon you just want to see what what
20:39
on Amazon you just want to see what what kind of products you have available
20:41
kind of products you have available
20:41
kind of products you have available check out the ratings check out the
20:43
check out the ratings check out the
20:43
check out the ratings check out the metadata about it and then be able to
20:44
metadata about it and then be able to
20:44
metadata about it and then be able to give your payment information and check
20:46
give your payment information and check
20:46
give your payment information and check it out yourself Self Serve access to
20:48
it out yourself Self Serve access to
20:49
it out yourself Self Serve access to data is the goal of any API platform um
20:53
data is the goal of any API platform um
20:53
data is the goal of any API platform um which means that you need to do what is
20:56
which means that you need to do what is
20:56
which means that you need to do what is called uh not exclusively but in the
20:59
called uh not exclusively but in the
20:59
called uh not exclusively but in the Graal ecosystem as Federation you should
21:01
Graal ecosystem as Federation you should
21:01
Graal ecosystem as Federation you should be able to provide OnDemand Federation
21:05
be able to provide OnDemand Federation
21:05
be able to provide OnDemand Federation across any of your subgraphs um for you
21:09
across any of your subgraphs um for you
21:09
across any of your subgraphs um for you to provide an effective Marketplace so
21:12
to provide an effective Marketplace so
21:12
to provide an effective Marketplace so if let's say um I provide there are
21:15
if let's say um I provide there are
21:15
if let's say um I provide there are three teams or three sellers in our
21:17
three teams or three sellers in our
21:17
three teams or three sellers in our Marketplace users orders and reviews
21:20
Marketplace users orders and reviews
21:20
Marketplace users orders and reviews these are managed by different
21:22
these are managed by different
21:22
these are managed by different teams as a platform provider as a
21:25
teams as a platform provider as a
21:25
teams as a platform provider as a platform architect or a developer I
21:27
platform architect or a developer I
21:27
platform architect or a developer I should be able ble to let consumers of
21:31
should be able ble to let consumers of
21:31
should be able ble to let consumers of this API
21:32
this API
21:32
this API platform run queries such as this right
21:35
platform run queries such as this right
21:36
platform run queries such as this right give me users who have placed more than
21:37
give me users who have placed more than
21:37
give me users who have placed more than 10 orders sorted by the count of the
21:40
10 orders sorted by the count of the
21:40
10 orders sorted by the count of the reviews so you can kind of Imagine The
21:41
reviews so you can kind of Imagine The
21:41
reviews so you can kind of Imagine The graphical query or the SQL query if you
21:43
graphical query or the SQL query if you
21:43
graphical query or the SQL query if you want to right uh select users select
21:45
want to right uh select users select
21:45
want to right uh select users select start from users uh where users.
21:49
start from users uh where users.
21:49
start from users uh where users. order uh greater than 10 uh order by
21:53
order uh greater than 10 uh order by
21:53
order uh greater than 10 uh order by users. reviews over simplification but
21:57
users. reviews over simplification but
21:57
users. reviews over simplification but users or and reviews are managed by
22:00
users or and reviews are managed by
22:00
users or and reviews are managed by three different teams their interfaces
22:02
three different teams their interfaces
22:02
three different teams their interfaces are apis it's not just it's not three
22:05
are apis it's not just it's not three
22:05
are apis it's not just it's not three simple tables right it's it's three
22:06
simple tables right it's it's three
22:06
simple tables right it's it's three different teams and three different
22:08
different teams and three different
22:08
different teams and three different systems three different apis if you will
22:11
systems three different apis if you will
22:11
systems three different apis if you will um and you need to be able to provide uh
22:13
um and you need to be able to provide uh
22:13
um and you need to be able to provide uh this kind of on demand joins uh for a
22:18
this kind of on demand joins uh for a
22:18
this kind of on demand joins uh for a truly effective and Powerful API
22:20
truly effective and Powerful API
22:20
truly effective and Powerful API platform because these are the use cases
22:23
platform because these are the use cases
22:23
platform because these are the use cases that you really need from an API
22:24
that you really need from an API
22:24
that you really need from an API platform right um if if if
22:29
platform right um if if if
22:29
platform right um if if if if your application is scoped just to
22:32
if your application is scoped just to
22:32
if your application is scoped just to the users team you probably have your
22:35
the users team you probably have your
22:35
the users team you probably have your own systems you don't need like you know
22:37
own systems you don't need like you know
22:37
own systems you don't need like you know data from orders and reviews it's a very
22:39
data from orders and reviews it's a very
22:39
data from orders and reviews it's a very simple um process and something that
22:41
simple um process and something that
22:41
simple um process and something that you're used to uh the moment you get
22:44
you're used to uh the moment you get
22:44
you're used to uh the moment you get into multi- team multi repo kind of
22:46
into multi- team multi repo kind of
22:46
into multi- team multi repo kind of situations is where things get tricky
22:48
situations is where things get tricky
22:48
situations is where things get tricky because um the choice of your boundary
22:52
because um the choice of your boundary
22:52
because um the choice of your boundary between teams whether you um choose to
22:55
between teams whether you um choose to
22:55
between teams whether you um choose to go straight to the data source whether
22:56
go straight to the data source whether
22:56
go straight to the data source whether you choose to work with the rest API
22:58
you choose to work with the rest API
22:58
you choose to work with the rest API whether you choose to work with graph
23:00
whether you choose to work with graph
23:00
whether you choose to work with graph apis even has a big bearing on how
23:04
apis even has a big bearing on how
23:04
apis even has a big bearing on how powerful your joints can be um there's
23:06
powerful your joints can be um there's
23:06
powerful your joints can be um there's some some literature on this open uh
23:09
some some literature on this open uh
23:09
some some literature on this open uh framework called supergraph uh that we
23:13
framework called supergraph uh that we
23:13
framework called supergraph uh that we kind of maintain we we maintain that
23:15
kind of maintain we we maintain that
23:15
kind of maintain we we maintain that repo and and encourage this discussion
23:17
repo and and encourage this discussion
23:17
repo and and encourage this discussion at the uh Community um we've spoken at
23:20
at the uh Community um we've spoken at
23:20
at the uh Community um we've spoken at length about it but the boundary at
23:23
length about it but the boundary at
23:23
length about it but the boundary at which you define the difference between
23:25
which you define the difference between
23:25
which you define the difference between team one and team two matters and has an
23:28
team one and team two matters and has an
23:28
team one and team two matters and has an impact on the quality of your API but
23:30
impact on the quality of your API but
23:30
impact on the quality of your API but this is the goal of any powerful API
23:33
this is the goal of any powerful API
23:33
this is the goal of any powerful API platform um least path of least
23:36
platform um least path of least
23:36
platform um least path of least resistance and effort to be able to do
23:38
resistance and effort to be able to do
23:38
resistance and effort to be able to do any kind of joint um that's the API
23:41
any kind of joint um that's the API
23:41
any kind of joint um that's the API platform U uh stuff and as you kind of
23:45
platform U uh stuff and as you kind of
23:45
platform U uh stuff and as you kind of Journey Across graph your your maturity
23:48
Journey Across graph your your maturity
23:48
Journey Across graph your your maturity is going to increase based on how many
23:51
is going to increase based on how many
23:51
is going to increase based on how many such teams are involved in your CFT K
23:53
such teams are involved in your CFT K
23:53
such teams are involved in your CFT K platform so I'm going to skip over this
23:56
platform so I'm going to skip over this
23:56
platform so I'm going to skip over this and uh uh
23:59
and uh uh
23:59
and uh uh just give me one
24:01
just give me one
24:01
just give me one second
24:04
second
24:04
second uh I think I should be able to move to a
24:07
uh I think I should be able to move to a
24:07
uh I think I should be able to move to a demo so let me give me one second let me
24:10
demo so let me give me one second let me
24:10
demo so let me give me one second let me just open
24:16
up
24:18
up
24:18
up um let me open the application that I
24:21
um let me open the application that I
24:21
um let me open the application that I had in mind for uh this
24:25
had in mind for uh this
24:25
had in mind for uh this demo all right
24:33
um Simon could you give me a quick
24:35
um Simon could you give me a quick
24:35
um Simon could you give me a quick confirmation um if you can hear me um
24:39
confirmation um if you can hear me um
24:39
confirmation um if you can hear me um yes siip I can hear you loud and clear
24:41
yes siip I can hear you loud and clear
24:41
yes siip I can hear you loud and clear but I think you stopped the screen share
24:43
but I think you stopped the screen share
24:43
but I think you stopped the screen share or perhaps you close the I did I did I'm
24:45
or perhaps you close the I did I did I'm
24:45
or perhaps you close the I did I did I'm going to switch to a different browser
24:47
going to switch to a different browser
24:47
going to switch to a different browser um yeah all right uh going again let
24:54
me let me just share
24:59
me let me just share
24:59
me let me just share W if you can still hear
25:03
me I'm going to share this entire window
25:06
me I'm going to share this entire window
25:06
me I'm going to share this entire window um so that it's
25:08
um so that it's
25:08
um so that it's easier I see um again I'm going to use
25:12
easier I see um again I'm going to use
25:12
easier I see um again I'm going to use uh the tool you can see my screen all
25:15
uh the tool you can see my screen all
25:15
uh the tool you can see my screen all right cool sorry um I'm going to use a
25:17
right cool sorry um I'm going to use a
25:17
right cool sorry um I'm going to use a tool that we build um I've created a
25:19
tool that we build um I've created a
25:19
tool that we build um I've created a special kind of project for uh uh this
25:22
special kind of project for uh uh this
25:22
special kind of project for uh uh this stream and um um what I'm going to do is
25:27
stream and um um what I'm going to do is
25:27
stream and um um what I'm going to do is I have have a couple of databases I have
25:31
I have have a couple of databases I have
25:31
I have have a couple of databases I have two SQL Server databases what I'm going
25:33
two SQL Server databases what I'm going
25:34
two SQL Server databases what I'm going to do in the next few minutes is build
25:36
to do in the next few minutes is build
25:36
to do in the next few minutes is build this API platform in front of you in the
25:38
this API platform in front of you in the
25:38
this API platform in front of you in the next few uh minutes using this domain
25:41
next few uh minutes using this domain
25:41
next few uh minutes using this domain first approach all right so this is my
25:44
first approach all right so this is my
25:44
first approach all right so this is my project this is what is called graphical
25:47
project this is what is called graphical
25:47
project this is what is called graphical in the graphical ecosystem it's a tool
25:49
in the graphical ecosystem it's a tool
25:49
in the graphical ecosystem it's a tool that lets you play with your graphical
25:52
that lets you play with your graphical
25:52
that lets you play with your graphical uh API I I don't have any types any data
25:56
uh API I I don't have any types any data
25:56
uh API I I don't have any types any data in My Graph API which is being served at
25:58
in My Graph API which is being served at
25:58
in My Graph API which is being served at this endpoint
26:00
this endpoint
26:00
this endpoint um so you will not see anything here so
26:04
um so you will not see anything here so
26:04
um so you will not see anything here so to remedy that what I'm going to do
26:07
to remedy that what I'm going to do
26:07
to remedy that what I'm going to do is I am going I'm using a middleware
26:11
is I am going I'm using a middleware
26:11
is I am going I'm using a middleware tool that will derive your graphql
26:14
tool that will derive your graphql
26:14
tool that will derive your graphql schema from the underlying database
26:17
schema from the underlying database
26:18
schema from the underlying database right so it's a tool that supports a lot
26:21
right so it's a tool that supports a lot
26:21
right so it's a tool that supports a lot of things I'm not going to get into any
26:22
of things I'm not going to get into any
26:22
of things I'm not going to get into any of that I'm going to add a SQL Server
26:25
of that I'm going to add a SQL Server
26:25
of that I'm going to add a SQL Server database right um let me connect this
26:28
database right um let me connect this
26:28
database right um let me connect this all right so I'll give it a name I'm
26:30
all right so I'll give it a name I'm
26:30
all right so I'll give it a name I'm going to call it
26:32
going to call it
26:32
going to call it subgraph one uh I'm going to give a
26:35
subgraph one uh I'm going to give a
26:35
subgraph one uh I'm going to give a database youl this is uh credentials so
26:40
database youl this is uh credentials so
26:40
database youl this is uh credentials so this are open so please do not do not
26:42
this are open so please do not do not
26:42
this are open so please do not do not hack my
26:44
hack my
26:44
hack my database uh because the password is
26:46
database uh because the password is
26:46
database uh because the password is available here so I'm just going to
26:48
available here so I'm just going to
26:49
available here so I'm just going to connect this this is basically this
26:50
connect this this is basically this
26:50
connect this this is basically this middle web knowing the existence of my
26:54
middle web knowing the existence of my
26:54
middle web knowing the existence of my uh
26:55
uh
26:55
uh database uh I'm doing something wrong
26:57
database uh I'm doing something wrong
26:57
database uh I'm doing something wrong here
27:02
um
27:04
um
27:04
um [Music]
27:06
[Music]
27:06
[Music] datab this URL let me just do
27:10
datab this URL let me just do
27:10
datab this URL let me just do this oh okay this is uh this is erroring
27:14
this oh okay this is uh this is erroring
27:14
this oh okay this is uh this is erroring out thankfully I do have another project
27:16
out thankfully I do have another project
27:16
out thankfully I do have another project where I did um add this so let me just
27:19
where I did um add this so let me just
27:19
where I did um add this so let me just quickly go here just a second just a
27:24
quickly go here just a second just a
27:24
quickly go here just a second just a [Music]
27:26
[Music]
27:26
[Music] second how do
27:32
I just a
27:42
second all right so what I'm going to do
27:45
second all right so what I'm going to do
27:45
second all right so what I'm going to do is uh I'm going to have to reverse
27:49
is uh I'm going to have to reverse
27:49
is uh I'm going to have to reverse engineer this so let me just remove some
27:51
engineer this so let me just remove some
27:51
engineer this so let me just remove some of the things that I had in another
27:53
of the things that I had in another
27:53
of the things that I had in another project apologies for this I don't want
27:56
project apologies for this I don't want
27:56
project apologies for this I don't want to go to Azure and add
28:00
to go to Azure and add
28:00
to go to Azure and add uh this thing let me remove customers
28:05
modify unra
28:10
table
28:13
table
28:13
table continue all right I'm going to drop
28:15
continue all right I'm going to drop
28:15
continue all right I'm going to drop customer address as well
28:19
customer address as well
28:19
customer address as well modify please bear with me folks a
28:21
modify please bear with me folks a
28:21
modify please bear with me folks a couple of minutes and I should be able
28:23
couple of minutes and I should be able
28:23
couple of minutes and I should be able to do this uh demo for you um all right
28:28
to do this uh demo for you um all right
28:28
to do this uh demo for you um all right cool so I'm I'm I'm going to use this
28:31
cool so I'm I'm I'm going to use this
28:31
cool so I'm I'm I'm going to use this project instead my apologies I haven't
28:33
project instead my apologies I haven't
28:33
project instead my apologies I haven't Whit listed the the IP of this new
28:35
Whit listed the the IP of this new
28:35
Whit listed the the IP of this new project in my Azure uh database um so
28:39
project in my Azure uh database um so
28:39
project in my Azure uh database um so I'm I'm just going to use this new
28:40
I'm I'm just going to use this new
28:41
I'm I'm just going to use this new project called uh is this thing uh
28:44
project called uh is this thing uh
28:44
project called uh is this thing uh Mutual a 6 it's a randomly generated
28:46
Mutual a 6 it's a randomly generated
28:46
Mutual a 6 it's a randomly generated thing so assuming I was able to get
28:49
thing so assuming I was able to get
28:49
thing so assuming I was able to get through this step right what you would
28:51
through this step right what you would
28:51
through this step right what you would have seen is an interface that says that
28:54
have seen is an interface that says that
28:54
have seen is an interface that says that okay this domain First Tool has been
28:57
okay this domain First Tool has been
28:57
okay this domain First Tool has been able to talk to the SQL Server instance
29:00
able to talk to the SQL Server instance
29:00
able to talk to the SQL Server instance it knows the existence of let's say two
29:02
it knows the existence of let's say two
29:02
it knows the existence of let's say two tables in this uh database right I did
29:05
tables in this uh database right I did
29:05
tables in this uh database right I did provide the database name in the
29:06
provide the database name in the
29:06
provide the database name in the connection string so it knows that there
29:09
connection string so it knows that there
29:09
connection string so it knows that there is a table called customer it also knows
29:11
is a table called customer it also knows
29:11
is a table called customer it also knows that there is a table called customer
29:13
that there is a table called customer
29:13
that there is a table called customer address now customer and customer
29:15
address now customer and customer
29:15
address now customer and customer address are related to each other right
29:17
address are related to each other right
29:17
address are related to each other right so we will take a look at how to build
29:20
so we will take a look at how to build
29:20
so we will take a look at how to build and this is in the same database for now
29:22
and this is in the same database for now
29:22
and this is in the same database for now so we'll take a look at how to uh kind
29:24
so we'll take a look at how to uh kind
29:25
so we'll take a look at how to uh kind of Define a relationship uh sorry expose
29:27
of Define a relationship uh sorry expose
29:27
of Define a relationship uh sorry expose the these tables as part of our Graal
29:29
the these tables as part of our Graal
29:29
the these tables as part of our Graal schema and also build out a relationship
29:32
schema and also build out a relationship
29:32
schema and also build out a relationship so let's do this step by step so I'm
29:34
so let's do this step by step so I'm
29:34
so let's do this step by step so I'm going to track the customer table um I
29:38
going to track the customer table um I
29:38
going to track the customer table um I also have a bunch of other tables
29:40
also have a bunch of other tables
29:40
also have a bunch of other tables already tracked please ignore them for
29:42
already tracked please ignore them for
29:42
already tracked please ignore them for the time being I'm going to track the
29:45
the time being I'm going to track the
29:45
the time being I'm going to track the customer table by tracking the customer
29:47
customer table by tracking the customer
29:47
customer table by tracking the customer table I'm telling this domain first tool
29:50
table I'm telling this domain first tool
29:50
table I'm telling this domain first tool that hey the customer table which is
29:54
that hey the customer table which is
29:54
that hey the customer table which is this right which has uh customer ID name
29:57
this right which has uh customer ID name
29:57
this right which has uh customer ID name title first name the usual uh columns
30:00
title first name the usual uh columns
30:00
title first name the usual uh columns that you would expect in a customer
30:02
that you would expect in a customer
30:02
that you would expect in a customer table I want to expose this data and
30:06
table I want to expose this data and
30:06
table I want to expose this data and this uh these columns and these this
30:09
this uh these columns and these this
30:09
this uh these columns and these this data in My Graph API so the moment I
30:12
data in My Graph API so the moment I
30:12
data in My Graph API so the moment I track it the domain First Tool
30:16
track it the domain First Tool
30:16
track it the domain First Tool introspects the schema of the table and
30:19
introspects the schema of the table and
30:19
introspects the schema of the table and is able to generate a graphql API that
30:22
is able to generate a graphql API that
30:22
is able to generate a graphql API that can support this so for example this is
30:25
can support this so for example this is
30:25
can support this so for example this is my uh table we just looked at this one
30:28
my uh table we just looked at this one
30:28
my uh table we just looked at this one I'm going to query first name last name
30:31
I'm going to query first name last name
30:31
I'm going to query first name last name and customer ID and I'm going to Simply
30:33
and customer ID and I'm going to Simply
30:33
and customer ID and I'm going to Simply run this query it's going to take a few
30:35
run this query it's going to take a few
30:35
run this query it's going to take a few seconds um I can speed this up by adding
30:39
seconds um I can speed this up by adding
30:39
seconds um I can speed this up by adding caching as well
30:43
um but I'm instantly able to go from
30:47
um but I'm instantly able to go from
30:47
um but I'm instantly able to go from pointing this tool to my database and
30:51
pointing this tool to my database and
30:51
pointing this tool to my database and getting a graphql API that is able to
30:53
getting a graphql API that is able to
30:53
getting a graphql API that is able to query this uh now just to show you that
30:56
query this uh now just to show you that
30:56
query this uh now just to show you that I'm I'm not U doing any hand waving here
30:59
I'm I'm not U doing any hand waving here
30:59
I'm I'm not U doing any hand waving here I'm just going to go and change uh can I
31:02
I'm just going to go and change uh can I
31:03
I'm just going to go and change uh can I edit this yeah we don't support this for
31:04
edit this yeah we don't support this for
31:04
edit this yeah we don't support this for SQL server but I can maybe uh see if I
31:07
SQL server but I can maybe uh see if I
31:07
SQL server but I can maybe uh see if I can
31:09
can
31:09
can insert uh not really but this is my data
31:13
insert uh not really but this is my data
31:13
insert uh not really but this is my data set and this is the same data set that
31:15
set and this is the same data set that
31:15
set and this is the same data set that I'm able to query a customer ID one is G
31:19
I'm able to query a customer ID one is G
31:19
I'm able to query a customer ID one is G Orlando let's go back to our data and
31:23
Orlando let's go back to our data and
31:23
Orlando let's go back to our data and run this again and in a few seconds we
31:25
run this again and in a few seconds we
31:25
run this again and in a few seconds we will have the same data I really wanted
31:27
will have the same data I really wanted
31:27
will have the same data I really wanted to edit this and show you that you know
31:29
to edit this and show you that you know
31:29
to edit this and show you that you know this is uh not made up U now I can I can
31:32
this is uh not made up U now I can I can
31:32
this is uh not made up U now I can I can sense the Skeptics and the audience are
31:34
sense the Skeptics and the audience are
31:34
sense the Skeptics and the audience are like hey my model uh code will give me
31:38
like hey my model uh code will give me
31:38
like hey my model uh code will give me this this is just API on top of a single
31:40
this this is just API on top of a single
31:41
this this is just API on top of a single table what the hell are you trying to
31:42
table what the hell are you trying to
31:42
table what the hell are you trying to prove here you're right it doesn't make
31:44
prove here you're right it doesn't make
31:44
prove here you're right it doesn't make a lot of sense to do this on just one
31:46
a lot of sense to do this on just one
31:46
a lot of sense to do this on just one table because that's what your or any or
31:49
table because that's what your or any or
31:49
table because that's what your or any or or or or model layer will give you I
31:52
or or or model layer will give you I
31:52
or or or model layer will give you I also want to track customer address
31:55
also want to track customer address
31:55
also want to track customer address right um let me track customer address
31:59
right um let me track customer address
31:59
right um let me track customer address now now let's take a look at the schema
32:02
now now let's take a look at the schema
32:02
now now let's take a look at the schema of this thing um very naturally it has
32:05
of this thing um very naturally it has
32:05
of this thing um very naturally it has the customer ID and an address ID and
32:07
the customer ID and an address ID and
32:07
the customer ID and an address ID and address type and so on it is not very
32:10
address type and so on it is not very
32:11
address type and so on it is not very hard to imagine that if I can query the
32:15
hard to imagine that if I can query the
32:15
hard to imagine that if I can query the customer table I can also query the
32:18
customer table I can also query the
32:18
customer table I can also query the customer address table which we just
32:20
customer address table which we just
32:20
customer address table which we just tracked right um so let me get
32:23
tracked right um so let me get
32:23
tracked right um so let me get this and let me run this query instead
32:27
this and let me run this query instead
32:27
this and let me run this query instead of the customer this thing um so now I
32:31
of the customer this thing um so now I
32:31
of the customer this thing um so now I have this I have data coming from this
32:33
have this I have data coming from this
32:33
have this I have data coming from this table uh as well right again the same
32:36
table uh as well right again the same
32:36
table uh as well right again the same thing I have autogenerated this API this
32:38
thing I have autogenerated this API this
32:38
thing I have autogenerated this API this graph API on a single table the
32:41
graph API on a single table the
32:41
graph API on a single table the interesting thing is that if I want to
32:44
interesting thing is that if I want to
32:44
interesting thing is that if I want to take let's say this customer ID and join
32:47
take let's say this customer ID and join
32:47
take let's say this customer ID and join it on the customer table and get
32:49
it on the customer table and get
32:49
it on the customer table and get customer data and address data in the
32:52
customer data and address data in the
32:52
customer data and address data in the same
32:53
same
32:53
same query I would have had to write some
32:56
query I would have had to write some
32:56
query I would have had to write some code um uh
32:58
code um uh
32:58
code um uh some controller code some model code to
33:00
some controller code some model code to
33:00
some controller code some model code to can join this to Define that
33:01
can join this to Define that
33:01
can join this to Define that relationship and filter them based on
33:03
relationship and filter them based on
33:03
relationship and filter them based on this join condition or I would have had
33:05
this join condition or I would have had
33:05
this join condition or I would have had to write a custom SQL and then expose
33:08
to write a custom SQL and then expose
33:08
to write a custom SQL and then expose that as code um I don't need to do
33:11
that as code um I don't need to do
33:11
that as code um I don't need to do anything of that sort because I am
33:13
anything of that sort because I am
33:13
anything of that sort because I am taking advantage of the domain if I go
33:15
taking advantage of the domain if I go
33:15
taking advantage of the domain if I go back to my data tab I know that there is
33:19
back to my data tab I know that there is
33:19
back to my data tab I know that there is a foreign key constraint from customer
33:21
a foreign key constraint from customer
33:21
a foreign key constraint from customer address customer ID to customer ID I'm
33:23
address customer ID to customer ID I'm
33:24
address customer ID to customer ID I'm going to track this the moment I do this
33:27
going to track this the moment I do this
33:27
going to track this the moment I do this and
33:29
and
33:29
and um if I go to my customer
33:32
um if I go to my customer
33:32
um if I go to my customer address table I can define a
33:36
address table I can define a
33:36
address table I can define a relationship because we know fory
33:38
relationship because we know fory
33:38
relationship because we know fory constraints can let you have one to one
33:42
constraints can let you have one to one
33:42
constraints can let you have one to one or one to many relationships between two
33:44
or one to many relationships between two
33:44
or one to many relationships between two sets of tables for example customer can
33:47
sets of tables for example customer can
33:47
sets of tables for example customer can have multiple addresses so if I go to
33:49
have multiple addresses so if I go to
33:49
have multiple addresses so if I go to the customer table I'm going to go to
33:51
the customer table I'm going to go to
33:51
the customer table I'm going to go to the relationships Tab and it can already
33:53
the relationships Tab and it can already
33:54
the relationships Tab and it can already suggest this right uh sorry
33:58
suggest this right uh sorry
33:58
suggest this right uh sorry this already exist like this definition
34:01
this already exist like this definition
34:01
this already exist like this definition already existed customer. customer ID is
34:04
already existed customer. customer ID is
34:05
already existed customer. customer ID is equal to customer address. customer ID
34:07
equal to customer address. customer ID
34:07
equal to customer address. customer ID it's a relationship I can Define because
34:10
it's a relationship I can Define because
34:10
it's a relationship I can Define because I track the foreign key constraint and I
34:12
I track the foreign key constraint and I
34:12
I track the foreign key constraint and I ask the graph kill schema to also learn
34:15
ask the graph kill schema to also learn
34:15
ask the graph kill schema to also learn from that fory constraint so it
34:17
from that fory constraint so it
34:17
from that fory constraint so it automatically adds this relationship the
34:20
automatically adds this relationship the
34:20
automatically adds this relationship the inverse is also True by the way this is
34:22
inverse is also True by the way this is
34:22
inverse is also True by the way this is an array relationship because customer
34:24
an array relationship because customer
34:24
an array relationship because customer multiple addresses you will see the uh
34:27
multiple addresses you will see the uh
34:27
multiple addresses you will see the uh oppers in U uh the relationship
34:30
oppers in U uh the relationship
34:30
oppers in U uh the relationship definition here uh I can add a customer
34:35
definition here uh I can add a customer
34:35
definition here uh I can add a customer relationship from customer address to
34:37
relationship from customer address to
34:37
relationship from customer address to this now this is going to be an object
34:39
this now this is going to be an object
34:39
this now this is going to be an object relationship a onetoone relationship so
34:41
relationship a onetoone relationship so
34:41
relationship a onetoone relationship so let me just quickly add this um I'm
34:44
let me just quickly add this um I'm
34:44
let me just quickly add this um I'm going to call this customer let me track
34:46
going to call this customer let me track
34:46
going to call this customer let me track this relationship okay by virtue of
34:49
this relationship okay by virtue of
34:50
this relationship okay by virtue of doing that what now happens is where I
34:54
doing that what now happens is where I
34:54
doing that what now happens is where I was simply querying a simple table I can
34:58
was simply querying a simple table I can
34:58
was simply querying a simple table I can now say get me data from a related table
35:01
now say get me data from a related table
35:01
now say get me data from a related table so if you see this customer address uh
35:04
so if you see this customer address uh
35:04
so if you see this customer address uh uh field in in my schema it suddenly has
35:07
uh field in in my schema it suddenly has
35:07
uh field in in my schema it suddenly has this new thing called customer here
35:10
this new thing called customer here
35:10
this new thing called customer here that's because we added that
35:11
that's because we added that
35:11
that's because we added that relationship I can choose to start
35:14
relationship I can choose to start
35:14
relationship I can choose to start quering first name last name here so for
35:17
quering first name last name here so for
35:17
quering first name last name here so for every address I can get the
35:20
every address I can get the
35:20
every address I can get the corresponding customer in the same
35:22
corresponding customer in the same
35:22
corresponding customer in the same request I can run this query this is a
35:26
request I can run this query this is a
35:26
request I can run this query this is a Json
35:27
Json
35:27
Json sorry inter per it's time to wrap yeah
35:30
sorry inter per it's time to wrap yeah
35:30
sorry inter per it's time to wrap yeah all right cool so I think I'm almost
35:32
all right cool so I think I'm almost
35:32
all right cool so I think I'm almost through with this uh I was able to show
35:34
through with this uh I was able to show
35:34
through with this uh I was able to show you how to kind of compose or do this on
35:37
you how to kind of compose or do this on
35:37
you how to kind of compose or do this on demand join on um two tables you can
35:41
demand join on um two tables you can
35:41
demand join on um two tables you can extrapolate this across two databases as
35:44
extrapolate this across two databases as
35:44
extrapolate this across two databases as well and what I mean by domain first or
35:48
well and what I mean by domain first or
35:48
well and what I mean by domain first or being metadata driven is just this just
35:53
being metadata driven is just this just
35:53
being metadata driven is just this just give me one second let me just
35:56
give me one second let me just
35:56
give me one second let me just open uh
35:59
open uh
35:59
open uh right everything that we looked at
36:01
right everything that we looked at
36:01
right everything that we looked at everything that we did in that pretty UI
36:03
everything that we did in that pretty UI
36:03
everything that we did in that pretty UI is actually adding to Json or yaml
36:08
is actually adding to Json or yaml
36:08
is actually adding to Json or yaml specification and this is what it means
36:11
specification and this is what it means
36:11
specification and this is what it means to be domain first or metadata R you
36:14
to be domain first or metadata R you
36:14
to be domain first or metadata R you take the underly domain you translate it
36:16
take the underly domain you translate it
36:16
take the underly domain you translate it into something standardized what we call
36:19
into something standardized what we call
36:19
into something standardized what we call metadata and what you did for SQL Server
36:22
metadata and what you did for SQL Server
36:22
metadata and what you did for SQL Server you can do it on snowflake you can do it
36:23
you can do it on snowflake you can do it
36:23
you can do it on snowflake you can do it on postest standardize all of them on
36:26
on postest standardize all of them on
36:26
on postest standardize all of them on this Json that you're looking at and
36:28
this Json that you're looking at and
36:28
this Json that you're looking at and have a way for you to query um any
36:31
have a way for you to query um any
36:31
have a way for you to query um any underlying Source uh with this
36:34
underlying Source uh with this
36:34
underlying Source uh with this information um
36:39
[Music]