APIs You Won't Hate


Creators and Guests

Host
Phil Sturgeon
Bike nomad, boycotting fossil-fuels, working on reforestation and ancient woodland restoration as co-founder of @ProtectEarthUK. @philsturgeon@mastodon.green
Guest
Darrel Miller
API Architect for Microsoft Graph. OpenAPI spec contributor. Co-chair IETF httpapi working group. Cloud Native Employee
VB
Guest
Vincent Biret
Works on #MicrosoftGraph and Microsoft #Kiota a modern #OpenAPI client generator for REST APIs.

What is APIs You Won't Hate?

A no-nonsense (well, some-nonsense) podcast about API design & development, new features in the world of HTTP, service-orientated architecture, microservices, and probably bikes.

Phil: Hello everybody, and welcome
to another episode of APIs.

You won't hate this time.

It's just me, Phil, with no mic.

I, I don't know what I'm doing.

He, there's a lot of buttons on my
screen and I'm a little bit scared and

confused, but I I think it's recording.

I think this is a podcast and
thankfully to keep me company with

this world of confusing options.

I have two wonderful guests Darryl
Miller, who has been on the show

before, and a new guest Vincent Bere.

Did I get that right?

Vincent Biret-1: Yes.

Perfect.

Phil: Fantastic.

Welcome both start with you Vincent.

Would you like to just
tell everyone who you are?

Vincent Biret-1: Yeah, sure.

Hi everyone.

Nice to meet you.

Nice to meet you in person.

Making our quotes at the same time, Phil.

And I am based out of Montreal.

I'm a principal developer on the
Microsoft Graph client experience team.

And I work a lot with Darl
on the day-to-Day basis.

Phil: Nice.

And Darryl, who, who are you?

Darrel Miller: I work at
Microsoft as an API architect on

the Microsoft graph and in my.

Spare time.

I spent some time working on the
open API specification and a few

IETF HTP related specifications.

Phil: Nice.

And I'm really glad that you could both
come today to talk all about open AI and

the latest happenings with Sam Altman.

Darrel Miller: Our lips are sealed.

We can say nothing.

Phil: Okay.

Yeah, no, I do often confuse
open AI and open API.

So yeah, let's, let's talk about that one.

So you guys have made with a lot,
a lot of other people involved.

I'm sure you've made another
SDK tool that's a little bit

different from some of the others.

But first we have to ask
ourselves, what is an SDK?

What is this tool all about?

Darrel Miller: Well, I, I, first of
all, I wanna say we, we are trying not

to call it an SDK generator because.

SDK is a term comes with a lot of baggage
and is confusing and people have different

understandings of what it means, and so
we like to call it an API Client Code

generator, which is a bit more of a
mouthful, but it is a bit more explicit.

Vincent, tell 'em what it does.

Vincent Biret-1: Well, it will for any
rest, API that you have, that has an

open API description, it will take that
and generate client code to call your.

Rest API with fluent API in the code and
models, and it'll handle ization, ization

and a number of different aspects for you
so you can get going calling your API and

you focus on what matters, writing the
code for your application and not just,

you know, handling ization digitalization
and, and nitty gritty details like that.

Phil: Brilliant.

And so we've had, we've had a couple of
cool, a couple of podcasts about kind of

SDK generators, client stuff in the past.

I think depends on what happens between
recording and actually publishing stuff.

But like one of the last
ones was about that.

We've talked about Fern in the past
and we've talked about amatic and so.

Now we're talking about Kyo, not

Vincent Biret-1: Yes.

Phil: KTA from Microsoft and.

It's a little bit different.

I noticed that you are
trying to take the approach.

I mean, some of these SDK generation
tools kind of come across like you

are the API development team and you
don't have time to be right in a Go

library and our library and other
languages that you might not know.

So just run this command.

And then tadda, it's been
published and all different, A

PA developers use all different.

SDK generators and some they write by
hand and some they use different tools.

And so everyone's A-P-I-S-D-K
looks a little bit different.

It seems like you folks were going for
a slightly different approach of kind

of you're an API client and you could,
you could grab a bunch of different

