HomeVideos

What's New in Data API builder (DAB) 2.0 | Data Exposed

Now Playing

What's New in Data API builder (DAB) 2.0 | Data Exposed

Transcript

493 segments

0:00

Data API builder 2.0 was recently

0:02

released. Learn all about what data API

0:05

builder is, how it works, what you can

0:07

use it for, and get a sneak peek at a

0:09

demo this week on Data Exposed.

0:22

Hi, I'm Anna Hoffman and welcome back to

0:24

Data Exposed. Today we have an exciting

0:26

episode with Jerry Nixon. Jerry, thanks

0:28

so much for coming on the show.

0:30

>> Thanks, Anna. It's great to be here.

0:31

Thanks for having me back.

0:33

>> Yeah, it's great to have you and today

0:35

we're talking about Data API builder,

0:37

what it is, what's new, and anything

0:40

else Jerry thinks we should know.

0:42

Um, so Jerry, let's get right into it.

0:44

Can you tell us a little bit about what

0:47

Data API builder is and why people

0:49

should care?

0:50

>> Yeah, absolutely. Data API builder is

0:52

one of the things I love talking about

0:53

because most people don't believe it as

0:56

I describe it. So, the first thing just

0:58

to say is before I even tell you how

1:00

this fits into a regular architecture,

1:02

is this is an open source project for

1:03

Microsoft, free license, and there's no

1:06

special strings attached. That means you

1:08

can use it on prem, you can use it in

1:10

Azure, or you can use it even in AWS and

1:12

it's totally cool. Where it fits is an

1:15

important kind of discussion point and

1:17

it really is that in between your

1:19

application and the database. One way or

1:22

another, your application needs to talk

1:23

to your database and either you include

1:25

all of that logic in your app, all that

1:27

logic in maybe an a an abstracted API

1:30

for your app, or you just delete all of

1:33

that code, delete the entire section of

1:35

your repository, and uh, replace it with

1:37

this drop-in replacement of Data API

1:39

builder which gives you a REST API

1:42

directly into SQL, or a GraphQL API

1:45

directly into SQL. And with the release

1:48

of 2.0 last month, we now have an MCP

1:51

directly into SQL if your application is

1:54

an agentic app as well. So, we have done

1:57

what every engineer wants to do. If you

2:00

had the unlimited time and budget to be

2:02

able to build a super duper API with all

2:05

of the filtering and pagination and

2:07

authentication and all the things built

2:09

into it, that's what we've done for you.

2:11

Because it's open source, you can go in

2:13

and evaluate the code for yourself. See

2:15

that it's not exotic. This isn't

2:17

code generation or anything like that.

2:19

It drops in like a container or a

2:21

sidecar process to your website, making

2:24

it so that frankly, you don't have to

2:26

build the sort of redundant CRUD

2:29

operation back into your database. You

2:31

can rely on us doing it correctly for

2:33

you. And so,

2:34

it's pretty sweet. 2.0 coming out gave

2:36

us a lot of new features, including the

2:39

ability

2:40

to cache into Redis, a new

2:43

authentication method of OBO or on

2:45

behalf of that allows us to pass in

2:46

credentials.

2:48

And you know, integration with

2:50

with Key Vault and all the things that

2:52

you would want from an enterprise-grade

2:54

ready-to-go drop-in replacement

2:56

production API for your app. What's nice

2:59

is this is tiny. I could talk about it

3:01

for a long, long time because of all of

3:02

its features, but it's a tiny, tiny

3:05

container that you would drop into your

3:06

topology and presto, you have it. And

3:08

you just configure it with a JSON file.

3:10

Now, that layout that you were just

3:12

showing is

3:14

really the summary of everything that we

3:16

do and why what makes Data API Builder

3:19

special. So, that one JSON file that you

3:21

provide, the config file down at the

3:23

bottom, that is passed into the

3:25

container, mounted as a file, and we

3:28

dynamically then through the runtime

3:30

engine create in-memory abstractions

3:33

