Hi all. We here at Metosin have been developing and using a bunch of small utilities for Ring-based web api development. Here they are:
*1) ring-http-response *(https://github.com/metosin/ring-http-response) Real http status codes for Ring - ported from Spray[1]. There is a response function for most of the http-statuses available (ok, found, not-found,...) taking either a body, url or nothing as a parameter. In addition, for all erroneous responses there is a exception throwing version with '!' in the end (bad-request!, not-found!,...). There is also a middleware for catching these response exceptions and returning the thrown http-response instead. Namespace *ring.util.http-response* can be used to replace the original *ring.util.response*. Should be stable. *2) ring-swagger* (https://github.com/metosin/ring-swagger) We wanted there to be a standalone Swagger[2] implementation for Ring, not tied to the used routing library. There is already Swag[3] and Octohipster[4], but both have strong opinions about routing. Ring-Swagger is integrated with Prismatic Schema for data modeling & coercing (should it support other validation libs also?). Offers a simple map-based api for routing & other higher level web libs to publish their routes. There is an adapter for Compojure on top of this, more later. Would be fun to other routing/web libs adapt to this too (should be quite straightforward to collect routes from bidi for example) Not yet feature complete. All feedback & Pull Requests welcome. *3) ring-swagger-ui* (https://github.com/metosin/ring-swagger-ui) Maven-packaged version of the Swagger-UI[5]. Follows the version numbers of the original npm packages (permission to publish as maven artifact from the Reverb guys, thanks guys!). Has some small changes in the ui. All stuff can be overridden locally (mainly the index page). *4) compojure-api* (https://github.com/metosin/compojure-api) Originally was supposed to be just compojure-swagger, but added other stuff to make life of an web api development easier. Everything can be used separately, but there is also a *compojure.api.sweet* package, which can be used as a single entry point to the library. Basic Swagger-functionality works with vanilla Compojure but to enable all features (better way to setup route meta-data, schema-aware body destructuring, return schemas etc.), there is a extended api, with '*' in the name of the http-methods (GET*, POST*). Currently the extended api is also sitting on top of Compojure and internally overrides a compile-route function from *compojure.core* to enable easy way to add meta-data to routes. Thinking of re-implementing the new api directly on top of Clout instead of trying to sit on top of the (otherwise awesome) Compojure. Currently work in progress. Acts also as a demo how to use & bind together the underlying more stable libs (ring-http-response, ring-swagger &ring-swagger-ui). *5) compojure-api-examples* ( https://github.com/metosin/compojure-api-examples) A sample minimalistic project to see things in action and to start creating schema-aware documented web apis. ... Hopefully some of the stuff is found useful, on both Github & Clojars. We are using (and developing) these anyway with our projects. Also waiting eagerly for the @PrismaticEng next web thingie coming out soon(?), whether these libs complement or overlap each other. Would appreciate your comments and thoughts on the concepts or the code. Either here or via email: first-name (at) metosin.fi or ikitommi at freenode & twitter. regards, Tommi -- [1] http://spray.io [2] https://github.com/wordnik/swagger-core/wiki [3] https://github.com/narkisr/swag [4] https://github.com/myfreeweb/octohipster [5] https://github.com/wordnik/swagger-ui -- 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.