open APIs from different people and
generate a whole bunch of SDK well

API client libraries yourself so that
you can work with other people's APIs.

Is that about right or
have I just butchered it?

Vincent Biret-1: No, it's perfect.

Actually.

You could, you could do the podcast
on, on your own by yourself.

You already know everything here, but

Phil: later.

Vincent Biret-1: yeah, exactly.

I'm, I'm gonna grab a
coffee instead, but yeah.

The idea is to.

As you can still use Kda to as
an API producer to put SDKs out

there to reuse your own term and,
and offer those to your customers.

You can perfectly do that with
Kda of course, but we set out on a

different approach, as you said, to.

Make sure that you have a consistent
experience across multiple APIs.

More and more nowadays projects or
applications have to integrate between

multiple APIs, multiple vendors that we
use, and having to, you know, find out

whether or not they have a package for
you in your language first, and then

learn the semantics and the different
aspects of this specific package

for each and every API you consume.

Potentially get into, de dependencies,
conflicts and having to resolve

that, which is always awesome to do.

We, we really want to get rid of
all that, that experience for, for

people and instead say, all right,
you have your API consuming tool and

API discovery tool for that matter.

Because KRA also offers search and
discovery commands and, and, and

features as well to allow you to
discover public APIs out there.

And then you pick and choose not only
the different APIs you're interested

in from the different vendors or
partners or whatnot, but you can

even get down to choosing a specific.

Operation under specific endpoint.

So now you get a client that is very
specific to you, what you actually

need to do, and you get this consistent
experience code writing experience

across multiple API providers.

Darrel Miller: Yes.

So Phil, the problem is
developers have opinions.

We all have opinions about HTTP
and when people go and say, Hey,

I need to build an SDK for my API,
so that everybody will use it.

So PHP developers will use it
and Ruby developers will use it.

We all go and build these libraries
that say, well, this is the way that

an H-T-P-A-P-I should be projected into
into the native programming language.

And the problem with
having every API provider.

Have their opinions on how
their API should be projected.

It means that poor API consumer now
has to deal with everybody's opinions

of every API that they go and talk to.

So the Kyoto approach is, well if
you can put it with our opinion, the

Kyoto opinion on how you project H
HB APIs, you can then use K for every

API that you want to talk to and you
only have to learn how to do it once.

And we are.

We are as un opinionated other than
. Having HTTP opinions, like we don't take

the HP methods and say, well, usually
when it's a post, it means create.

Therefore we're gonna use
the create verb on a method.

We just tell you, there's your post,
here's how you put HP headers in.

Here's how you put query parameters in.

Here's how you format a request body.

You understand the uniform interface,
we're just translating it into your

programming language, and we'll deal with
the really annoying stuff, like figuring

out how to present in code parameters in a
query string, and how to use a UI template

to construct.

Yeah, yeah.

All those ugly things.

That those edge cases
of HP we take care of.

But you take our projected code,
which people have said, yeah,

this is not how, this is not an
optimum experience for this API.

And I'm like, yeah, I know it's not
an optimum experience for the API

put an adapter in front of it and
create a perfect experience for your.

A particular application that
you're building and use it as a

mocking interface and then hide
our projected code behind it.

You're never gonna get
beautiful projected code.

And we keep trying to do that
based on a whole bunch of people's

opinions, and you'll never get
everybody to agree on what the

perfect projection of an HT P API is.

Phil: Yeah, absolutely.

I mean in, in most kind of
worlds of frameworks, there's

a whole bunch of different.

Coding patterns that people prefer.

And then, you know happens
in Laravel all the time.

Everyone goes from repository, pattern,
event bust, all these different things

and like different different naming
conventions and everything else.

So yeah, certain communities can't
be consistent with themselves and

even if they do reach consistency
at any point, it changes.

So it can be really hard to
try and make something that,

that, that makes everyone happy.

And I saw Remember, I remember seeing you
give a talk at one of God knows how many

conferences a couple of years ago about

Darrel Miller: The

kit back in SDK was what it was called.

Phil: yeah, that's the one.

It was like, yeah, how to
make good SDKs or whatever.

