The real value of the library is that it introduces well documented conventions and patterns that support industry best practices. Introducing FastEndpoints to a team seems to be good way to help develop a consistently better codebase and removes maintenance of internal libraries and documentation to attain the same effect I’m currently refactoring some projects where the code quality is clearly going off the rails to help steer the ship back to port Edit: it’s funny to me how a bunch of the comments crapping on this library are either speaking in arrogance or just completely missing the point of the library
I use this library at work. My colleague is a contributor to the FE and he agitated everyone to use it. In general FE isn't bad. But the more you use it, the more you realize that FE takes too much responsibility besides request handling. E.g. command bus (with several abstractions like ICommandHandler, CommandHandlerBase etc), event bus (where is no general IEventBus interface which you can inject), too many ways of doing one thing, for example, returning a response (why should I bother myself trying to find out whether should I use HandleAsync or ExexuteAsync?), a very strange way of adding errors to response as well. And there's a disaster with the DI in the library. You can't even unit test a method that invokes a command, without writing some crutches to your test set up. And the most important: all issues that you experience while using this library can't be googled. All that you have is official site and discord channel with GitHub.
Honestly speaking I won't say JS or Ptrhon are good entry languages. My first language (of my personal choice before uni) was C++. In uni they required us to learn C, then C++ and Python, then C# (.NET Framework, WinForms, .NET Core, ASP .NET Core), Java (Java-FX, Android), PHP, Assembly (A51), then more advanced C# or Java (I've chosen C#) and C for microcontrollers. Surprisingly on my uni I've never met JavaScript as required language. I've graduated from faculty of Electrical Engineering (but still in Computer Science) thought. Currently I use mostly C#, Bash and Python.
IDK you lost me. I guess I'm just not backend enough anymore. I liked the look of insomnia so I grabbed it to check it out. It turns out they forced their entire user base to switch to cloud storage or be forced to work with the "scratch pad" which is basically garbage. I got nothing but a headache from this video.
I don't understand the trend now of so much separation. A seperayion that make things even more difficult to track and find. It makes much more sense to me to use a controller that handles all the crud operations. I think next year we will be creating a class to write the endpoint name in, another class to specify the method, another class for the function.then we will end up with hundreds of files instead of 1 class 50 lines controller . And just create a mini project with hundred of classes. I find this to be extreme over complicating simple thing to satisfy the trendy urge of being over organized
I didn't know about this, and it looks very cool. Can it be used for Mongo/Cosmos retries, where the exception tells you how long you should wait before retrying?
Not a fan of this approach. Actually seems like a lot more work than a standard controller approach which is tried and tested. I'm also not a fan of minimal apis either. Personally I don't like the "javascriptification" of endpoints and for me there is no reason to change to minimal apis given all the heavy program.cs config you have to do to get them to do what controllers do out of the box. Great video as always though and it's always good to see an alternative option even if it's not my cup of tea.
I’ve written something similar myself in the past. What I don’t understand is the way they chose to register the pipelines using keys. I would much rather have something like AddHttpClient<TService> where it registers against a service. So, AddResilliencePipeline<TService>(). Maybe it already does this but just wasn’t shown in your example?
A somewhat friendly unique identifier. In his example it's the name of the movie+year. That can be used in the URL instead of the internal ID for example
Is there a way to get a class from QueryString like controller? For example, [FromQuery] Parameter param? Last time I checked this lib I couldn't make it work
It has very good NSwag support, with a decent defaults and many extensions for tweaking the output. When using fastendpoints I find the swagger output is way ahead of API's written with Controllers. Controller based api's normally miss documenting how errors are handled since no one makes this a priority.
if I had a product like dynodb I would bent myself backwards to map it onto the entityframework, asking people to learn such wild new concept is tricky,. I was following and liking it until the aws stuff thats where I checked out mentally. I asked chatgpt to show me the same concept using ef core and postgres, which it did and I got it in 5 seconds.
I'm not sure you explained it, why do you prefer this? It seems like a lot of extra work compared to controllers, is it just due to speed and minimal apis being too minimal?
He likes it due to how it improves organization of the project. It works on the concept of low coupling high cohesion. By only having one endpoint per class you only inject the dependencies that matter to that specific endpoint. All of the code that is only relevant to that endpoint can all live in the same location (folder or file). Getting speed benefits by it using minimal APIs as its backing is just the cherry on top. There is an equivalent controllers based project called ApiEndpoints.
This seems like it has all of the verbosity of Controllers and all of the hackish looking parts of Minimal. Unless this had like a 50% performance boost over them, it's not something I'd use personally.
My biased opinion is that plain old controllers had way more elegant param control than this approach. And since you kind of mentioned that this is faster, it would have been nice to see some comparison between the two (just you like you been doing for tons of other content, which is great). I have a doubt that this will become very popular, but still - great initiative and kudos for the authors. Thanks for sharing!
minimal api + mediator. = this. Don't have anything bad to say here, someone had an idea and built it. Respect to that. However if you wanted to sell it as "fast" just spin up a listener yourself. Rule(s): Thou cannot undo complexity, you can simply move or hide it. Design around the axis of volatility. A metric used to understand if a piece of software is good or bad? - Does it generally and universally solve for maintainability? if yes then you're progressing and pushing forward, if no you've just built another branch of uncertainty and variance, try again. Luckily I don't make up the rules.
I don't think this has any real use case anymore. It might have had before minimal endpoints were a thing. Emphasis on might. In comparison to minimal endpoints, this seems to take about 10 times as much time, with no discernable upside. And splitting the logic of request and response is not one as that can hella easily be done with minimal endpoints as well, using extensions. It's a cool package and hats off to the devs, but these days, it just seems to exist to solve problems which are no longer there.
There's a significant group of people out there than think making code less organized and structured makes it more complex and therefore more impressive
As i have only been a software dev for 5 years, all i know is "agile" fascilitated by"scrum" it have always felt a bit process intense, but i do not know any alternatives. I am trying to go into business for my self and I would love to hear your take on running dev projects and about the alternatives to scrum.
I use minimal apis along with repr pattern, this thing does not seemm to add value over minimal apis. And also, I wrote a generic endpoint filter to take result object and return the response using Match. So I dont have to write Match..... in every endpoint. I just return a Result object, the endpoin filter do the rest