Show HN: Jammin – Build Extensible APIs with Express and Mongo
github.com
github.com
Also, whenever I've tried to use something like this for an actual product I end up quickly outgrowing the simple CRUD model since you usually need to implement additional features ontop of the CRUD logic.
I was trying my hand at building something similar using Go because with you can just build a binary and plop that anywhere. API-in-a-can was my end-goal.
http://github.com/sergiotapia/paprika
I'm going to definitely keep working on it and iterate more.
Check out the middleware and extended usage sections for examples of how it can be extended to do things like access control and regex search.
Baucis looks neat, I'll have to dig into the docs some more.
My experience regarding building route logic into middleware is that it starts to break down as you add more complicated logic (Real-time support, webhooks, integration with a taskqueue, etc). This is mainly because the middleware pattern works best when it performs an atomic piece of common logic for a large number of routes.
However, when you start using middleware and binding it to a specific route, for a specific collection, you quickly end up with a situation where for any given route, you can no longer look at a single function and parse the flow of logic.
Also, I find these libraries deceptively simple. They may be great for your private weekend blog, but fail to address the major pain points of API implementation in a production setting:
- Configurable and flexible access control on a per-document basis.
- Rate limiting API requests
- Mutli-node deployments
- Proper, semantic, backwards-compatible API versioning
- Realtime support (Websockets, browserchannel, long-polling, w/e you prefer)
Now I'm not saying your library needs to cover all of these pain points, but I challenge you to address all of them using a middleware-based architecture while still maintaining your sanity :)Just my2c. The project looks great and hope you keep going with it and that I've provided some helpful feedback.
Cheers!
I'm also very interested in supporting websockets, but I'm not yet sure what that'd look like.
Thanks for the feedback!
Under load it seems to have stale reads on replica sets but I believe that it is being targeted for 3.1. Even rock solid databases like Cassandra suffered from the same issue.