2015-12-14 3 views
0

I`ve получил такое API конфигурации в WSO2ESB:WSO2ESB REST API приоритет ресурс

<api xmlns="http://ws.apache.org/ns/synapse" name="b2e_rmq_getmessage" context="/b2e_rmq_getmessage"> 
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys/{keyid}/message*"> 
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys*"> 
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges*"> 
    <resource methods="GET" uri-template="/tenants*"> 
</api> 

Проблема заключается в том, что его не видно, как маршрутизация сообщений в этом коде. Они даже маршрутизируются случайным образом, и этот случайный порядок кэшируется. Например, если я сохраню этот API и назову его вторым (ключ *), он может назвать 4-й (арендатор *) вариант.

Но тогда я открываю API-конфигурацию и сохраняю его снова - я вызываю его со второй (клавишей *) опцией, он может вызывать 3-е (замена *).

Мои эксперименты показали, что порядок написания кода не имеет значения.

Как я мог сделать обработку приоритетов для этого случая? Моя цель - перейти к более сложному ури, если несколько ури соответствуют условию.

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

ответ

0

Я обнаружил, что нет способа решить эту проблему «по методу». Мой метод состоял в том, чтобы строго переписать uri-сопоставления. Например, на самом деле мы бы назвали метод «получить арендаторов» только двумя способами: «/ арендатор» (без подстановочных знаков), «/ арендатор? *».

Итак, вот вы идете:

<api xmlns="http://ws.apache.org/ns/synapse" name="b2e_elasticsearch_getrmqresource" context="/b2e_elasticsearch_getrmqresource"> 
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys/{keyid}/messages?*" inSequence="b2e_elasticsearch_getrmqresource_getmessage_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/> 
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys/{keyid}/messages" inSequence="b2e_elasticsearch_getrmqresource_getmessage_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/> 
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys?*" inSequence="b2e_elasticsearch_getrmqresource_getroutingkey_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/> 
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges/{exchangeid}/keys" inSequence="b2e_elasticsearch_getrmqresource_getroutingkey_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/> 
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges" inSequence="b2e_elasticsearch_getrmqresource_getexchange_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/> 
    <resource methods="GET" uri-template="/tenants/{tenantid}/exchanges?*" inSequence="b2e_elasticsearch_getrmqresource_getexchange_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/> 
    <resource methods="GET" uri-template="/tenants?*" inSequence="b2e_elasticsearch_getrmqresource_gettenant_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/> 
    <resource methods="GET" uri-template="/tenants" inSequence="b2e_elasticsearch_getrmqresource_gettenant_in_seq" outSequence="b2e_elasticsearch_getrmqresource_generic_out_seq" faultSequence="b2e_elasticsearch_getrmqresource_generic_fault_seq"/> 
</api> 
Смежные вопросы