And a lot of it was
talking about Middlewares.

Do you still have a bunch of middleware
logic in Kyo Did you manage to get that in

Darrel Miller: Yes, indeed.

It's all built on that patent.

Vincent, you wanna go into a bit of
the details of the underlying bits?

Vincent Biret-1: Sure.

So the.

code we generate only relies on a set
of abstractions that we publish, of

course which means that as soon as
we, you generate a client for an API

and that you pull the abstractions
package, you'll be able to build your

project solution application whatever.

It won't do anything, of course,
because you'll be missing

a bunch of implementations,
but at least it will build.

And then for those attractions that
are for executing the HTP request

serializing, decentralizing, and
the authentications aspects as well.

We provide default implementations
that you're more than happy more

than welcome to use and import in
your project or your application.

But if you're not happy with those
because you need a different ization

format or you prefer a different library,
for example you can re-implement those

abstractions and, and swap those away.

And if we focus on HTP and executing
the request one of the abstractions

we have is the request adapter and we
have a default implementation that also

provides a bunch of middlewares for
retry handling, compression handling,

redirection handling, and a different
of of things set of our things as well.

And, and now if you want to
add custom behavior to that,

you can of course just write.

Additional middleware.

If you're happy with a client of choice,
we've selected, or if you're not happy

at all with a client, which typical
client we've selected you can of course

reimplement the whole interface and, and,
and, and do whatever you prefer here, but.

Phil: That's brilliant.

Yeah.

'cause middlewares are just increasingly
becoming the thing I'm the most interested

in when it comes to . Pretty much
any part of working with APIs, right?

'cause the, the actual business logic
of, of most APIs is quite small.

It's usually like, oh, we're
gonna call a model and add some

stuff and do a bit of validation.

But that's like three lines of code
and it punts it off to a whatever

service some sort of service class.

But the most important, like API logic,
Both, both client side and server side.

Most stuff can be implemented as
middlewares and everything from you

know, rate limiting and caching.

And I was just doing a whole series
of posts about like item potency,

keys and, and things like that.

And both the client and the server can
just kind of install one package and

just register it and, and, and use that.

So is there a bunch of
like pre-built stuff?

For Kyoto, you like, do you have
support for item parent C keys?

'cause that'd be fun.

Vincent Biret-1: Now, so this one
specifically we don't have but it'll

be very easy for you for any language
we provide and support today to say I

wanna add support for potency, keys,
and write up a middleware and add it

to your chain and use the same exact
client you just generated with qal.

You don't need to change it for generated.

Code at all or touch any of that.

You just need to add your
crosscutting concern, implementation

and, and, and you're good to go.

And, and better than that we work a lot
in the open as an open source project, so

if you feel like what you've built will
be valuable to others, we'll be more than,

well, happy to see pull requests coming
our way and, and, and, you know, make

others benefit from your hard work here.

So, Yeah.

Darrel Miller: Did you notice?

Phil: sounds like it does.

Darrel Miller: Did, did you notice
Phil in the latest update to the item

potency, item potency, spec in the ITF?

That hasn't quite . Been gone through
last call yet there was some wording

that was changed that now allows a
client to send an item potency key,

even if they don't know whether
the server supports it or not.

And

this, this came from browser vendors.

cause the browser vendors were like,
Hey, it would be really handy when we're.

To send an item potency key in the
hope that maybe the server supports it.

And then if a server does,
then, then, then, cool.

So you don't need this
pre-negotiated contract and Oh,

I know that the server implements
it, therefore I'm gonna send it.

You can just always send it on a post
if, if you want that post to be ideally,

Phil: that makes a lot of sense.

I mean, they already kind of take a huge
amount of guesses at various cash in logic

and, and do a bunch of things for you.

And like most browsers will
already say like, are you sure

you want to refresh this page?

'cause that means you're gonna.

You know, resend this data.

Now they can change that to be like,
are you sure you wanna refresh this?

Because it might resend the thing.

Or, but if they've had like good
responses and they know that it

does support it, then they can be
like, yeah, you can refresh this and

not have to show you the message.

So that's pretty handy.

