How To Build an API Gateway for Microservices with YARP

Поделиться
HTML-код
  • Опубликовано: 3 дек 2024
  • НаукаНаука

Комментарии •

  • @MilanJovanovicTech
    @MilanJovanovicTech  10 месяцев назад +5

    Want to master Clean Architecture? Go here: bit.ly/3PupkOJ
    Want to unlock Modular Monoliths? Go here: bit.ly/3SXlzSt

    • @sekarcse
      @sekarcse 10 месяцев назад

      We can use Ocelot package for the same, Is it Yarp has more features than Ocelot? Which one is better?

    • @qaweeysoetan7794
      @qaweeysoetan7794 10 месяцев назад

      i have done that already i also follow you on LInkdin

    • @mostafachronic1874
      @mostafachronic1874 6 месяцев назад

      Hello, explain validation and authentication in microservices using JWT.

  • @evgeniilewicki5874
    @evgeniilewicki5874 5 месяцев назад +2

    How nice it is to watch when a person has good diction and understanding of the issue. He speaks competently. Thank you very much for your work.

  • @RicusNortje
    @RicusNortje 10 месяцев назад +4

    I did this at my previous company as well. What I love is that if you add auth middleware before you add the proxy it then authenticates the request before it passes it downstream. You can alos add minimal API endpoints and again map them before the proxy then that allows you to override specific endpoints if you need to (for example to map the model to a new contract) and then any other endpoints on that path you did not override gets proxied.

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +12

      Might make another video for Auth, could be useful

    • @PelFox
      @PelFox 10 месяцев назад +1

      How do you secure downstream APIs in that case, private networks?
      What if underlaying services also need details about the user's claims?

    • @RicusNortje
      @RicusNortje 10 месяцев назад +1

      ​@PelFox
      We used service accounts so the gateway (YARP minimal API) would do a token exchange for delegated access and then use that JWT. That might not be the best for each use case but it suited us well. Otherwise, you can just proxy the JWT to the downstream then the downstream will also validate the token.

  • @sekarcse
    @sekarcse 10 месяцев назад +14

    Hi Milan,
    Would you be able to include a video featuring Ocelot and Yarp? Both are useful tools, with Yarp being more lightweight and Ocelot offering more features. I would recommend using them for a small project that involves handling authentication and authorization in a Gateway and passing headers to the downstream API.

  • @MirrorBoySkr
    @MirrorBoySkr 3 месяца назад +1

    8:12 Transforms followed by {}.
    8:29 - [] are used. Thats important!!!

  • @yardeZ93
    @yardeZ93 10 месяцев назад +9

    Hi Milan thanks for the video,
    Can you talk about authentication and authorization options and implementations with reverse proxy? What are the best practices?

    • @sekarcse
      @sekarcse 10 месяцев назад

      Add middleware to handle authentication and pass the necessary headers to the Service (Actual API).

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +7

      Sure, that can be one of the next videos! 😁

  • @garyfirzon
    @garyfirzon 10 месяцев назад +1

    Thanks!

  • @stonefish76
    @stonefish76 9 месяцев назад +1

    Great video Milan! I've wanted to play with yarp a while now but was intimidated by the time it would take to learn it. You make it seem easy here.

    • @MilanJovanovicTech
      @MilanJovanovicTech  9 месяцев назад

      Nope, YARP is too easy to use. Don't waste time and just start building something 😁

  • @antonmartyniuk
    @antonmartyniuk 10 месяцев назад +2

    I've successfully used Yarp in some of my smaller projects. On a bigger projects or projects with high traffic I've used Traefik and Envoy. They seem to work faster and can process pretty highload

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад

      Did you not try YARP on those bigger projects?

    • @antonmartyniuk
      @antonmartyniuk 10 месяцев назад +1

      @@MilanJovanovicTech no. Traefik and Envoy are much more feature rich that we used. And we compared benchmarks of other people comparing these reverse proxies

  • @jameshancock
    @jameshancock 10 месяцев назад +6

    Would be awesome to see how this can integrate with kubernetes and also certificates including cert manager in kubernetes.

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +1

      Found this for the time being: github.com/microsoft/reverse-proxy/blob/main/docs/docfx/articles/kubernetes-ingress.md

  • @codeme8016
    @codeme8016 10 месяцев назад +1

    This was an easy to follow tutorial which is pretty rare on RUclips. Thank you very much.
    Would you also please mention what the use is?

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад

      The use of YARP? Load balancing, gateways, reverse proxying. Here are the docs: microsoft.github.io/reverse-proxy/

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад

      I also wrote an article: www.milanjovanovic.tech/blog/implementing-an-api-gateway-for-microservices-with-yarp

  • @arghakhanra204
    @arghakhanra204 10 месяцев назад +2

    Great❤, looking for more Microservices related videos Milan 👌

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад

      More to come!

    • @arghakhanra204
      @arghakhanra204 10 месяцев назад

      @@MilanJovanovicTech could you cover more Microservices topic from Scratch? Like building a distributive application using Microservices? Would be looking for the same. 🙂

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +2

      @@arghakhanra204 Planning to. This year is for distributed systems :)

    • @arghakhanra204
      @arghakhanra204 10 месяцев назад

      @@MilanJovanovicTech Great, looking for it soon 👌🙂

  • @alijamal7893
    @alijamal7893 10 месяцев назад +2

    great content as always Milan 👏👏👏

  • @Paul-uo9sv
    @Paul-uo9sv 10 дней назад +1

    Question and any comments from you Milan, what do you think about using NGINX instead of YARP ?

    • @MilanJovanovicTech
      @MilanJovanovicTech  9 дней назад +1

      I like it. Used it in some apps. Great and proven reverse proxy solution.
      I'd still go with YARP for a new .NET project, though.

    • @Paul-uo9sv
      @Paul-uo9sv 9 дней назад

      @MilanJovanovicTech cool thanks for the info

  • @mad_t
    @mad_t 10 месяцев назад +2

    Interesting library. But I would like to see benchmarks YARP vs Nginx, because I don't want to reinvent the wheel

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад

      Microsoft replaced Nginx on Azure App Service for a +80% throughput, I'll see what I can do for the benchmarks

  • @JustCode512
    @JustCode512 10 месяцев назад +2

    Thank you again.. 10/10

  • @sauravbhatta5303
    @sauravbhatta5303 10 месяцев назад +1

    Great video on reverse proxy. When u scale an application to multiple instances, how does Yarp manages db call? There will be still one db for all instances of application.

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +4

      YARP doesn't call the DB at all, it just proxies the requests to the other services - which talk to the DB

  • @esper5429
    @esper5429 7 дней назад +2

    Hi Milan, I ran into a problem when Yarp proxying - service refuses connection. Is there any setting should be done? Thanks

    • @MilanJovanovicTech
      @MilanJovanovicTech  7 дней назад

      It should just "work" - but I really can't tell anything based on a comment

    • @esper5429
      @esper5429 6 дней назад

      @@MilanJovanovicTech
      I resolved the error, had to change "localhost" for "host.docker.internal". Anyway thank you for attention!

  • @suhaibshanaa508
    @suhaibshanaa508 7 дней назад

    Thanks for clear video, just I need to know where is the Authorization model ? and what is the correct flow for it?

    • @MilanJovanovicTech
      @MilanJovanovicTech  7 дней назад

      Here: learn.microsoft.com/en-us/aspnet/core/security/authorization/introduction?view=aspnetcore-9.0

  • @antonmartyniuk
    @antonmartyniuk 10 месяцев назад +1

    Milan, what's your PC configuration and what's your monitors' sizes?

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +1

      24" monitors x2
      AMD Ryzen 7 7700X
      NVidia GeForce RTX 3060
      32GB RAM (DDR5)

  • @saeedmoradi-g3d
    @saeedmoradi-g3d 10 месяцев назад +1

    is yarp suitable for large request per second for example 3000 reques per second?or we use from ocelot without it

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +2

      Microsoft is doing 1.9M RPS with YARP. I think it can handle that load :)

  • @YarlenMailler
    @YarlenMailler Месяц назад

    Hello, great totoria. Is this an alternative to use mass-transit for microservices communication?

  • @JesperPDk
    @JesperPDk 5 месяцев назад +1

    Have u make a video about docker-compse, how i will add this? - I have try to follow u video but i cant found out how i add docker compose?

    • @MilanJovanovicTech
      @MilanJovanovicTech  5 месяцев назад +1

      Yes: ruclips.net/video/WQFx2m5Ub9M/видео.html

    • @JesperPDk
      @JesperPDk 5 месяцев назад

      @@MilanJovanovicTech Thanks for link.

  • @sinanoral19
    @sinanoral19 10 месяцев назад +2

    There are 3 terms reverse proxy, api gateway and load balancer. I am confused. Can you explain the differences each of that three

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +2

      - Proxy - server that hides internal servers from outside world
      - Gateway - basically the same as proxy, and you will usually see additional features added
      - LB - a proxy/gateway routing traffic between multiple API instances

    • @sinanoral19
      @sinanoral19 10 месяцев назад

      @@MilanJovanovicTech thank you so much

  • @Sara-po1jd
    @Sara-po1jd 10 месяцев назад +1

    nice video man! I wonder is it possible to configure Swagger on this api gateway (Yarp)

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад

      That'd be tricky. Let me look into if there's a good solution these days. I didn't find one a few years ago.

    • @hernanar3647
      @hernanar3647 9 месяцев назад

      The api gateway can redirect to the generated Swagger UI
      If you want to "merge" those files, by knowing the address of the API and the path of swagger.json (or yaml) file, you can show them in the api gateway as documents of the swagger UI if you configure a swagger endpoint :)

  • @SmartSoftCode
    @SmartSoftCode 16 дней назад

    Thanks 🙏❤

  • @PelFox
    @PelFox 10 месяцев назад +1

    When would you want this over something like Azure Apim?

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +1

      Out of cloud, for example

    • @excess6242
      @excess6242 Месяц назад

      When you don't want to pay thousands of dollars and don't want to manage crappy azure policy files (xml, yes XML).

  • @jefffiegel1758
    @jefffiegel1758 9 месяцев назад +1

    I know we can have Active health checks for the downstream endpoints... How can we get the output/status of those checks by querying YARP itself???

    • @MilanJovanovicTech
      @MilanJovanovicTech  9 месяцев назад

      Need to check, I'd start with YARP docs in the meantime

  • @vadimr5847
    @vadimr5847 10 месяцев назад

    Thank you, It works!

  • @eugene5096
    @eugene5096 10 месяцев назад +1

    Hey Milan, are you posting some sample projects to your github ? As it contains a bit obsolete samples now.

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +2

      Planning to post a Clean Architecture and Modular monolith template soon. Will be .NET 8, all the best practices, etc.

    • @eugene5096
      @eugene5096 10 месяцев назад

      ​@@MilanJovanovicTechwow can't wait

  • @ewgenbi
    @ewgenbi 10 месяцев назад +2

    What about websocket?

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +2

      microsoft.github.io/reverse-proxy/articles/websockets.html

  • @regestea
    @regestea 10 месяцев назад +1

    so when we use api gateway we loose swagger document , is that ok ?

  • @Ukyron
    @Ukyron 10 месяцев назад +1

    Nice tutorial,.Can We have a video about How to build an API Gateway for Microservices with Ocelot?

  • @PhantasyAI0
    @PhantasyAI0 8 месяцев назад

    Milan, can you make a video covering how to use azure cosmos db sql api, with multiple cosmos db accounts/cosmosclient instances? Been something I've been trying to learn.

  • @sinthonseng
    @sinthonseng 4 месяца назад

    Does .NET Aspire provide any native support for API gateway functionalities?

  • @mostafachronic1874
    @mostafachronic1874 6 месяцев назад

    Hello, explain validation and authentication in microservices using JWT.

  • @mohammed2709
    @mohammed2709 23 дня назад

    is a mandatory to apply thisusing docker orcan just use individual project as microservices

  • @Sara-po1jd
    @Sara-po1jd 10 месяцев назад

    I have a question regarding the authentication and authorization in the yarp, should it be at the gateway level or the microservices? I mean can we secure only the yarp requests without taking care of secuing the microservices since they are not exposed publically? if it is enough to do it on the Yarp level any idea on how we can do this on specific request and not the entire route?

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +1

      Typically Gateway will also handle authentication. The services could be left out, if you keep them in a private (closed) network. But in most cases, you need to know who the current user is even in the microservices. So you'll still have some form of authentication, if only verifying the access token.

    • @Sara-po1jd
      @Sara-po1jd 10 месяцев назад

      @@MilanJovanovicTech yeah in our case we dont need to trace the user in the microservice. we only need to authenticate some CUD operations, do you have an idea on how can i secure some endpoints and not the entire route using Yarp? I cant find it in the Yarp documentation.

  • @maverickiy9366
    @maverickiy9366 10 месяцев назад

    That is great. But let's consider I want to deploy my services on AWS ECS, or Azure Container Apps, then how this YARP will function ? How Load balancing and high availability will work with ECS or Azure Container Apps with YARP?

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +1

      - YARP supports load balancing www.milanjovanovic.tech/blog/implementing-an-api-gateway-for-microservices-with-yarp
      - As for running in a HA setup, you can do a primary-secondary setup

    • @PelFox
      @PelFox 10 месяцев назад

      @@MilanJovanovicTech Link returns 404

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +1

      @@PelFox YT picked up the ) in the end 😅

  • @JanKowalski-ld4ec
    @JanKowalski-ld4ec 10 месяцев назад

    Hello, Just wondering if you could publish some good advices about working with Excel || Word objects in c#. Would be great! Regards! JK

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад

      I doubt it (at least in the short term)

    • @JanKowalski-ld4ec
      @JanKowalski-ld4ec 10 месяцев назад

      @@MilanJovanovicTech For sure there are more hot topics ;) Just thought about it and yourself while working on current project. Best regards!

  • @OldShoolGames
    @OldShoolGames 10 месяцев назад

    Does this work with signalr/blazor server in case of a high availability/replicated backend ?

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +1

      microsoft.github.io/reverse-proxy/articles/websockets.html

    • @OldShoolGames
      @OldShoolGames 10 месяцев назад

      @@MilanJovanovicTech Thank you Milan

  • @yugo6243
    @yugo6243 10 месяцев назад

    Thank you for great tutorial. Looking forward for an enhanced tutorial with Yarp as reverse proxy with authentication.

  • @Cesar-qi2jb
    @Cesar-qi2jb 10 месяцев назад

    Is YARP just a reverse proxy? Can it be used as a Gateway too?
    I need to create a Backend For Front-end (BFF) and I need to combine data from different microservices.

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +1

      Did I not use it as a Gateway in this video?
      I also covered load balancing: ruclips.net/video/0RaH9hhOF4g/видео.html

    • @Cesar-qi2jb
      @Cesar-qi2jb 10 месяцев назад

      @@MilanJovanovicTech Yes, you did. But how would you map (transform) two differentl endpoints into one?

    • @roberteru25
      @roberteru25 10 месяцев назад

      ​@@Cesar-qi2jb Create an orchestrator service, then expose the service with grpc, then you can build response from the different APIs

    • @Cesar-qi2jb
      @Cesar-qi2jb 10 месяцев назад

      @@roberteru25 Thanks for the advise. We prefer sticking with REST (Swagger) for our microservices as these are also publicly exposed to partners.
      We just have the need to build more BFFs. We already have one for the main website but we are willing to build more for other use cases. I don't really know what would be the best approach for building a Back End For Front-end in .NET.

  • @Foodies-pv7ih
    @Foodies-pv7ih 10 месяцев назад

    What about authentication?

  • @qaweeysoetan7794
    @qaweeysoetan7794 10 месяцев назад

    Please can i get the github repo for dis to study more

  • @ВкидимирПодгубенский
    @ВкидимирПодгубенский 10 месяцев назад

    How to forbid users to call your api's directly instead of using proxy?

    • @ByronScottJones
      @ByronScottJones 10 месяцев назад +4

      Generally you would only give the proxy an external IP and DNS record.

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +3

      Network rules, you can close your APIs to the outside world, and only let them talk to the Proxy

  • @allannielsen4752
    @allannielsen4752 5 месяцев назад

    Hi at ruclips.net/video/UidT7YYu97s/видео.htmlsi=cyo8An6JY--Z_h3H&t=659 you show the create (POST) however you don't show the CreatedAtUrl that is meant to be returned. Since the api doesn't know about the proxy it sets the api url not the proxy's public url. can you comment on that?

    • @MilanJovanovicTech
      @MilanJovanovicTech  5 месяцев назад

      You'd need to use the Forwarded URI to make it all work. Might cover that in a future video.

  • @pigrebanto
    @pigrebanto 10 месяцев назад +1

    Nice but you speak at speed of light.

    • @MilanJovanovicTech
      @MilanJovanovicTech  10 месяцев назад +1

      🤷‍♂️

    • @antonmartyniuk
      @antonmartyniuk 10 месяцев назад

      Turn the x2 speed off, lol

    • @Yago4341
      @Yago4341 10 месяцев назад +1

      I’m brazilian, not fluent in English, and i can understand his speak very well

  • @marcobaccaro
    @marcobaccaro 7 месяцев назад

    Kids, please don't use this. API Management products exist for a reason (Azure APIM, AWS API Gateway, MuleSoft, Kong, Gravitee, Apigee...)

    • @MilanJovanovicTech
      @MilanJovanovicTech  7 месяцев назад +4

      If anything, it's good to understand the concepts behind these cloud services

    • @joga_bonito_aro
      @joga_bonito_aro Месяц назад +1

      Are you a salesman or something? If I want to use it, I will...

  • @sunzhang-d9v
    @sunzhang-d9v 10 месяцев назад

    I've posted it before