Compojure: необязательный параметр URL

Я хочу определить ресурс в Compojure следующим образом:

(ANY "myres/:id" [id] (handler))

и я хочу, чтобы: id был необязательным (в зависимости от того, указан ли идентификатор, мой API будет вести себя по-разному).

Это нормально работает, если я попытаюсь получить доступ

http://mydomain/myres/12

Однако, если я попытаюсь получить доступ

http://mydomain/myres

без указания идентификатора получаю 404.

Есть ли способ сделать параметр: id необязательным?

Спасибо!


person Nico Balestra    schedule 06.04.2013    source источник


Ответы (1)


Как насчет создания двух разных маршрутов, одного с идентификатором, а другого без него, и вызова обработчика из обоих маршрутов, как показано ниже:

(defn handler
    ([] "Response without id")
    ([id] (str "Response with id - " id)))

(defroutes my-routes
    (ANY "myres" [] (handler))
    (ANY "myres/:id" [id] (handler id)))
person Ankur    schedule 06.04.2013
comment
Спасибо за решение, которое обязательно применю! Жаль, что параметр: id по умолчанию не считается необязательным. Мне не нравится идея определять два маршрута, особенно если у меня много ресурсов по одному и тому же шаблону :( - person Nico Balestra; 07.04.2013