I cool Bit of a tangent on item potency
keys there, but there's a blog post.

I'll tell you all about it.

I wrote one for the APIs.

You won't hate blog.

That was mostly just me complaining about
getting charged three times for a hotel.

But then I wrote another one
for HT TP toolkit on their

blog, which is actually useful.

So go and check that one out.

Now that I'm done plugging my stuff
on my stuff, I am curious what

Microsoft's interest in all this is.

Why did you start building

kta?

Did you just wanna save API developers
from writing boring SDKs, or is

there a bigger business reason

Vincent Biret-1: Both, like both actually.

I think so, so for context both Darl and
I work for Microsoft Graph, which is one

of the largest rest APIs in the world,
both in terms of traffic and in terms

of number of o of operations we support.

I.

To give you an idea, we have about
20,000 different unique operations

in, on the V one endpoint.

So that makes for 70 plus megabytes open
API description for the whole thing.

Phil: Good Lord

Vincent Biret-1: yeah.

And, and so we, we found ourselves in
a situations where the traditional,

the existing generators out there.

Would not scale in terms of how fast we
can generate things they would not scale

in terms of naming conventions and other
things that, that Darl mentioned earlier.

Because they would try to generate
clever methods name and that would

not work at that scale of course.

And they would also not allow.

For more advanced scenarios like
selecting the different endpoints you

care about or not selecting the different
operations you care about or not, and

generating code just for those things.

And, and so this is how we set out to,
or this is why we set out to build yet

another claim code generator for REST
APIs a couple of years ago with Darl to

not only solve our business needs, but
we built it in such a way that is not.

Just for Microsoft Graph and and
the Devex developer experience

for Microsoft Graph, but also that
it's really useful for the broader

community and the industry at large.

And hopefully people find it useful.

Yeah.

Phil: Oh, I see.

So you just released the, you, you really,
you've released the software so that

other people can fix your bugs for you,
and then you can say, well, open source,

Vincent Biret-1: yeah, of course.

Our personas is great.

We get people work for us for free.

No, but we, we, we are already
collaborating with Red Hat on, on, on,

on qda and, and we made a a key decision
to ship a bunch of clients based off Qda

for different, set of projects they have.

We are also working with GitHub for their
client experience as well there are a

number of different players out there
that not only, you know, get benefits

from the open source, and the fact they
can use it right off the bat, but they

also contribute back to the project.

So it's not just, you know, us
trying to offload book fixes

to the community at this point.

Right.

So.

Darrel Miller: So the other benefit
of the approach that we've took,

well there's, there's two benefits.

There's, one is, as Vincent said,
it's really big, our api, so

nobody wants to use the entire API.

So they want this ability to just
project Code just for the parts

of the API I they care about.

But the other thing is a lot of our
customers who are doing work with

Microsoft Graph which stores like all
your, your data for if you have an an M

365 license, so your email, your calendar,
your contacts, all of that kind of stuff.

A lot of it is integration scenarios.

Either integration with internal
systems or integration with

other third party systems.

And we found a lot of our customers
were doing work where they are

making two APIs talk to each other,
which is where this consistency

story starts to come into play.

And we found there were
a lot of our customers.

Who just, who weren't using our SDKs.

And our understanding was yes, it's just
another SDK that they have to learn.

And this was, this was a big piece of
feedback that we got from customers

that people are just tired of
going and learning yet another SDK.

And they're like, I know how to
make HTTB calls, and they'll just.

Go do it themselves because
they don't want to have to deal

with multiple different SDKs.

And so Kyoto was, was a reaction
to that kind of scenario that our

customers are running into and
we need to go build them anyway.

And Vincent and I had lots of
conversations about how, how

open source this would be.

And it's taken us a little while to really
convince our management that we should

be building things that for customers
who are not directly our customers,

there's a lot of indirect benefits
to shipping something that conforms

very well to a standard like open API.

Phil: that's, that's always a really hard.

A hard one to push, isn't it?

It's like, Hey, can we do loads
of work that won't make us money

directly , because they're like,
yeah, open source, the SDKs.

That's great.

You don't need to open source.

