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.

Reply via email to