Apigee — как перенаправить на другой ресурс

У меня есть прокси-сервер API, созданный с помощью Apigee, который работает правильно. Однако я хочу изменить имя ресурса.

В настоящее время у меня есть следующий ресурс:

<proxy>/collection/{Id}/products, который перенаправляет на <myService>/collection/{Id}/products

Я хочу переименовать прокси-ресурс следующим образом:

<proxy>/collection/{Id}/apps, который перенаправляет на <myService>/collection/{Id}/products

Как лучше всего это сделать с Apigee?

С уважением, Чавдар


person Chavdar    schedule 10.12.2013    source источник
comment
Какой у вас существующий xml? И какая конечная точка (прокси или цель) включена?   -  person brandonscript    schedule 10.12.2013
comment
Уточните, пожалуйста, что вы имеете в виду под редиректом. Вы хотите отправить заголовок Location обратно или пытаетесь проксировать другой путь на своей цели?   -  person OmidTahouri    schedule 10.12.2013
comment
Я пытаюсь проксировать другую цель. Спасибо!   -  person Chavdar    schedule 12.12.2013


Ответы (1)


Если вы хотите передавать запросы от /collection/{id}/apps к /collection/{id}/products, добавьте политику JavaScript к целевому запросу со следующим фрагментом кода:

var collection_id = 10; //you should get this using context.getVariable()
var path = '/collection/' + collection_id + '/products'; //new path
var current_target_url = context.getVariable('target.url'); //get the existing target url
context.setVariable('target.copy.pathsuffix', false); //tell apigee to not copy the path over to the target
context.setVariable('debug.js.path', current_target_url + path); //this line is only for seeing the value in the trace tool
context.setVariable('target.url', current_target_url + path); //set the new path
person OmidTahouri    schedule 10.12.2013
comment
Пробовал это. Вроде рабочий подход. Единственная проблема заключается в том, что это перенаправит все ресурсы на продукты, а не только на приложения. Я пытался сделать это в запросе прокси: var collection_id = 1; // вы должны получить это, используя context.getVariable() var path = '/collection/' + collection_id + '/products'; // новый путь var current_request_path = context.getVariable('request.path'); // получить существующий путь запроса context.setVariable('request.path', path); // установить новый путь Это не сработало. Есть идеи? - person Chavdar; 12.12.2013
comment
Вам нужно установить новый URL-адрес для цели, так как именно туда будет идти запрос. Вы можете обернуть код условием: if(context.getVariable('proxy.pathsuffix') == "/collection/{id}/apps"){...}. В качестве альтернативы добавьте ту же логику в <Condition> JavaScript <Step>. - person OmidTahouri; 12.12.2013