The thing that makes the SDKs, I mean,
how, how much extra work has gone in

that's like how long has a piece of
string, but like how, how much extra

work has gone into making it something
you could, you know, confidently

release to the public versus something
that was just fine for your needs.

Darrel Miller: Yeah, that's

Vincent Biret-1: Ooh,
that's . a, that's a very good

Darrel Miller: We don't
wanna admit that publicly.

Vincent Biret-1: yeah.

Darrel Miller: So the, and and this
is the challenge is it's usually when

you run into, there's two scenarios.

One is when you run into a
problem that we have with our API.

And there's an obvious easy shortcut
that you can take that will solve it

for us, but won't solve it for anybody.

And you've gotta sell that to
management as like, no, we can't

take the shortcut because that
won't deliver the bigger picture.

And then there's the other scenario,
the classic one that we keep

running into is we'll call an API
and they'll return a list of things

as an array, adjacent array and

We don't ever do that in Microsoft
Graph because we follow a set of O

data conventions that says everything
has to be an object at the root.

And even collections are an object with
a values property that contains an array.

And so we'll keep going and we'll
try it against an, oh damn, there's a

scenario that doesn't exist in graph.

And then we've gotta justify going,
spending the time to go fix that.

And our, our management are.

Great.

They have, they have come to terms with
the fact that integration scenarios

are an absolutely worthwhile thing,
and we're starting to gain a lot more

traction with other teams, either across
Microsoft and across the industry,

which again, helps to justify doing it.

But yeah, it, it's a non-trivial amount of
work and it requires continuous convincing

of management that it is worthwhile doing.

Phil: Hmm.

Vincent Biret-1: Yeah.

And, and I think also another part that
we spend time on, which we wouldn't, if we

had not open sourced the, the generator.

Is the experience of a tool itself,
like how to well structure the commands

and provide actionable feedback
to users using the the generator.

We also built a vs code extension, an
an integration of the tool in VS code.

All of that, of course, is not
directly supporting our core business.

But it brings broader adoption, it
bring of the tool itself, and it brings

more people to contribute to the tool.

And, and that has largely paid off
in case any of our managers are

listening to it post ca, post cast.

It has paid off already.

Like for example, on
the Java front red Hat.

Has done tremendous work to get to a much
better Java story in terms of generation.

And, and if we had not open source for
generator, if we had not, you know started

building a community around, around Kda,
we would not have gotten those benefits.

Right.

So.

Phil: Ah, that is brilliant and I'm glad
you threw that in there just for your

managers in case they are listening.

Slightly different topic.

I mean, I don't think we've talked
about Microsoft graph on it before

and that that sounds like a massive
API that sounds blooming complicated.

So is it a, a series of smaller
APIs or is it just one massive

API with loads of operations?

And is there

any difference between those two things
really, apart from implementation

Darrel Miller: hundreds of APIs.

Produced by completely different
organizations at Microsoft that in

different languages, on different tech
stacks, that all gets sewn together

into kind of like a federa, like a
GraphQL Federation data, a gateway,

but using O data conventions instead.

And this is one of our other
interesting challenges.

We actually Don't natively use
open API to describe our APIs.

It's ironic.

It's like in some of the backends
do use open API as they're building

it, but then when they come to
Microsoft Graph, they have to provide

us with what's called A-C-S-D-L
description, which is XML based format.

And it should see some of the, the more
junior engineers as they join Microsoft

and we tell 'em, yeah, you've gotta go and
create this XML description of your API.

Phil: Use this language that's
like, it sucks and there isn't

types and everything's like a
Boolean or a string, and just

Darrel Miller: there's lots of,
there are lots of types, but, but,

but it's, it, it has its challenges,
but we're using that language.

We can basically sew the the ap,
all of these different APIs together

into one coherent, description and

provide a single surface area.

And the technology problem is not
the biggest thing that we solve.

It's getting different parts
of Microsoft's organization

to talk to each other.

I.

Like how many different companies have
you dealt with where you ask them to

change your address and then you change
your address and then you get a letter

from them three weeks later that's
going to the wrong address because

they have your address stored 74 times.

