The Right Way To Build REST APIs

  Рет қаралды 82,783

Awesome

Awesome

29 күн бұрын

Best Practices for building REST APIs.
💬 Topics:
1. Richardson Maturity Model;
2. Stateless vs Stateful APIs;
3. Define correct REST Endpoints;
4. REST Endpoints responses;
5. Plain Text vs JSON vs XML vs YAML;
6. Handling exceptions in APIs;
7. REST API versioning;
8. HATEOAS
9. The HTTP protocol;
🥇 Become a Member - / @awesome-coding
✉️ Join the Newsletter - newsletter.awesome.club/
📖 Blog Article - www.awesome.club/blog/2024/th...

Пікірлер: 186
@RoelCagantas
@RoelCagantas 27 күн бұрын
Poor Fireship clone.
@omergatenio6802
@omergatenio6802 26 күн бұрын
Yeah, you're right. It's really unfortunate that we receive a well explained top-notch content in a format similar to Fireship. What a disgrace!
@dotnetapp
@dotnetapp 26 күн бұрын
pin of shame
@RazoBeckett.
@RazoBeckett. 26 күн бұрын
@@dotnetapp ya lol
@2u841r
@2u841r 25 күн бұрын
Poor rest-api concept clone. Poor Talking with English language clone. Poor Breathing Clone. Poor Living on the earth Clone.
@ChichaGad
@ChichaGad 25 күн бұрын
@RoelCagantas someone's mad
@lucaruana9404
@lucaruana9404 27 күн бұрын
I've been trying to learn API dev for a while now and this is the simplest and most crystal-clear video I've ever stumbled upon. Thanks a lot!
@awesome-coding
@awesome-coding 27 күн бұрын
Glad it helped! Thanks for the feedback!
@vexxxG
@vexxxG 27 күн бұрын
Personal opinion: a restful endpoint should be /api/orders/123/items?status=active or something along those lines. The path should only refer to resources by name or identifier, since active items returns a subset of a specific resource it should be used in the query string since it is a filter. Also, according to the spec, PUT is for upserting not only updating. PATCH is for updates only
@ptinosq
@ptinosq 26 күн бұрын
Not a personal opinion - that's the industry standard 😅
@Blast-Forward
@Blast-Forward 14 күн бұрын
Why does it have to be /api/... though?
@vexxxG
@vexxxG 14 күн бұрын
@@Blast-Forward it doesn't have to be... But it is kind of the golden standard... If you have an app that has both a UI and an API, usually you use /api because it's clearer for both developers and the server to route requests to a particular server/resource/location... Usually I have a standalone Spa and a standalone api (or more than one) and I have a reverse proxy in front... /api always goes to the api server while everything else false under the SPA
@Blast-Forward
@Blast-Forward 14 күн бұрын
@@vexxxG If there is only one client that fits well. Otherwise it can also be a subdomain.
@bitsofdevbrain
@bitsofdevbrain 11 күн бұрын
Perfect, that's for saying.
@jaimieomondi1449
@jaimieomondi1449 27 күн бұрын
The only words that i have heard today that make sense have come from this video...Greatly appreciated.
@awesome-coding
@awesome-coding 27 күн бұрын
Wow, thank you!
@cslearn3044
@cslearn3044 27 күн бұрын
I recently quit web dev but i still come here watching cuz its interesting, and to like
@awesome-coding
@awesome-coding 27 күн бұрын
Thank you! Why did you quit web dev?
@cslearn3044
@cslearn3044 27 күн бұрын
@@awesome-coding no creativity, or you follow a specific path or your site will be bad, so yeah
@Hardware-pm6uf
@Hardware-pm6uf 27 күн бұрын
​@@cslearn3044 what do you mean by creativity ? Web dev isn't creative
@Serizon_
@Serizon_ 27 күн бұрын
@@cslearn3044 there are a 1000 specific paths , so generally people just use what they like.
@bhumit070
@bhumit070 27 күн бұрын
@@cslearn3044so what are you doing/pursuing now?
@shashankthapa659
@shashankthapa659 5 күн бұрын
just building a app based on sessions and ur rest api video is recommended. absolut legend
@charliesta.abc123
@charliesta.abc123 27 күн бұрын
Awesome, thanks! I thought you were gonna squeeze it into a 3 minute video but I was pleasantly surprised to see it go on until I checked the video length 😅
@awesome-coding
@awesome-coding 27 күн бұрын
Glad you liked it! I'm planning to shift more towards the 10 minute format.
@fadhilinjagi1090
@fadhilinjagi1090 8 күн бұрын
The classical music in the background was soothing. The content was useful, thanks for sharing.
@br3nto
@br3nto 27 күн бұрын
7:08 RESTful APIs can return HTML too! Like HTMX suggests, there is nothing more HATETOAS than HTML with its natural support for links and forms etc
@peterszarvas94
@peterszarvas94 25 күн бұрын
9:55 "no accepted standard' literally HTML is the standard
@Blast-Forward
@Blast-Forward 14 күн бұрын
How would you consume that with client-side rendering? Pick the URLs from the HTML? Then why return HTML in the first place? Just for the sake of being RESTful?
@br3nto
@br3nto 14 күн бұрын
@@Blast-Forward the browser just renders the HTML… like what HTMX does, or Turbo, or the Laravel equivalent, you just swap out part of the page with the new content.
@Blast-Forward
@Blast-Forward 13 күн бұрын
@@br3nto But that's not feasible with SPA frameworks. Also, it couples the visual representation, at least the structure, to the underlying data.
@MarcoDamaceno
@MarcoDamaceno 26 күн бұрын
HATEOAS maturity can be achieved by returning HTML instead of JSON. Then the client can parse the response or pick a part that is interesting like the url for example.
@SuperKavv
@SuperKavv 27 күн бұрын
Great video! Really clear explanation.
@awesome-coding
@awesome-coding 27 күн бұрын
Glad it was helpful!
@koenv85
@koenv85 27 күн бұрын
My preference would be to have a query parameter of status = active instead of putting active in the URL
@awesome-coding
@awesome-coding 27 күн бұрын
That's fair - a valid alternative.
@TheDeluxeman
@TheDeluxeman 12 күн бұрын
Відмінне пояснення і анімація. Заслуговуєш на більше підписників!
@awesome-coding
@awesome-coding 12 күн бұрын
Thank you!
@maguilecutty
@maguilecutty 25 күн бұрын
Awesome content! The knit pickers here can jump in a lake. It’s so hard to find actual production grade info like this! Chapeau 😊
@awesome-coding
@awesome-coding 25 күн бұрын
Thank you!
@mikec64
@mikec64 6 күн бұрын
Fantastic. Concise, useful illustrations, and I like the way you built the concepts up layer by layer. I'm a new subscriber.
@awesome-coding
@awesome-coding 6 күн бұрын
Thank you!
@oogway_hussein
@oogway_hussein 27 күн бұрын
thank you, keep up the high quality content
@awesome-coding
@awesome-coding 27 күн бұрын
Thanks, will do!
@debadipti
@debadipti 27 күн бұрын
Simply Awesome!
@awesome-coding
@awesome-coding 27 күн бұрын
Glad you like it!
@TalesGrechi
@TalesGrechi 27 күн бұрын
Great video!
@louispetrik7431
@louispetrik7431 19 сағат бұрын
So much value in this video, amazing!
@AleksandarIvanov69
@AleksandarIvanov69 8 күн бұрын
Great lesson! Thank you.
@awesome-coding
@awesome-coding 8 күн бұрын
Glad you liked it!
@AboinTech
@AboinTech 27 күн бұрын
loved it. made visually and content vise with good quality.
@awesome-coding
@awesome-coding 27 күн бұрын
Glad you liked it!
@em9999999
@em9999999 25 күн бұрын
The representation of backend and frontend developers is spot on
@ashleyfreebush
@ashleyfreebush 22 күн бұрын
very well explained...thanks awesome!!
@awesome-coding
@awesome-coding 22 күн бұрын
Thank you!
@anfytrion
@anfytrion 27 күн бұрын
Great explanation 👏and as always great video
@awesome-coding
@awesome-coding 27 күн бұрын
Thank you!
@harshrathod50
@harshrathod50 27 күн бұрын
Very informative, thanks. 🎉
@awesome-coding
@awesome-coding 27 күн бұрын
Glad it was helpful!
@solorsix
@solorsix 27 күн бұрын
Nice work!
@awesome-coding
@awesome-coding 27 күн бұрын
Thank you! Cheers!
@bone_broth_000
@bone_broth_000 27 күн бұрын
Great video. Just note REST isn’t the *only* option. RPCs can be great for internal API calls
@awesome-coding
@awesome-coding 26 күн бұрын
You just guessed what one of my next videos will be about :D
@acopier
@acopier 25 күн бұрын
also GraphQL
@axMf3qTI
@axMf3qTI 27 күн бұрын
You know what drives me crazy. websites that serve a 404 page with a 200 status code. What are you doing with your life?
@GraphiteSC
@GraphiteSC 26 күн бұрын
Are those sites built with a framework or library like React? For SPA’s, the router is responsible for rendering your app, nothing else, and without it your app won’t be found/initiated/rendered. Netlify, Nginx, Vercel etc. all need to defer that 404 responsibility (all routing responsibility), to the SPA’s router - and the only way to do that, is to tell the service to always return a 200, and redirect to your project’s entry point (index) so the router can load and do its thing.
@Dipj01
@Dipj01 26 күн бұрын
A REST API typically doesn't return a "page". The 404 page that you see is given from the spa framework itself if your requested path doesn't match one of its predefined paths/patterns. If you make that request through Postman, you'll still likely get the 404 status in response.
@GraphiteSC
@GraphiteSC 25 күн бұрын
@@Dipj01 Yeah, that’s what I’m saying. His condition can only happen on the front-end, with a SPA - and there’s a reason why that I was trying to explain.
@axMf3qTI
@axMf3qTI 25 күн бұрын
@@Dipj01 Oh you mean because this video talks about APIs. I meant when there is no API and you have to scrape a little for example. Would be nice if things work how they are designed to work.
@2u841r
@2u841r 27 күн бұрын
Very helpful
@awesome-coding
@awesome-coding 27 күн бұрын
Glad it helped!
@ChichaGad
@ChichaGad 27 күн бұрын
This was so clear and on point Next, please do GraphQL
@awesome-coding
@awesome-coding 26 күн бұрын
Thank you!
@ChichaGad
@ChichaGad 25 күн бұрын
​@@awesome-codingGood luck! ❤
@sinamobasheri
@sinamobasheri 27 күн бұрын
The Hub 🥃 lol
@awesome-coding
@awesome-coding 27 күн бұрын
Well they have millions of visits each month so it must be up there, right? :))
@moveonvillain1080
@moveonvillain1080 27 күн бұрын
is HATEOAS backend driving frontend kind of design or these two are different things?
@erroneousbee
@erroneousbee 24 күн бұрын
I like the way dealing with state was just handwaved away. Also very much enjoyed the skewer-case, cos using snake_case maps too easily to js varnames.
@biovawan
@biovawan 26 күн бұрын
Great video! Thank you! Could you please make a video describing hateoas more in detail?
@awesome-coding
@awesome-coding 26 күн бұрын
Thanks you! Will post more detailed videos soon.
@rsjeyt
@rsjeyt 25 күн бұрын
this was great
@awesome-coding
@awesome-coding 25 күн бұрын
Thank you!
@bobDotJS
@bobDotJS 27 күн бұрын
It took me 4 years of trial and error, and working with teams to absorb all of this knowledge through osmosis.
@wotwithbert7591
@wotwithbert7591 26 күн бұрын
HATEOAS should ultimately return hypermedia, not JSON that has to still be parsed on the client (with some additional logic being applied to the data being returned from the server, in some cases (especially on big tech projects)). Ultimately I believe that not responding with a pure declarative HTML response results in most REST APIs being more REST-like, than RESTful. Am I wrong to assume that?
@sire_ns
@sire_ns 27 күн бұрын
wow!
@jeremysollars5922
@jeremysollars5922 27 күн бұрын
Your description of HATEOAS is unfortunately flawed. It shouldn't return JSON but should opt purely for HTML. In reality this is the true definition of REstful, html is restful, json isnt. Somehow this got lost in the sauce.
@vpetryniak
@vpetryniak 27 күн бұрын
I wonder how to get a job at “The Hub” company
@awesome-coding
@awesome-coding 27 күн бұрын
You need to really know the product first.
@novo99
@novo99 27 күн бұрын
I like to send 404 instead of 403 because I believe that the client should only be aware of resource that they have access to and 403 shows that the resource exists.
@awesome-coding
@awesome-coding 26 күн бұрын
Yes and no:D I understand the benefit of the added security, but think about this scenario: You are working with a 3rd party API and somehow you have your credentials wrong. You make the request and a 404 Not Found is returned. You go back to the documentation and double check the URL. Make the call again - 404 again. It's more likely to thing that there is a bug in the API / documentation than an authentication issue on your part.
@Shivam-sl4sp
@Shivam-sl4sp 26 күн бұрын
which software do you use for editing?
@awesome-coding
@awesome-coding 26 күн бұрын
Adobe premiere pro
@DeviantFox
@DeviantFox 24 күн бұрын
so much hate but I really fucking liked this video.
@bige2899
@bige2899 26 күн бұрын
What makes me astonished is how many well-known websites uses 400 bad request as a standard 4xx status code , 400 should be used only when there is a syntax error in request payload.
@harrisonkaiser5138
@harrisonkaiser5138 26 күн бұрын
What’s the solution if we need to specify more than two levels in the URL to specify complex relationships?
@follantic
@follantic 26 күн бұрын
RPC style naming. Because there's no indirection most of the problems with REST don't exist.
@awesome-coding
@awesome-coding 26 күн бұрын
There is no hard rule of thumb. As you can see in the comments, people bend and interpret some of these rules. You can have more than two levels if that's really needed, but it should be on very specific cases. If you have a concrete example we can discuss it.
@bige2899
@bige2899 26 күн бұрын
What makes me astonished is how many well-known websites uses 400 as a standard 4xx status code , 400 should be used only when there is a syntax error in the request payload.
@manuelvega.
@manuelvega. 27 күн бұрын
Don't forget the meta data in the response!
@n8o_
@n8o_ 27 күн бұрын
HTMX was made with the goal of extended HTML to be a complete hypermedia. It abides by the HATEOAS model, and is a simple and effective way to put it into action
@vuenice
@vuenice 26 күн бұрын
[5:19] why Django has forward slash by default included in routes then?
@awesome-coding
@awesome-coding 26 күн бұрын
I guess we would have to ask them :D
@bphilsochill
@bphilsochill 27 күн бұрын
Source material?
@user-nu5eu6ih1r
@user-nu5eu6ih1r 25 күн бұрын
then what is the right uri for login,sign in
@awesome-coding
@awesome-coding 24 күн бұрын
You found some of the exceptions :). I usually go with: - /api/v1/auth/login - /api/v1/auth/register - /api/v1/auth/sso/authorize - /api/v1/auth/sso/callback
@chrisder1814
@chrisder1814 21 күн бұрын
hello I had some ideas but I don't know if these are feasible could you tell me what you think of them New : could you help me understand what results I could get using the api? - first of all creating a GPT, there are canva GPTs and I'm trying to understand if I could get different results by creating my own - then I wanted to know what more result could I obtain using the API in a make scenario? - and finally I was wondering what result I could obtain by creating a Chrome or WordPress extension? my idea is that a robot could scan all the articles on my WordPress site and maybe even my eBay Store then replace all my images so without me having to do it on each of my pages and therefore saving me a lot of time
@awesome-coding
@awesome-coding 16 күн бұрын
Ideas?
@chrisder1814
@chrisder1814 16 күн бұрын
@awesome-coding I just added some text to my original post
@chrisder1814
@chrisder1814 6 күн бұрын
​@@awesome-codingHello can you understand what I am writing, I use google translate but the translations are really very bad and I thought that gpt does exactly the same translations as google
@uwitondanishema
@uwitondanishema 25 күн бұрын
This is the best REST api video on youtube!
@awesome-coding
@awesome-coding 25 күн бұрын
Thank you!
@MrSofazocker
@MrSofazocker 27 күн бұрын
Im the CEO of HTMX and approve! HATEOAS for everyone!
@ludovicabomo9674
@ludovicabomo9674 23 күн бұрын
🙂
@naranyala_dev
@naranyala_dev 26 күн бұрын
hypermedia mentioned
@HansWurst-dk6pp
@HansWurst-dk6pp 27 күн бұрын
I heavily disagree with the content of the video at 4.43. You should never just crerate CRUD endpoints around resources. Instead you should always prefer actions. The backend does highly diverse actions to the resources. The frontend should just tell the backend to do them, by calling an appropriate endpoint.
@bijeesraj007
@bijeesraj007 27 күн бұрын
I totally agree with the use of actions , In my opinion they should be exactly same as it mentioned in the video . HTTP verb + resource name = intended action . The resources should be nouns not actions .
@Kubkochan
@Kubkochan 26 күн бұрын
​@@bijeesraj007gl
@kartikkewalramani6696
@kartikkewalramani6696 15 күн бұрын
I thought i was clicking on a fireship vid, feeling sad
@qvxactgcw
@qvxactgcw 26 күн бұрын
Which text to speech app you use?
@hellowill
@hellowill 26 күн бұрын
Always add versioning
@simpingsyndrome
@simpingsyndrome 27 күн бұрын
Soo does it means laravel frameworks by default is a level 3 REST API? I recently have collaborated with a PHP guy develop an API using laravel, the best practices that he implement based on my understanding in this video, he implement too many slugs, and no single one query params, I think it's confusing for me as Frontend developer, aven though I read the API docs over and over I still didn't get it, what the hell is representating the every /a/b/c ,even on a very simple use case the API just give a response like completely annoying to read,there are many links,pages etc which is not even consumed, he even make an infinite breaking changes that breaks feature that already done, what a horrible PHP guy to collaborate with.
@dynamohack
@dynamohack 27 күн бұрын
hateos is just a simple mpa app made using php or any other backend language
@awesome-coding
@awesome-coding 27 күн бұрын
I'm not sure what that means exactly.
@dynamohack
@dynamohack 27 күн бұрын
@@awesome-codingmpa is multi page application and all mpa most of the time uses hyper mean of all engine shit
@julian_handpan
@julian_handpan 20 күн бұрын
Just use ruby and rails 😏
@_Aarius_
@_Aarius_ 27 күн бұрын
only level 3 is REST. everything else is just RPC with specific constraints
@mickomagallanes1185
@mickomagallanes1185 13 күн бұрын
What do you mean the right way to build REST APIs? Yes there is a standard for it, but the purpose of the backend is to make the frontend developer's life easier. It is ok to have a REST API that has an http-only cookie for the browser, and it makes it somehow stateful. Why is it ok? Because it eliminates the need for the client-side to worry about storing the token. It should be stateless in terms of idempotence.
@netssrmrz
@netssrmrz 26 күн бұрын
Good video. But for IPC, REST is a half baked piece of cow poo. Maybe one day we'll have a proper binary API protocol that runs alongside HTTP with built in auth, discoverability, param marshalling, autogenerated client stubs, and we won't have to give a dam about the networking internals.
@Seedwreck
@Seedwreck 27 күн бұрын
Fireshippilled
@QueeeeenZ
@QueeeeenZ 27 күн бұрын
I prefer GraphQL for the type safety.
@ryo_5748
@ryo_5748 27 күн бұрын
The easiest way to build a great Rest API is to provide the same API as DummyJSON 😄
@awesome-coding
@awesome-coding 26 күн бұрын
Fair
@tincoandringa4630
@tincoandringa4630 27 күн бұрын
Pro-tip: Never progress to level 3 of the richardson maturity model. HATEOAS has never benefited anyone in the history of HTTP.
@awesome-coding
@awesome-coding 27 күн бұрын
I agree - it's more of a theoretical level.
@StingSting844
@StingSting844 27 күн бұрын
I don't agree. We converted around 10 pages in our product with htmx in just 2 weeks. This would have taken at least a quarter if it was just react + APIs. We actually had time to focus on details and literally everyone asked how these pages are loading faster 😂
@sandiprai1383
@sandiprai1383 27 күн бұрын
Why? Can you explain it
@awesome-coding
@awesome-coding 27 күн бұрын
@@sandiprai1383 I mentioned the main reasons at the end of the video: - Not as performant / efficient since you are sending over the wire more bytes than necessary. Consider the option that HATEOAS links could have 10-15 entries; - Not widely adopted. Other than some public APIs I worked with in the past, everybody pretty much sticks to level 2. This is especially true in any software that's not open, since you don't really need self discoverable APIs - it' easier for the client to just map to whatever the API is - It is not really an enforced standard, which, in all fairness, it is true about pretty much any architecture / tech since it is very tough to enforce standards on the web :D
@markyip554
@markyip554 27 күн бұрын
Isn't traditional 'SSR multi page' web applications fulfill this level by default?
@liquidrider
@liquidrider 26 күн бұрын
was this a advertisement I seriously can't tell
@awesome-coding
@awesome-coding 26 күн бұрын
Avertisment to what? :))
@masterflitzer
@masterflitzer 17 күн бұрын
wtf where do you see an ad?
@krellin
@krellin 27 күн бұрын
no matter how you do it if its REST its shit most casual systems should use grpc just for sake of compile time type safety and performance they get for free
@L4B5
@L4B5 26 күн бұрын
`active` should go as a filter param to items resource: orders/123/items?filter=active
@azulamazigh2789
@azulamazigh2789 27 күн бұрын
/items?active=1
@awesome-coding
@awesome-coding 27 күн бұрын
Maybe /items?status=active? In your example one could call 1 a "magic number" :)
@azulamazigh2789
@azulamazigh2789 27 күн бұрын
@@awesome-coding yes I agree with you
@peterszarvas94
@peterszarvas94 25 күн бұрын
/api/orders/123/items?filter=active or: /api/orders/123/items?active=true
@CZARCZAR
@CZARCZAR 10 күн бұрын
Clever video organization, it's great to be able to watch this kind of content for free! 🫶
@awesome-coding
@awesome-coding 10 күн бұрын
Glad you enjoyed it! Thanks!
The Simplest Tech Stack
9:38
Awesome
Рет қаралды 58 М.
Good APIs Vs Bad APIs: 7 Tips for API Design
5:48
ByteByteGo
Рет қаралды 225 М.
What it feels like cleaning up after a toddler.
00:40
Daniel LaBelle
Рет қаралды 86 МЛН
Sigma Kid Hair #funny #sigma #comedy
00:33
CRAZY GREAPA
Рет қаралды 38 МЛН
The Easy Way to Design Top Tier Websites
11:54
Sajid
Рет қаралды 208 М.
API Design 101: From Basics to Best Practices
5:39
Hayk Simonyan
Рет қаралды 21 М.
Go | 6 Unique Techniques
9:04
dadcod
Рет қаралды 1,5 М.
How principled coders outperform the competition
11:11
Coderized
Рет қаралды 1,6 МЛН
This homelab setup is my favorite one yet.
21:30
Dreams of Autonomy
Рет қаралды 130 М.
20 System Design Concepts Explained in 10 Minutes
11:41
NeetCode
Рет қаралды 938 М.
40 APIs Every Developer Should Use (in 12 minutes)
12:23
Coding with Lewis
Рет қаралды 331 М.
The cloud is over-engineered and overpriced (no music)
14:39
Tom Delalande
Рет қаралды 522 М.
What it feels like cleaning up after a toddler.
00:40
Daniel LaBelle
Рет қаралды 86 МЛН