That's a great point of reference, thanks for the tip. I'm in the market mostly for bits and pieces that I can stitch onto my project, so something like service-hub-examples is a great way to see how it's used. I haven't used protocols much, your project seems like a pretty good fit for them.
On Sun, Jan 12, 2014 at 11:03 PM, Jan Herich <jan.her...@gmail.com> wrote: > Hello Alexander, > > I did some work in this area some time ago, and the result was service-hub > library <https://github.com/ITEdge/service-hub> - created to simplify > basic CRUD services. > It's designed to allow more then one type of data-store, currently it > supports SQL databases (i use my own fork of korma here), > simple in-memory data-stores and datomic. > I built it around a set of "handler" protocols which define what basic and > more advanced data-store implementations can do, > you can see those > here<https://github.com/ITEdge/service-hub/blob/master/core/src/itedge/service_hub/core/handlers.clj> > . > Furthermore, the library tries to also simplify validations, > authorizations and wrapping those ready-to-be-exposed-to-outer-world > services behind another set of "services" protocols, see > here<https://github.com/ITEdge/service-hub/blob/master/core/src/itedge/service_hub/core/services.clj> > . > You can then simply use library web layer to automatically expose those > instances over web via ring & compojure libraries. > Regarding translating requests maps to data-structures for data-store > implementations, see for example korma util > namespace<https://github.com/ITEdge/service-hub/blob/master/persistence-korma/src/itedge/service_hub/persistence_korma/util.clj> > or datomic util > namespace<https://github.com/ITEdge/service-hub/blob/master/persistence-datomic/src/itedge/service_hub/persistence_datomic/util.clj> > . > There are also some examples of such CRUD based web-services in project > service-hub-examples <https://github.com/ITEdge/service-hub-examples>. > > I hope it will help you, or at least provides some clues > > Dňa pondelok, 13. januára 2014 3:25:40 UTC+1 Alexandr Kurilin napísal(-a): > >> I'm investigating adding query options to my Ring app's GET requests for >> the more boring CRUD routes. >> >> I'd like to allow the caller to specify a set of SQL-level query >> customizations such as sorting, paging, counting, distinct ons, limits, >> some basic constraints etc. across all of my resources, ideally in such a >> way that I only have to write this once and it will magically "just work" >> across the board. >> >> First of all, there's the hard question of elegantly designing the API >> itself and how a caller will be able to specify query details. I have some >> experience with how Parse.com does this with their JSON requests (they >> pretty much allow you to specify the whole query in there), but I've heard >> Stack Overflow's and Elastic Search's APIs mentioned as good examples as >> well. Any other ones you'd recommend? >> >> Second, there's the whole business of translating those maps into >> requests. As far as I can tell, Korma is the right fit here, but I might be >> also missing out on another good SQL-generation library that I should know >> of, something I might integrate directly with clojure.jdbc. This doesn't >> sound like an unsolved problem. >> >> Folks, I could use words of wisdom on the subject. Have you done this >> kind of work on your APIs before? What did you use for reference? Anything >> clojure-specific I could leverage here to make it as elegant and concise as >> possible? >> >> Cheers! >> > -- > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > -- Alexandr Kurilin 206.687.8740 | @alex_kurilin <https://twitter.com/alex_kurilin> | blog<http://www.kurilin.net> -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.