Well, we provide that role as a
centralized place that says, no, there

should only be one representation
of a user's profile photo.

There should be only one representation
of a user's contact information.

And that's, that's kind of the, the
business value of Microsoft Graph

is it provides that one unified
surface area to our customers for

doing integrations with that data.

Phil: That's awesome.

So yeah, that's, that's the more
interesting part I feel like of

API governance that a lot of people
don't get round to talking about.

'cause they haven't
quite got that far yet.

Like when, when people
start trying to figure out.

What API governance is and how to do it.

Then it's mostly just like looking at
pull requests and saying, don't do that.

But it's, it's usually kind of
focused on that's not the right

naming and convention, that's
not the right security thing.

Like I, you know, I've, I've been
pushing this for a long time 'cause

I build tools that help you do that.

But it's kind of getting people
started with the idea of it.

But the, the more interesting
thing has always been trying to

automate some of that dumber stuff,
some of that more simple stuff.

Patterns, standards, conventions, automate
as much as you can so that you can then

start to focus on more domain modeling
where you're like, yeah, don't, there's,

there's already a dress over there.

How are you gonna keep it in sync?

Oh, you're gonna do a two-way
sync, not on my watch son.

You know, and, and just kind of just
bounce in I bad ideas out of the entire

ecosystem is, is far more interesting.

So

Darrel Miller: one of the most interesting
conversations that we have with teams

is when they show a user's name, and the
first question we ask is, are you getting

that from our central identity location?

No.

We, we, we keep a copy of it over here
and we're like, oh, no, you don't,

because people change their names.

And it can do serious damage to
people if they change their name.

And that doesn't immediately get
propagated throughout our entire system.

And we get some funny looks from
teams when we're like, oh, no, no, no.

You've gotta go back
and change your system.

You can't store that.

You can cache it for a short period
of time, but no, you have to guarantee

that you are going to sync that name
before, we'll, actually you ship the API.

So it, it, it's interesting the areas
we get into conversations about in

what is, you know, API governance.

Phil: Mm.

Yeah.

Awesome.

I mean, we had the same, same problem
that WeWork where users could live in

multiple different systems and there was
a, a three-way sync between, you know,

two different monoliths that had roughly
half the data that everything needed.

And like Salesforce, I.

That we also had a copy of Bloom
and everything, and they all

had different validation rules.

So when you updated it in one place,
it might make it to one or two of the

other systems, but it might not . So you
just had all this like, crazy different

information and they all used like email
as a unique key across all the systems,

which would change and break everything.

So yeah, trying to keep data in sync is.

The dumbest part of the, kind of, was
the hardest, most annoying and often

dumbest part of microservice architecture.

'cause you're like, what if we
split up all this code into multiple

separate, distinct things that then
don't have access to anything and

we'll just copy and paste everything
everywhere and everything's worse.

So you really need those very
experienced people that can just sit

there and say, yeah, not under my roof.

Whenever someone triess to copy stuff,

Darrel Miller: the response is, but,
but, but we have to ship this next week.

Phil: Yeah, it'll be okay this time.

I promise it won't be
like every other time.

Cool.

I mean, what other, what other troubles
do you have corralling that many

different APIs into one architecture?

Darrel Miller: I mean, it, it's the
reinventing of the wheel, which is

no, please don't implement another
RAC type security system that's

specific to your particular . Product
in the corner of the system.

I think that's one of the other
common things that we get into.

I mean,

Phil: Role-based authentication,

Darrel Miller: role-based authentication,
access control role-based access control.

That's what our backs from.

Phil: There we go,

Darrel Miller: yeah, I think that's
probably the other biggest area.

The other area is, is it is
continues to surprise me.

How a lot of people don't think of
resource modeling and they just look

at a URL as just a string of characters
that has no necessary organizing.

It's just a bunch of nice
words that you string together.

And they don't think of, you know, how
are people going to go and use this

API beyond the very specific scenario
that . We are designing for today and we

are shipping for a particular product.

It's a case of no, you have to think
about that customer who needs to get

access to the data and they might
want to do something different with

the API than you would considered.

How can we make that possible without
generating a massive amount of work