that map to whatever it is in your

3:35

database you're exposing. So, in that

3:37

JSON file, you say, "Here's my

3:39

connection string, however it is you

3:40

connect, if it's managed instance or

3:43

username password off or

3:45

pass-through, whatever it is." And then

3:48

we'll we'll connect to your database.

3:50

Then in that

3:52

file, you also say here are the tables,

3:53

views, and stored procedures that you

3:55

want to expose and Azure SQL or in

3:58

Postgres or in MySQL or in Cosmos. And

4:00

then we go find those, validate that

4:02

through the meta metadata, and create

4:04

this sort of in-memory schema that as

4:07

your application starts to interact with

4:09

the the API, we start building the

4:12

queries on the back end for you so that

4:14

you can interact quickly with the

4:15

database. And what's great about it,

4:17

Anna, is it takes it so that your

4:19

engineering team doesn't have to be a

4:21

super duper engineering team that knows

4:23

T-SQL and how to craft a really great uh

4:26

you know, query. Instead, all you need

4:29

is a development team that understands

4:31

JSON and HTTP, interacts with an

4:33

endpoint like everything else, and then

4:36

allow us to take the the surface area of

4:39

the API that kind of kind of is a recipe

4:42

that constructs that um query for you.

4:45

We execute the query on the back end of

4:47

the to the database. And what's nice is

4:49

we can connect to a any of those

4:51

databases as well as any of those

4:53

databases simultaneously. So we could

4:55

have multiple databases allowing you to

4:57

connect to a SQL that's on prem as well

4:59

as a SQL that's in the cloud. So with

5:02

the release of 2.0, we have closed out

5:06

scores of issues that have been in our

5:09

backlog that we have just been dying to

5:11

do. And little features like compound

5:14

paths inside of your um your REST

5:16

endpoint to allow you to kind of compose

5:19

the type of API surface that you really

5:22

want to have exposed. And so a lot of

5:25

a lot of it is significant features as

5:28

we start to enable the MCP capabilities,

5:30

but also

5:32

the the small little paper cuts that we

5:34

were just wanting to be able to give to

5:35

our developer community. And since we're

5:37

open source, a lot of this came from uh

5:40

contributions from the community as well

5:42

as our own engineering team as well. And

5:44

open source at Microsoft is special

5:47

because unlike open-source anywhere

5:50

else, you don't have to worry about

5:51

whether or not the maintainer is still

5:52

around because

5:54

it's actually a product from our

5:56

perspective, which means it goes through

5:58

all the security reviews regularly. So,

6:01

we will get um constant internal

6:04

security audits that a normal OSS

6:06

repository just doesn't get that, not in

6:08

the way that we do. And so, that gives a

6:11

kind of another comfort level as an

6:12

enterprise is trying to decide if this

6:14

is the right way to expose their

6:17

database to AP to either a customer

6:20

externally or to an internal application

6:23

just using the REST endpoint. So, pretty

6:25

powerful all the way around. And if I

6:27

could just point out one other thing,

6:29

that box in the middle is sort of the

6:30

engine of Data API Builder. And there in

6:33

the in the middle bottom it it were it's

6:36

permissions and policies. And one of the

6:38

special things that we can do

6:40

is apply custom predicates, almost like

6:42

row-level security and custom-level

6:44

security that you would see inside of

6:46

SQL, but we can do that in the API layer

6:49

instead. All of this capability is is

6:51

still free. And the beautiful part of it

6:54

is

6:55

if you

6:56

if you start to use it, you will

6:57

immediately become addicted to it

6:59

because there are so many aspects I

7:01

mean, imagine a an application you're

7:03

writing and you're like, I don't want to

7:05

include a database driver. So, you just

7:07

delete it because you really only need

7:09

the API. And I don't want to have Entity

7:12

Framework and code first and all of

7:14

these things. No, you you absolutely

7:15

don't need to think about migrations and

7:17

things like that. You can push all of

7:19

that into the API, start using database

7:21

