Как правильно возвращать заголовки местоположений и выполнять HATEOAS с помощью Apigee?

#apigee

#apigee

Вопрос:

Наша конфигурация Apigee выглядит примерно так:

Netscaler LB -> Маршрутизатор / обработчик сообщений Apigee -> Netscaler LB — Целевые серверы

Целевой сервер в данном случае является приложением Java с Jersey, и я использую Jersey @Context для извлечения соответствующей информации URI, чтобы задать, например, заголовки Location, но все детали запроса, похоже, относятся к Netscaler, а не к исходному запросу.

Если мы используем политику AssignMessage и вручную устанавливаем URL-адрес X-Forwarded-Host в качестве URL-адреса, который вызывает клиент, тогда все работает так, как должно работать. К сожалению, похоже, что нет переменной, которую мы могли бы использовать вместо ее жесткого кодирования — все в документах вокруг переменных, похоже, указывает, что вы можете получить пути только после самого домена.

Комментарии:

1. По сути, я пытаюсь сделать то, что сделано в этом видео — youtube.com/watch?v=Id_yQ5e6sgw — но без жестко запрограммированной части.

Ответ №1:

Находясь в <ProxyEnpoint> сегменте запроса, вы можете ссылаться на переменную request.header.host , и она предоставит вам хост, который клиент запросил в Apigee.

Например, если ваш URI являетсяhttps://myorg-test.apigee.net/resource , request.header.host в сегменте запроса ProxyEndpoint будет иметь значение myorg-test.apigee.net .

Если вы попытаетесь сослаться на это в TargetEndpoint , возможно, оно уже перезаписано на серверном узле для целевого запроса. Если вам это нужно в targetEndpoint, сначала назначьте его переменной в ProxyEndpoint/PreFlow/Request , а позже вы сможете ссылаться на переменную originalHost :

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="grabOriginalHost">
    <AssignVariable>
        <Name>originalHost</Name>
      <Ref>request.header.host</Ref>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>
  

Комментарии:

1. Спасибо — так вы бы порекомендовали использовать это значение вместо X-Forwaded-Host тогда? Я обнаружил, что X-Forwarded-Host также работает, если он установлен в Netscaler, который находится перед Apigee.