and building an infinitely capable
machine that nobody is gonna use all a

large part of the stuff that you built.

So, I, think it's that just generalized
design for serendipitous reuse that's,

that's hard for people to grok.

Phil: Mm.

Yeah.

'cause you, you either go the, this
is just raw data, do with it what you

will, maximum flexibility, no control.

Or, or you kind of go like.

These are the workflows we
have really optimized for.

And they're gonna be sick if you wanna
do this thing with it, but if you

wanna do anything else, it's awful.

Yeah, that is the constant
slating scale of terribleness.

That is

Darrel Miller: And you need to find
some happy medium, somewhere in between.

And make sure you also design it in a
way that's gonna work well for the client

code that we're going to project for you.

Because sometimes you can design APIs
that are like, oh, that's just not gonna

work well in native programming languages.

You know, like people who do lots
of APIs that return very dynamic

responses, or APIs that return raw.

Oh yeah.

Well, we don't wanna schematize
this part of the API.

Phil: Yeah, yeah.

We've got an API that just like
one endpoint, just like spits eye

calendar format at you . And we've
managed to get rid of that 'cause

it was a bit gross and weird.

But yeah, it's just like none of
the tools are okay because they're

expecting Jason, maybe X ml.

And then all of a sudden it's
like, what the fuck is that

So yeah, understand that.

I mean, bringing it back
to Kyoto for a second

You just by way of wrapping up as well,
could probably get into that time.

But obviously you guys are doing such
a wonderful job at making Microsoft

Graph be very consistent and therefore
any You would expect if, if the open

API is fairly consistent and follows
patterns and the APIs are fairly

consistent and follow patterns,
then those SDKs are gonna be pretty,

you know, standard with each other.

But for other.

People like the example of a client
who is talking to 10 different

APIs made by 10 different people,
and you've cotified a lot of them.

How much does different open API affect
the kind of consistency of the SDK?

Well, the API client code that
is then generated from it.

Vincent Biret-1: I would say not
that much because a, again, a as,

as Darryl mentioned at the beginning
one one of the key designs aspect

is that the only opinionated choices
we've made were around HGTP and the

conventions and whatnot, and we stuck
to as close as H GTT P conventions as.

As we could and, and, and for example,
if you take the fluent API surface that

we project for you to call the different
operations and, and points and whatnot.

One the way it is structured is that it.

follows the path segmentation of your API.

'cause not only it's easier to map
mentally to know, oh yeah, this

method or this code path on in
my code maps to that operation on

the API, but also it allows us to.

The structure, the code we generate
and potentially avoid any conflicts if

you have things with different names,
but at with the same names, but at

different levels and, and, and whatnot.

So now if you look at
different descriptions and

different APIs, even though.

Their domains are different, even though
the terms they're using are different.

The organization of affluent API
Surface and the models and the other

conventions are gonna be the same.

They are going to be mostly
based on the HT P conventions.

And there is gonna be another layer
of conventions added by, by Qda.

But it, we try to keep
it as thin as possible.

So it's, it's super easy for you to
mentally map your way through the

different clients we generate here.

Phil: Brilliant.

Alright, well I'm gonna recommend that
all you listeners go and have a look

at kta because you might think you're
being clever by just doing a, like a

file, get contents and bunging, A URL.

And then just like hope that thing works.

But every time you, you'd kind of directly
just write your own little SDK, you've

just built a bad SDK and it's brittle and
there's a lot of things that can go wrong

and it's gonna be different every time.

And you don't have the ability to wrap
that in beautiful, fantastic middlewares

that can, can chuck in timeout logic
consistently, easily, that can chuck

in caching logic consistently, easily.

So yeah, if you have a bunch
of like direct dependencies

that you've written yourself.

Delete those and maybe Kyoto
can be the way to replace them.

Thank you very much Vincent and Darryl
for coming on and I think, I think

this has actually recorded the whole
way through, so I think we're okay.

I think we did a podcast

Vincent Biret-1: Hopefully, yeah.

Thank you so much for having us.

Phil: Cheers guys.

Vincent Biret-1: Bye.