projects, and really kind of flow across

7:25

well, the entire prescriptive guidance

7:27

we have for interacting with SQL. And

7:29

so, it's a really neat tool to have in

7:32

your back pocket to pull out, add to

7:34

about any solution, save yourself a

7:37

significant budget of time and money.

7:39

And um and we love it as well. It's

7:42

worth at least pointing out this is the

7:44

engine inside of the Fabric API. This is

7:46

the engine inside of the Raven tools.

7:48

They I mean we have a lot of

7:51

dependencies across Microsoft. So this

7:53

isn't a science project that we're going

7:55

to forget about tomorrow. This is very

7:58

meaningful to us and the fact that we

8:00

can share it with the community to

8:01

reduce the friction for developers

8:03

interacting with SQL.

8:05

All the better and so what now with 2.0

8:08

it's even better than before. It's not

8:09

just shiny and new. Um we really have

8:12

introduced a lot of capabilities that

8:14

weren't there before and aka.ms

8:17

{slash} dab is how you get to our

8:19

repository or {slash} dab {slash} docs

8:22

is how you get to our documentation on

8:23

MS learn. So it's a it's a cool

8:26

opportunity to be able to talk about

8:28

data API builder. So thanks Anna. I'm

8:30

excited about 2.0. The the teams worked

8:32

really hard on it and frankly, it's

8:34

awesome.

8:35

>> Awesome. Well, it's it's great to learn

8:37

all about it. I know over the years

8:40

we've talked a little bit about data API

8:42

builder on the show, but I think it's

8:44

really I don't know if grown up is the

8:46

right word, but like met all of the

8:48

customer feedback asked or many of the

8:50

customer feedback asked to make this

8:52

really robust and great for production

8:55

types of scenarios. I think it's awesome

8:57

to see that. Thanks for sharing all

8:58

that. One question I have and then I

8:59

know you also have a demo is on the

9:02

right hand side kind of you have this

9:04

these people.

9:06

You have clients and you have agents.

9:08

Can you tell me a little bit how

9:10

somebody people are thinking about using

9:12

MCP servers and makes sense, but like

9:15

how do you think about clients versus an

9:16

agent using dab?

9:19

>> Yeah, that's a great point. If so a

9:20

client could be anything. You could have

9:22

a JSON application that runs in the

9:23

browser and never has a server or you

9:25

could have an actual server that is

9:27

using some sort of HTTP

9:30

class that's interacting with the

9:32

endpoint. So the nice thing is

9:35

since it's simply rest, and all you need

9:37

to do is interact with it like any other

9:39

API, and that is your database now. And

9:43

if you are an agent, so that means to

9:45

say if if you're an agent wrapped around

9:48

a model, and you're trying to interact

9:50

with it the database, there's no way for

9:52

an agent to interact with the database.

9:54

So now with MCP capabilities inside of

9:56

DAB, I could enable rest, I could enable

9:59

GraphQL, I could enable MCP, I can

10:01

enable all three at the same time, and I

10:03

can make it so that I have this type

10:06

this type of client, but I also have

10:07

this AI strategy that I'm trying to

10:09

implement. All three can be supported

10:11

from that same API container that I've

10:13

deployed. And so it's just a simple

10:16

container by the way, it could

10:17

Kubernetes, ACA, whatever it is you want

10:19

to deploy it as, and then we accept the

10:21

incoming off of whatever it is you're

10:23

using,

10:24

if it's intra or some sort of custom

10:26

OAuth provider, and then the outbound

10:28

off to SQL is whatever you decide as

10:30

well, and we support that, too. And so

10:33

yeah, you have those those three

10:34

different personas, right? You have like

10:36

maybe a mobile application would be

10:38

using GraphQL to be able to curate the

10:40

query being written. GraphQL is

10:42

incredibly powerful because it allows

10:44

you to write compound queries. So I

10:46

could say query this database in the

10:48

cloud and this database on prem, but

10:50

return it as a single payload to my

10:52

application, and and I can project only

