On Sat, Apr 10, 2010 at 4:41 AM, Peter Robinson <thaldyron@gmail.com> wrote:
On 6 April 2010 21:38, Michael Snoyman <michael@snoyman.com> wrote:
> It's like you read my mind... I very consciously designed this in such a way
> that it would be possible to do this. More to the point: I think it would be
> possible to use web-routes-quasi to create a RESTful API and then
> auto-generate the basic API documentation. I'd like to eventually figure out
> a way to support GET and POST parameters as well for this.
> Anyway, for the basic [String] methods, I can add support for it in the
> future; I'd rather wait until we have the rest of web-routes settled down
> first.
> (Of course, a patch is always welcome.)

Here are some more thoughts on the above point:

The handler functions take the user supplied type, a function (MyRoute ->
String), and the fields of the corresponding MyRoute constructors as
parameters.

- Wouldn't it be simpler to automatically derive an instance of Show for
the MyRoute type? (Since MyRoute is created on the fly anyway, I don't
see why anyone would want to derive a different Show instance.)

Multiple problems:

* The rest of web-routes doesn't use Show that way.
* Usually, we'll need another parameter to create this function, such as the application root.
* Show is usually the inverse of Read. I suppose we could make the Read instance the other side, but that we're just not following what is normally expected of these instances, which is to return Haskell-formatted data.

- About the possibility of querying the supported methods: The use case
scenario I have in mind is having a default handler for handling OPTIONS
that returns the available methods. Currently this won't work since that part
of the resource information is unavailable inside the handler. Do you have any
thoughts on how to change the design to make this possible?

Well, the simplest thing I can do is make the [Resource] result from the quasi-quoting available, which would give you enough information to write something to intercept OPTIONS requests before handing them to the rest of the application. Does that sound good enough?

MichaelĀ