Grails Динамическое Отображение Конечной Точки Отдыха - PullRequest
0 голосов
/ 20 апреля 2019

В моих UrlMappings я определил это отображение:

"/$controller/$action?/$id?(.$format)?"{}

, и теперь я хочу добавить набор служб версии 2.

, например: Новая служба в URI: /api/myaction

и я хочу иметь возможность определить новую конечную точку /api/v2/myaction, где myaction сопоставится с новым действием с именем myactionV2

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Есть несколько способов сделать это, и лучшее решение зависит от некоторых факторов, которые вы не включили в свой вопрос. Вот решение, которое наиболее точно соответствует вопросу, и комментарий, который ОП добавил выше.

См. Проект на https://github.com/jeffbrown/javaheadendpoints.

https://github.com/jeffbrown/javaheadendpoints/blob/47f41b3943422c3c9e44a08ac646ecb2046972d1/grails-app/controllers/demo/v1/ApiController.groovy

package demo.v1

class ApiController {
    static namespace = 'v1'

    def myaction() {
        render 'This request was handled by version 1 of the api'
    }
}

https://github.com/jeffbrown/javaheadendpoints/blob/47f41b3943422c3c9e44a08ac646ecb2046972d1/grails-app/controllers/demo/v2/ApiController.groovy

package demo.v2

class ApiController {
    static namespace = 'v2'

    def myaction() {
        render 'This request was handled by version 2 of the api'
    }
}

https://github.com/jeffbrown/javaheadendpoints/blob/47f41b3943422c3c9e44a08ac646ecb2046972d1/grails-app/controllers/demo/v3/ApiController.groovy

package demo.v3

class ApiController {
    static namespace = 'v3'

    def myaction() {
        render 'This request was handled by version 3 of the api'
    }
}

https://github.com/jeffbrown/javaheadendpoints/blob/47f41b3943422c3c9e44a08ac646ecb2046972d1/grails-app/controllers/javaheadendpoints/UrlMappings.groovy

package javaheadendpoints

class UrlMappings {

    static mappings = {
        "/$controller/$action?/$id?(.$format)?"{
            constraints {
                // apply constraints here
            }
        }

        "/$controller/$namespace/$action/$id?(.$format)?" {
            // ...
        }

        "/"(view:"/index")
        "500"(view:'/error')
        "404"(view:'/notFound')
    }
}

Отправка запросов дает то, что я считаю запрашиваемым поведением:

$ curl http://localhost:8080/api/v1/myaction
This request was handled by version 1 of the api
$ curl http://localhost:8080/api/v2/myaction
This request was handled by version 2 of the api
$ curl http://localhost:8080/api/v3/myaction
This request was handled by version 3 of the api

Другие варианты включают использование заголовка Version http, но из-за некоторых формулировок, приведенных выше, я думаю, что это не совсем то, что вы хотите.

Надеюсь, это поможет.

0 голосов
/ 20 апреля 2019

не предполагайте этого, способ, который я предлагаю, - разделить на два контроллера

/api1/myaction
/api2/myaction

или в действии

/api/myaction1
/api/myaction2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...