10:55

these columns, and I can also do join

10:56

statements and filters as well. That's

10:59

really powerful for GraphQL, you see it

11:00

a lot in the mobile world because you

11:02

can tailor the payload. And then in

11:05

rest, it's just simple, right? It's just

11:06

a basically an endpoint for every table

11:09

view or stored procedure that you want

11:10

to expose, and then we run it for you

11:14

and then provide back the paginated

11:16

JSON. And so we have all kinds of

11:18

throttles inside, so if you're worried

11:19

about the size of your database, the

11:21

size of your data, the number of columns

11:23

you're providing back, you as the

11:25

developer have the control over that to

11:27

make sure that if these clients are

11:30

interacting with your data through a

11:31

rest endpoint, you can make sure they

11:34

are not destroying your database at the

11:36

same time. And so, there's a lot of

11:37

these special capabilities to make it

11:39

enterprise ready, not just like easy to

11:41

use, but also feature rich. So, a lot of

11:43

this is turned off by default, and then

11:46

as you're like, "Oh, I really wish we

11:48

could cash." You're like, "Oh, caching

11:50

equals true." And now all of a sudden

11:52

you have the caching capability inside

11:53

the container or outside in like Redis.

11:56

And so, there's a a lot of features that

11:58

you start digging into inside of DAB

12:00

that you realize these clients can be

12:02

extremely rich, and you don't have to

12:04

make hardly any modifications to Data

12:06

API Builder to get the kind of

12:08

capability and to meet the demand that

12:10

developers usually have for their

12:12

applications. It's pretty neat. I I

12:14

would say it this way. From an

12:16

architect's point of view, I would say,

12:18

if you are building custom CRUD APIs,

12:22

you better have a good reason at this

12:23

point. Because now that we're giving you

12:25

this, there's no language requirement,

12:27

there's no operating system requirement.

12:29

It's not SQL only. Like, you can drop

12:32

this anywhere, and all of a sudden you

12:34

have the ability to do like securely

12:37

interact with your back-end database in

12:39

a really robust way.

12:41

It should be able to honestly delete a

12:44

ton of code for most developers, and

12:47

make it so that developers starting out

12:49

don't have that sort of headwind and

12:52

friction to how do I get how do I

12:54

actually query the database, where I

12:56

think a lot of developers rely on ORMs

12:58

like Entity Framework to write the query

13:00

for them because they simply don't know

13:02

how. Um they can now rely on DAB and not

13:05

have the extra of how do I use Entity

13:08

Framework? How do I use all these other

13:09

ORMs? You don't need to. You can

13:11

actually just go directly to DAB as a

13:13

simple endpoint and get back some JSON.

13:16

So, that's the that's the idea. We want

13:18

these agents and clients to be um to do

13:21

as much as they can, but be as

13:24

not be very sophisticated at the same

13:27

time, so they can still interact with

13:28

SQL and get all the benefits from the

13:29

database.

13:30

>> Awesome. Cool. Yeah, that makes a ton of

13:32

sense. I'd love to take a quick look if

13:35

you have something to show us.

13:36

>> Yeah, 100%. Let me Let me show you

13:38

really quickly. So, I have the Omnibus

13:41

extension installed right now. And so, I

13:43

have a an an environment variable that

13:45

has my connection string. That's really

13:47

the only thing that's special here. And

13:48

so, if I say right click and init, so

13:50

that's initialize the JSON file,

13:53

it will pop up the a question for me.

13:56

Whoop, I just clicked off by mistake.

13:58

It'll pop up a question for me to reuse

13:59

that

14:00

connection string. And it's kind of nice

14:02

because we have a cross-platform CLI you

14:05

can use. And if you're wondering like,

14:07

"Man, how do I use that cross-platform

14:09

CLI?"

14:10

This extension inside VS Code really

14:13

helps because it runs all those commands

14:15

and then you can just kind of review

14:16

them and see, "Oh, I I start with dab

14:19

init." That initializes the file. Here's

