2014-02-03 3 views
3

У меня есть куча маршрутов с одинаковым префиксом:Добавить префикс в кучу адресов

# with prefixes 
GET   /api/v1.0/action1 controllers.Api.action1 
GET   /api/v1.0/action2 controllers.Api.action2 
GET   /api/v1.0/action3 controllers.Api.action3 
GET   /api/v1.0/action4 controllers.Api.action4 

# normal urls 
GET   /action1 controllers.Home.action1 
GET   /action2 controllers.Home.action2 

Я хочу, чтобы избавиться от повторения /api/v1.0/. URL-адреса должны оставаться неизменными, я просто не хочу писать их вручную для каждого URL-адреса в файле route. В Rails это возможно. Если есть способ сделать это?

+0

Если у вас есть такой тривиальный пример, попробуйте: 'GET /api/v1.0/:action controllers.Api.action (действие: String)' и отправка в controller: 'def action (action: String) = Action {def method: java.lang.reflection.Method = getMethodFromNameOrMap (действие); method.invoke()} ' –

+0

@ajozwik, это будет медленным из-за отражения –

+0

, если вы используете кешированную карту (имя карты для метода) - она ​​будет на два раза медленнее обычного вызова. Но стоимость с каждой реализацией JVM ниже. –

ответ

0

Либо вы реализуете свой собственный маршрутизатор для этих действий после James Ropers' post, как упоминалось Rich. Это, позволяет добавить следующие строки в ваш файл маршрута:

-> /api/v1.0 YourPathBindableController 

В качестве альтернативы вы можете использовать плагин, например, navigator, который предлагает вам передовые маршрутизации. Ваш файл навигатор маршрут будет содержать что-то вроде:

// Namespace ... 
namespace("api"){ 
    namespace("v1"){ 
    GET on "index" to Application.index _ 
    } 
} 

// ... or with reverse routing support 
val api = new Namespace("api"){ 
    val v2 = new Namespace("v2"){ 
    val about = GET on "about" to Application.about _ 
    } 
} 
Смежные вопросы