Api Connect GatewayScript, apim не определен

Мы только что установили версию API Connect 2018 у себя (установленную в Openshift) и пытались следовать некоторым примерам, которые я нашел в руководствах IBM. МОЯ проблема в том, что я вообще не могу использовать политику Gatewayscript, так как apim, похоже, вообще не определен.

Я пытаюсь просто:

var req=apim.setvariable('message.body',"hello there!");

Точная ошибка, которую я получаю: Ошибка GatewayScript: Ошибка обработки GatewayScript 'ReferenceError: apim не определен. Что мне здесь не хватает? Почему «apim» определен во всех учебниках IBM, но не в нашей установке?


person Gregory Efthimiopoulos    schedule 11.12.2018    source источник
comment
Я столкнулся с этой проблемой, когда пытался использовать DataPower API Gateway (вместо DataPower Gateway, совместимого с v5). Я заметил, что весь код APIM не был развернут на шлюзе так же, как на v5-совместимом.   -  person EliSherer    schedule 10.01.2019


Ответы (1)


Фон

API Connect 2018 предоставляет два варианта шлюзов.

(1) DataPower Gateway — совместимость с v5

Этот шлюз совместим с APIC v5, а значит, и политика GatewayScript. Вам не нужно делать ничего дополнительно, чтобы иметь возможность использовать apim.setvariable, как вам не нужно было в v5.

(2) Шлюз API DataPower

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


Опции APIGW

У вас есть два варианта для вашего конкретного примера apim.setvariable в политике GatewayScript при использовании этого APIGW:

(Вариант 1): Перенесите свой код GatewayScript, чтобы использовать новые функции, доступные в GatewayScript, в новом шлюзе API. У них должны быть лучшие интерфейсы, лучшая производительность и исправлено много ошибок. Обычно они задокументированы здесь: https://www.ibm.com/support/knowledgecenter/en/SS9H2Y_7.7.0/com.ibm.dp.doc/context_apigw_js.html

Конкретная функция, которую вы ищете для установки переменной в контексте API, задокументирована здесь: https://www.ibm.com/support/knowledgecenter/en/SS9H2Y_7.7.0/com.ibm.dp.doc/context_apigw_js.html#context.set

Чтобы установить переменную в контексте API, как в приведенном выше примере, вероятно, будет: context.set('message.body',"hello there!");

(Вариант 2): Если вы хотите использовать новый APIGW для других преимуществ, но у вас также есть политики GatewayScript, для переноса которых у вас не так много времени, и вы готовы остаться с более низкой производительностью и т. д. на время находясь в этой части вашего API, то для этих политик GatewayScript вы можете использовать Compatibility Layer в реализации политики APIGW GatewayScript.

Это сократит общее время переноса, но все же могут потребоваться некоторые изменения в сценарии.

Чтобы использовать этот Compatibility Layer, добавьте в свой GatewayScript явную строку var apim = require('apim');, после чего вы сможете использовать функции обратной совместимости APIM.

Например, в вашем случае в вопросе:

var apim = require('apim');
var req=apim.setvariable('message.body',"hello there!");

Зачем заставлять вас добавлять дополнительную строку? Одна из причин заключается в том, что это помогает вам убедиться, что вы случайно не используете Compatibility Layer в своих новых сценариях GatewayScript, которые вы пишете для API Connect 2018 и последующих версий. Хотя старые функции по-прежнему доступны, по умолчанию он будет пытаться помочь вам использовать только новые функции с более высокой производительностью. При необходимости это всего лишь одна дополнительная строка в верхней части скрипта.


Резюме

В целом у вас остается три варианта с API Connect 2018 для ваших старых политик APIC v5 GatewayScript:

  • DataPower Gateway — совместимость с v5 — полная совместимость и повторное использование именно ваших старых файлов сценариев
  • Шлюз API DataPower с уровнем совместимости — добавьте одну дополнительную строку require и значительно упростите процесс переноса.
  • Полностью нативный шлюз API DataPower — лучший опыт и производительность, но больше работы для переноса ваших скриптов, используйте новые функции, задокументированные здесь: https://www.ibm.com/support/knowledgecenter/en/SS9H2Y_7.7.0/com.ibm.dp.doc/context_apigw_js.html
person Morris    schedule 15.01.2019