14:21

how I pass in the connection string. And

14:23

then there are these extra pieces of

14:25

whether or not I want to this to be

14:27

production mode or if I want this to be

14:29

developer mode. And all of the defaults

14:32

that make sense to you probably are in

14:34

this extension and then you can go in

14:36

and tweak it as well. And once it's

14:38

built, by the way, I have This is the

14:40

the runtime setup that says, "Here I can

14:42

enable REST or I can enable GraphQL or I

14:44

can enable

14:46

MCP." And I keep saying or, but it's and

14:48

you can have all three of them at the

14:49

same time or you can turn them off and

14:51

off off and on depending on what your

14:53

requirements are. And then you can set

14:55

up your own custom

14:57

authentication as well as interact with

15:00

OpenTelemetry so that you can you can

15:02

push out all of your logs and activities

15:04

to a custom kind of single pane of glass

15:06

to be able to monitor your API

15:08

condition. So, a lot of power there

15:10

that's just really cool. And one one

15:12

other thing in this, let me just add, if

15:14

I add a table, I can add, for example, a

15:17

to-do table. This is pretty simple. I'll

15:19

add two, actually. And we have added

15:22

the ability not only to add not only to

15:25

add the um

15:26

tables and all of their columns, but

15:29

also descriptions to all of their

15:30

columns as well. Now that we have this

15:33

MCP capability, descriptions are really

15:35

valuable because we pass that along as

15:36

semantic data to the model.

15:38

And uh that's it. So, if I were to run

15:40

this today, and I'll just go ahead and

15:42

run it real quick, um I would just say

15:44

dab start, right? And it executes it,

15:46

connects it to the database, and now

15:48

it's running on um port 5,000 right here

15:51

for me. And what's cool about that is

15:54

one of the things I can interact with it

15:56

through swagger or through um nitro,

15:59

which is the new name for banana cake

16:01

pop, which is sort of swagger for

16:02

GraphQL. And I can also interact with

16:05

our health endpoint. And so, our health

16:08

endpoint in emits as JSON a whole block

16:11

of things around how everything is

16:14

performing inside your API. You can

16:16

query that on your own with your own

16:17

tool, and then we have this nice little

16:19

quick viewer just so you can see that

16:21

everything is running. So, this is me

16:23

interacting and testing to see just how

16:25

fast everything is going to um respond

16:29

from the to-dos table or from the

16:31

categories table using GraphQL. And then

16:33

here's the same thing inside of REST,

16:35

right? So, it's really cool to be able

16:36

to just get a snapshot and see how

16:38

things are going.

16:39

>> Nice.

16:39

>> And um and then I can also use this sort

16:42

of as a recipe for my app developers to

16:45

say, "Now that it's here,

16:47

go to town." And uh a lot of power in

16:49

your hands and um a lot of a lot of

16:52

responsibility, too, I suppose. But it's

16:54

a it's a neat thing. So, this is the

16:56

omnibus. O M N I B U S means all

16:59

contained. And it's about 10 uh data API

17:02

builder

17:04

uh oriented ex- um extensions inside VS

17:07

Code all combined into one. And so, it

17:09

makes it really easy to be able to do

17:11

things, including some of the more

17:13

sophisticated parts of DAB, like adding

17:14

relationships and enabling more

17:17

difficult like capabilities. It's really

17:19

neat.

17:20

>> Got it. Cool. Yeah, no, this is great.

17:22

It looks like it's easy to get started

17:24

and it seems like it's going to provide

17:26

and is providing a lot of value to

17:28

developers and agents

17:31

both across. Jerry, thanks so much for

17:32

coming on the show. I learned a lot. I

17:35

think our viewers did as well. If you're

17:36

watching this episode, go ahead give it

17:38

a like, leave us a comment, and let us

17:40

know what you're going to use DAB for

17:42

and we'll put some links in the

17:43

description for you to learn more. We

17:45

hope to see you next time on Data

17:46

Exposed.

Interactive Summary

Loading summary...