Использование достаточных(хороших) URL-адресов в плагине JIRA

Применимо: Этот документ применяется к JIRA 6.0.

Вы можете использовать структуру URL, чтобы добавить больше смысла в ваш JIRA-плагин. Мы называем эту технику хорошими URL-адресами.

На этой странице обсуждаются модули маршрутизации и оформления URL-адресов, а также показано, как устанавливать плагины на место, чтобы вы могли контролировать свои URL-адреса и где они ведут.

Связанный контент

Модуль плагина маршрутизации URL

Модуль плагина оформления сайта SiteMesh

Стандартные структуры URL  JIRA

JIRA генерирует ряд стандартных структур URL, основанных на типе используемой вами точки плагина.

Например, действия веб-сайта по умолчанию сопоставляются с URL-адресом, например, /jira/secure/YourAction.jspa, в то время как сервлеты плагинов отображают URL-адрес, например / jira / plugins / servlet / yourcode / yourservlet.

Благодаря симпатичным модулям маршрутизации URL-адресов вы можете использовать структуру URL по вашему выбору, которая более значима для ваших пользователей.

Как сделать URL-адреса приятными

Простая маршрутизация

Вы можете перенести любой URL-адрес в один из ваших вариантов. Вы делаете это, добавляя элементы <route> в свой atlassian-plugin.xml


<routing key="prettyurls-key" path="/prettyurls">
    <route from="/are/{verb}" to="/secure/LessPrettyName.jspa"/>
    <route from="/can/{verb}" to="/secure/LessPrettyName.jspa"/>
</routing>

Первая запись выше будет отображать URL-адреса, как показано ниже:


http://localhost:2990/jira/prettyurls/are/cool  ==> http://localhost:2990/jira/secure/HorribleName.jspa?verb=cool

Здесь следует отметить атрибут верхнего уровня path  пути в объявлении модуля <routing>. Это контрольный «префикс» для всех маршрутов, содержащихся внутри. Этот префикс применяется по соображениям производительности. Чтобы определить, нужно ли перенаправлять URL-адрес вообще, код просматривает пути верхнего уровня и выполняет обычное дешевое сопоставление строк. Если это так, то это может привести к значительно более дорогостоящей операции вычисления инструкций <route>. Это уравновешивает гибкость при использовании большинства симпатичных URL-адресов, которые вам нравятся, и, поддерживает  производительность JIRA насколько это возможно.

Параметры шаблона URL

Довольно URL-адреса используют синтаксис jax-ws для определения параметров URL-маршрута и обеспечения их доступности для назначения в качестве дополнительных jax-ws-переменных или чаще всего в качестве параметров запроса. Любые оставшиеся параметры, которые не переназначены в целевом URL, передаются в качестве параметров запроса. Например :


http://localhost:2990/jira/prettyurls/are/cool?leftover=parameters&are=passedon  ==> http://localhost:2990/jira/secure/HorribleName.jspa?verb=cool&leftover=parameters&are=passedon

Вы можете использовать переменные шаблона в пределах назначения URL и, следовательно, допускать более динамическую маршрутизацию. Например:


<routing key="prettyurls-key" path="/prettyurls">
        <route from="/hello{world}/{id}" to="/plugins/servlet/hello{world}?idParameter={id}"/>
</routing>

вы можете в конечном итоге динамически отображать два разных URL-адреса на два разных названных сервлета, как показано ниже.


http://localhost:2990/jira/prettyurls/helloCleveland/key123  ==> http://localhost:2990/jira/plugins/servlet/helloCleveland?idParameter=key123
 
http://localhost:2990/jira/prettyurls/helloSydney/key456  ==> http://localhost:2990/jira/plugins/servlet/helloSydney?idParameter=key123

Здесь вы можете узнать больше о тонкостях синтаксиса jax-ws.

HTTP-глаголы

Вы можете ограничить HTTP-глаголы, по которым маршрутизация будет проходить через атрибут глаголов. Например:


<routing key="prettyurls-key" path="/prettyurls">
       <route from="/some/path/you/only/want/on/get" to="/secure/LessPrettyName.jspa" verbs="get"/>
       <route from="/some/path/you/only/want/on/post" to="/secure/LessPrettyName.jspa" verbs="post"/>
       <route from="/some/path/you/only/want/on/postputordelete" to="/secure/LessPrettyName.jspa" verbs="post,put,delete"/>
</routing>

Существует также синтаксический сахар для известных HTTP-глаголов get, put, post, head, delete, options и patch.


<routing key="prettyurls-key" path="/prettyurls">
        <get from="/some/path/you/only/want/on/get" to="/secure/LessPrettyName.jspa"/>
        <post from="/some/path/you/only/want/on/post" to="/secure/LessPrettyName.jspa"/>
 </routing>

Место расположения цепи фильтров

Вы можете контролировать, когда маршрутизация происходит через атрибут location. Допустимые значения - before-decoration, before-login и before-dispatch (перед оформлением, перед регистрацией и перед отправкой). Самое полезное место before-dispatch.

Значения местоположения описаны здесь Модуль плагина сервлет-фильтра


<routing key="prettyurls-ref-rest-after-encoding" path="/prettyjson" location="before-dispatch">
    <route from="/" to="/rest/prettyjson/1.0/json"/>
</routing>

<routing key="prettyurls-ref-before-login" path="/before/login" location="before-login">
    <route from="/are/{verb}" to="/secure/LessPrettyName.jspa"/>
</routing>

<routing key="prettyurls-ref-before-decoration" path="/before/decoration" location="before-decoration">
    <route from="/get/allowed" to="/secure/LessPrettyName.jspa" verbs="get"/>
    <route from="/get/post/allowed" to="/secure/LessPrettyName.jspa" verbs="get,post"/>
</routing>

Запросы маршрутизации REST

Если вы хотите перенаправить на ресурсы REST, вам нужно изменить декларации типа модуля <rest>, чтобы убедиться, что они содержат атрибут диспетчера FORWARD. Причиной этого является то, что под обложками Pretty URLs использует пересылку запроса как свою реализацию и как таковой, ресурсы REST должны быть сопоставлены с контекстом диспетчера FORWARD. По умолчанию контекст диспетчера <rest> имеет значение REQUEST, и, следовательно, он не будет соответствовать ожиданию без этой конфигурации.


<rest key="prettyurls-ref-rest" path="/prettyjson" version="1.0">
    <package>com.atlassian.labs.prettyurl</package>
 
    <!--In order to allow REST calls to be intercepted you MUST include a FORWARD call here-->
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</rest>

Как сделать красивые URL-адреса декорированные SiteMesh

JIRAне делает  SiteMesh декорируя все пути URL (а также не по ряду причин, включая производительность), поэтому вы должны сказать об этом, если хотите, чтобы ваши новые URL-адреса были декорированы.

Вы можете сделать это с помощью типа модуля <sitemesh>.


<sitemesh key="unique-key-for-module-type" path="/pluginpath"/>

Это приведет к тому, что все ответы text / html в любом месте этого пути будут украшены SiteMesh. Соответствие выполняется с помощью семантики String.startsWith ().

Если вы создаете свои собственные симпатичные URL-адреса, то, скорее всего, вам нужно будет использовать этот модуль для оформления, как и другие части JIRA.

JIRA поставляется со стандартным набором путей, которые украшены SiteMesh. Если ваш ресурс находится где-то внутри любого из этих путей, вы не должны указывать его как объявление <sitemesh>.

Путь

Кроме

/secure/*

/secure/attachment,

/secure/thumbnail,

/secure/applet*

/view/*

 

/browse/*

 

/plugins/servlet/*

 

/issues/*

 

/i

 

*.jsp

legacy - плагины не могут и не должны поставлять JSP-страницы

Если у запроса есть следующие заголовки, декорация SiteMesh не произойдет:

  • X-SiteMesh-OFF
  • X-PJAX

 

По материалам Atlassian JIRA  Server Developer Using pretty URLs in a JIRA plugin