couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robert Newson <robert.new...@gmail.com>
Subject Re: Content-Type Negotiation/Programmatic URL rewriting
Date Thu, 11 Mar 2010 13:39:03 GMT
adding "headers" to pattern matching achieves my goal and seems simple
enough. I'll work on patch.

In other news, I'm at the 10gen nosql conference right now. :)

B.

On Thu, Mar 11, 2010 at 12:17 AM, Jan Lehnardt <jan@apache.org> wrote:
>
> On 10 Mar 2010, at 21:07, J Chris Anderson wrote:
>
>>
>> On Mar 10, 2010, at 7:47 PM, Robert Newson wrote:
>>
>>> All,
>>>
>>> I want to retrieve the JSON document or a specific binary attachment
>>> of it from the same URL, conditional on the Accept header. That is,
>>> "/db/doc" is either JSON metadata or a binary stream, depending on
>>> content-type negotiation. The below rewrite enhancement would achieve
>>> it, I think, but perhaps there's a cleaner way? Right now, I'm adding
>>> another Erlang module to achieve this but I would really like to do it
>>> entirely from a design document.
>>>
>>> I'm thinking of writing a new kind of rewrite handler. I have a case
>>> where it would be very useful to rewrite a URL based on the contents
>>> of a request header. That is, the presence of a particular header will
>>> alter the path, but not otherwise;
>>>
>>> {
>>>  "_id":"_design/foo",
>>> "rewrites": {
>>>   "bar": {
>>>     "function":"function(req){ if (req.headers["Accept"] == blah) {
>>> return req.path + "extra";} return req.path"
>>>
>>> that is, the rewrite handler would get a full request object and
>>> return the rewritten path, and could use anything from the request to
>>> do so.
>>>
>>
>> we originally decided against an executable rewrite handler for reasons of performance.
>
> One could argue that optional executable rewrites are okay. Especially when written as
> Erlang functions.
>
>
>> is there a way to add to the pattern matching api to achieve this?
>
> "from": {
>  "path":"/db/:doc",
>  "headers":{"Accept":"application/octet-stream"}
> },
> "to":"/db/doc/attachment"
>
> "from": {
>  "path":"/db/:doc",
>  "headers":{"Accept":"application/json"}
> },
> "to":"/db/doc"
>
> Could do the trick, but I don't want to be the one implementing that :)
>
> Cheers
> Jan
> --
>
>

Mime
View raw message