2013-05-28 3 views
5

Каковы полезные способы (библиотеки или код) для создания маршрутизации и создания URL-адресов в Clojure?Обратная маршрутизация/генерация URL-адресов в Clojure?

Я смотрел исходный код Compojure, но не видел никаких указаний на то, что его маршрутизация также предназначена для генерации URL-адресов. Что еще там?

Ответ, который говорит, что «нет такой библиотеки», на самом деле очень полезен, если вы поддерживаете его доказательствами и/или опытом.

Мотивация для этого вопроса исходит из первого раздела Rails Routing Guide: «Маршрутизатор Rails распознает URL-адреса и отправляет их в действие контроллера. Он также может генерировать пути и URL-адреса, избегая необходимости жестких строк в ваших представлениях. "

Уважаемый пользователь: Я знаю кого-то там (может быть, вы?) Хочет сказать: «Не беспокойтесь о генерации URL-адресов, просто строки жесткого кода для вашего URL-адреса». Да, я знаю, что может сделать это, но это не является ответом на этот вопрос. :) Это не вопрос о мудрости или плюсах и минусах комбинированной маршрутизации и генерации URL. Это примерно , как вы это делаете?

ответ

4

Сервисный уровень Pedestal выполняет как маршрутизацию, так и создание URL-адресов; эта функциональность описана в разделе Service Routing документации по пьедесталу.

1

Я написал минимальную замену макросов маршрутизации compojure, которая позволяет вам называть шаблоны маршрутизации и генерировать URL-адреса для них. Он находится на https://github.com/joodie/clout-link

2

Я только что наткнулся на route-one, который выглядит так. Это небольшая библиотека, которая полностью совместима с Compojure и предоставляет способ определения маршрутов, которые можно запускать в обратном порядке.

Из их документации, вы можете определить маршрут, как это:

(defroute document "/documents/:document-id") 

и пару вспомогательных функций будет генерироваться:

(document-path :document-id "123") 
;; => "/documents/123" 

(with-base-url "https://myservice.com" 
    (document-url :document-id "123")) 
;; => "https://myservice.com/documents/123" 
0

Намного позже, но экосистема Clojure переехал довольно бит:

  • пьедестал service-routing делает это (но для этого требуется бай-ин для других вещей)
  • bidi делает только то, что вы описываете, а также имеет хорошее сравнение с другими библиотеками.

Взятый из двунаправленного README, здесь это сравнение (с помощью кнопки Run code): (я сделал это, чтобы использовать HTML, потому что StackOverflow уценки не поддерживает таблицу).

<table> 
 
<thead> 
 
<tr> 
 
<th>Library</th> 
 
<th>clj</th> 
 
<th>cljs</th> 
 
<th>Syntax</th> 
 
<th>Isomorphic?</th> 
 
<th>Self-contained?</th> 
 
<th>Extensible?</th> 
 
</tr> 
 
</thead> 
 
<tbody> 
 
<tr> 
 
<td><a href="https://github.com/weavejester/compojure">Compojure</a></td> 
 
<td>✔</td> 
 
<td></td> 
 
<td>Macros</td> 
 
<td></td> 
 
<td>✔</td> 
 
<td></td> 
 
</tr> 
 
<tr> 
 
<td><a href="https://github.com/cgrand/moustache">Moustache</a></td> 
 
<td>✔</td> 
 
<td></td> 
 
<td>Macros</td> 
 
<td></td> 
 
<td>✔</td> 
 
<td></td> 
 
</tr> 
 
<tr> 
 
<td><a href="https://github.com/clojurewerkz/route-one">RouteOne</a></td> 
 
<td>✔</td> 
 
<td></td> 
 
<td>Macros</td> 
 
<td>✔</td> 
 
<td>✔</td> 
 
<td></td> 
 
</tr> 
 
<tr> 
 
<td><a href="http://pedestal.io/">Pedestal</a></td> 
 
<td>✔</td> 
 
<td></td> 
 
<td>Data</td> 
 
<td>✔</td> 
 
<td></td> 
 
<td></td> 
 
</tr> 
 
<tr> 
 
<td><a href="https://github.com/thatismatt/gudu">gudu</a></td> 
 
<td>✔</td> 
 
<td></td> 
 
<td>Data</td> 
 
<td>✔</td> 
 
<td>✔</td> 
 
<td></td> 
 
</tr> 
 
<tr> 
 
<td><a href="https://github.com/gf3/secretary">secretary</a></td> 
 
<td></td> 
 
<td>✔</td> 
 
<td>Macros</td> 
 
<td>✔</td> 
 
<td>✔</td> 
 
<td>✔</td> 
 
</tr> 
 
<tr> 
 
<td><a href="https://github.com/DomKM/silk">silk</a></td> 
 
<td>✔</td> 
 
<td>✔</td> 
 
<td>Data</td> 
 
<td>✔</td> 
 
<td>✔</td> 
 
<td>✔</td> 
 
</tr> 
 
<tr> 
 
<td><a href="https://github.com/Prismatic/fnhouse">fnhouse</a></td> 
 
<td>✔</td> 
 
<td></td> 
 
<td>Macros</td> 
 
<td></td> 
 
<td></td> 
 
<td>✔</td> 
 
</tr> 
 
<tr> 
 
<td>bidi</td> 
 
<td>✔</td> 
 
<td>✔</td> 
 
<td>Data</td> 
 
<td>✔</td> 
 
<td>✔</td> 
 
<td>✔</td> 
 
</tr> 
 
</tbody> 
 
</table>

Смежные вопросы