Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что
Предоставляет доступ на основе правил к хранилищу карт "ключ-значение" (KVM), доступному в Apigee Edge. Пары "ключ-значение" можно хранить, извлекать и удалять из существующих именованных карт, настраивая правила KeyValueMapOperations, которые указывают операции PUT, GET или DELETE. (Правило должно выполнять хотя бы одну из этих операций.)
Видео
Чтобы узнать больше о переменных KVM, посмотрите следующие видео:
| Видео | Описание |
|---|---|
| Почему карты "ключ-значение"? | Узнайте, зачем нужны переменные KVM и как они работают. |
| Создание KVM с помощью интерфейса и получение KVM во время выполнения | Создайте карту значений ключей, получите ее значение с помощью правил KVM и добавьте это значение в запрос API, используя переменные потока. |
| Создание и обновление KVM во время выполнения API | Создайте хранилище пар "ключ-значение" во время выполнения API с помощью правил KVM. |
| Кеширование KVM для повышения производительности | Повышение эффективности правила KVM за счет кеширования данных. |
| Хранить зашифрованными KVM | Храните конфиденциальную информацию в KVM в зашифрованном формате и извлекайте значение во время выполнения с помощью правил KVM и частных переменных. |
| Управление доступом с помощью области действия KVM | Ограничьте KVM организацией, средой, прокси-сервером API или версией прокси-сервера API, используя атрибут области действия правила KVM. |
| Удаление записей KVM во время выполнения API | Удаляйте записи KVM во время выполнения API, используя операцию DELETE правила KVM. |
Примеры
PUT KVM с литералом
Когда выполняется следующее правило, оно создает зашифрованное хранилище пар "ключ-значение" с названием FooKVM, а затем создает ключ с названием FooKey_1 с двумя значениями, заданными с помощью строковых литералов foo и bar (а не с помощью значений, извлеченных из переменных). Когда вы GET ключ в следующем примере, вы указываете индекс, чтобы получить нужное значение.
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="FooKVM" mapIdentifier="FooKVM">
<DisplayName>FooKVM</DisplayName>
<ExpiryTimeInSecs>86400</ExpiryTimeInSecs>
<Scope>environment</Scope>
<Put>
<Key>
<Parameter>FooKey_1</Parameter>
</Key>
<Value>foo</Value>
<Value>bar</Value>
</Put>
</KeyValueMapOperations>Обратите внимание, что область действия – "среда". Это означает, что вы можете посмотреть карту KVM в интерфейсе управления в разделе API > Конфигурация среды > Карты "ключ-значение". Все пары "ключ-значение", показанные на этой странице, относятся к выбранной среде.
GET KVM из литерала
Это правило анализирует карту FooKVM из предыдущего примера, получает второе значение (index="2") из ключа FooKey_1 и сохраняет его в переменной foo_variable.
<KeyValueMapOperations mapIdentifier="FooKVM" async="false" continueOnError="false" enabled="true" name="GetKVM"> <DisplayName>GetKVM</DisplayName> <ExpiryTimeInSecs>86400</ExpiryTimeInSecs> <Scope>environment</Scope> <Get assignTo="foo_variable" index="2"> <Key> <Parameter>FooKey_1</Parameter> </Key> </Get> </KeyValueMapOperations>
PUT KVM с переменной
Простой пример полезной карты "ключ-значение" – сервис сокращения URL. Карту "ключ-значение" можно настроить так, чтобы в ней хранились сокращенные и полные URL.
В этом примере правил создается карта значений ключей. Правило помещает ключ с двумя связанными значениями в карту "ключ-значение" с названием urlMapper.
<KeyValueMapOperations name="putUrl" mapIdentifier="urlMapper">
<Scope>apiproxy</Scope>
<Put override="true">
<Key>
<Parameter ref="urlencoding.requesturl.hashed"/>
</Key>
<Value ref="urlencoding.longurl.encoded"/>
<Value ref="request.queryparam.url"/>
</Put>
</KeyValueMapOperations>Ключ в этом примере, urlencoding.requesturl.hashed, – это пользовательская переменная. Хешированный URL запроса будет создан кодом (например, JavaScript или Java), а затем сохранен в этой переменной, к которой сможет получить доступ правило KeyValueMapOperations.
Для каждого ключа requesturl.hashed хранятся два значения:
- Содержимое пользовательской переменной с названием
urlencoding.longurl.encoded. - Содержимое стандартной переменной
request.queryparam.url.
Например, во время выполнения правила значения переменных могут быть следующими:
urlencoding.requesturl.hashed: ed24e12820f2f900ae383b7cc4f2b31c402db1beurlencoding.longurl.encoded: http://tinyurl.com/38lwmlrrequest.queryparam.url: http://apigee.com
В хранилище ключей и значений Edge будет создана следующая карта ключей и значений, которая будет ограничена прокси-сервером API, к которому прикреплено правило:
{
"entry" :[
{
"name" : "ed24e12820f2f900ae383b7cc4f2b31c402db1be",
"value" : "http://tinyurl.com/38lwmlr,http://apigee.com"
}
],
"name" : "urlMapper"
}Запись будет храниться, пока вы ее не удалите. Записи хранилища "ключ-значение" распределяются между экземплярами Edge, которые работают в облаке.
GET KVM из переменной
Простой пример полезной карты "ключ-значение" – сервис сокращения URL. Карту "ключ-значение" можно настроить так, чтобы в ней хранились сокращенные и полные URL.
Чтобы получить значение записи в карте "ключ-значение", например той, которая рассматривается на вкладке PUT в разделе KeyValueMapOperations, настройте правило для получения карты "ключ-значение":
<KeyValueMapOperations name="getUrl" mapIdentifier="urlMapper"> <Scope>apiproxy</Scope> <Get assignTo="urlencoding.shorturl" index='1'> <Key> <Parameter ref="urlencoding.requesturl.hashed"/> </Key> </Get> </KeyValueMapOperations>
Если при выполнении этого правила значение переменной urlencoding.requesturl.hashed равно ed24e12820f2f900ae383b7cc4f2b31c402db1be, то пользовательской переменной urlencoding.shorturl будет присвоено значение http://tinyurl.com/38lwmlr.
После того как данные будут получены, другие правила и код смогут получить к ним доступ, извлекая значения из этих переменных.
Получение зашифрованного значения из KVM
Если карта "ключ-значение" зашифрована, извлекайте значения, используя префикс "private." в значении атрибута assignTo. В этом примере переменная private.encryptedVar содержит расшифрованное значение ключа foo из карты "ключ-значение". Информацию о том, как создавать зашифрованные карты пар "ключ-значение", можно найти в разделе "create" API управления картами пар "ключ-значение".
<KeyValueMapOperations name="getEncrypted" mapIdentifier="encrypted_map"> <Scope>apiproxy</Scope> <Get assignTo="private.encryptedVar" index='1'> <Key> <Parameter>foo</Parameter> </Key> </Get> </KeyValueMapOperations>
После того как данные будут получены, другие правила и код смогут получить к ним доступ, извлекая значение из этой переменной.
Сведения об элементах
В справочнике по элементам описаны элементы и атрибуты правила KeyValueMapOperations:
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="urlMapper" > <DisplayName>Key Value Map Operations 1</DisplayName> <Scope>environment</Scope> <ExpiryTimeInSecs>300</ExpiryTimeInSecs> <InitialEntries> <Entry> <Key> <Parameter>key_name_literal</Parameter> </Key> <Value>value_literal</Value> </Entry> <Entry> <Key> <Parameter>variable_name</Parameter> </Key> <Value>value_1_literal</Value> <Value>value_2_literal</Value> </Entry> </InitialEntries> <Put override="false"> <Key> <Parameter>key_name_literal</Parameter> </Key> <Value ref="variable_name"/> </Put> <Get assignTo="myvar" index="1"> <Key> <Parameter ref="variable_name"/> </Key> </Get> <Delete> <Key> <Parameter>key_name_literal</Parameter> </Key> </Delete> </KeyValueMapOperations>
Атрибуты <KeyValueMapOperations>
В примере ниже показаны атрибуты тега <KeyValueMapOperations>:
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="map_name">
В таблице ниже описаны атрибуты, относящиеся к тегу <KeyValueMapOperations>.
| Атрибут | Описание | По умолчанию | Тип поля |
|---|---|---|---|
| mapIdentifier |
Указывает идентификатор, который будет использоваться при доступе к карте, созданной с помощью этого правила или в интерфейсе управления. В Apigee Edge для облака KVM чувствительны к регистру.
Например, Если вы не укажете этот атрибут, будет использоваться KVM с названием В пределах области действия организации, среды или прокси API можно использовать атрибут |
Н/Д | Необязательно |
В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
name | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
Элемент <Delete>
Удаляет указанную пару "ключ-значение". Необходимо использовать хотя бы одно из свойств <Get>, <Put> или <Delete>.
Обязательно укажите название KVM с помощью атрибута mapIdentifier в родительском элементе. Пример:
<Delete>
<Key>
<Parameter>key_name_literal</Parameter>
</Key>
</Delete>| По умолчанию | Н/Д |
|---|---|
| Тип поля | Обязательно, если не указаны значения <Get> или <Put>. |
| Тип | Н/Д |
Элемент <Entry>
Начальные значения для карт "ключ-значение", которые заполняются в карте "ключ-значение" при ее инициализации.
В Edge для облака размер ключа ограничен 2 КБ. Пример:
<InitialEntries> <Entry> <Key> <Parameter>key_name_literal</Parameter> </Key> <Value>v1</Value> </Entry> <Entry> <Key> <Parameter>key_name_variable</Parameter> </Key> <Value>v3</Value> <Value>v4</Value> </Entry> </InitialEntries>
| По умолчанию | Н/Д |
|---|---|
| Тип поля | Необязательно |
| Тип | Н/Д |
Элемент <ExclusiveCache>
Устаревший метод. Вместо него используйте элемент <Scope>.
Элемент <ExpiryTimeInSecs>
Указывает продолжительность в секундах, по истечении которой Edge обновляет кешированное значение из указанного хранилища пар "ключ-значение".
Если указать значение 0 или -1 либо не включать этот элемент, будет использоваться значение по умолчанию – 300 секунд. Пример:
<ExpiryTimeInSecs>600</ExpiryTimeInSecs>
| По умолчанию | 300 (5 минут) |
|---|---|
| Тип поля | Необязательно |
| Тип | Целое число |
Хранилище пар "ключ-значение" – это механизм долгосрочного хранения, который сохраняет ключи и значения в базе данных NoSQL. Поэтому чтение из KVM во время выполнения может замедлить работу прокси. Чтобы повысить производительность, Edge имеет встроенный механизм кеширования ключей и значений KVM в памяти во время выполнения. Это правило операций KVM всегда считывает данные из кеша для операций GET.
Элемент <ExpiryTimeInSecs> позволяет указать, как долго ключи и значения, используемые в правиле, хранятся в кеше, прежде чем они будут обновлены из KVM. Однако есть некоторые различия в том, как операции GET и PUT влияют на срок действия кеша.
GET – при первом выполнении операции GET KVM запрошенные ключи/значения из KVM (название которого указано в корневом атрибуте mapIdentifier политики) загружаются в кеш, где остаются для последующих операций GET, пока не произойдет одно из следующих событий:
- Прошло количество секунд, указанное в
<ExpiryTimeInSecs>.
или - Операция PUT в правиле KVM перезаписывает существующие значения (об этом рассказывается ниже).
PUT – операция PUT записывает ключи и значения в указанное хранилище пар "ключ-значение". Если команда PUT записывает данные в ключ, который уже есть в кеше, кеш немедленно обновляется и теперь содержит новое значение в течение количества секунд, указанного в элементе <ExpiryTimeInSecs> правила.
Пример: кеширование KVM
- Операция GET извлекает значение "rating", которое добавляет в кеш значение "10". Значение параметра
<ExpiryTimeInSecs>в правилах – 60. - Через 30 секунд политика GET выполняется снова и извлекает из кеша значение "10".
- Через пять секунд правило PUT обновляет значение "рейтинг" до "8", а
<ExpiryTimeInSecs>в правиле PUT равно 20. Кеш немедленно обновляется, и новое значение будет храниться в нем 20 секунд. (Если бы запроса PUT не было, кеш, изначально заполненный первым запросом GET, существовал бы ещё 30 секунд, оставшиеся от исходных 60 секунд.) - Через 15 секунд выполняется ещё один запрос GET, который получает значение "8".
Элемент <Get>
Извлекает значение для указанного ключа. Необходимо использовать хотя бы одно из свойств <Get>, <Put> или <Delete>.
Обязательно укажите название хранилища пар "ключ-значение" с помощью атрибута mapIdentifier в родительском элементе.
В правила можно включить несколько блоков Get, чтобы получить несколько элементов из хранилища пар "ключ-значение".
| По умолчанию | Н/Д |
|---|---|
| Тип поля | Обязательно, если не указаны атрибуты "цена" <Put> и "цена со скидкой" <Delete>. |
| Тип | Н/Д |
Как получить один объект из KVM
<Get assignTo="myvar" index="1"> <Key> <Parameter>key_name_literal</Parameter> </Key> </Get>
Как получить несколько объектов из KVM
В следующем примере используется KVM со следующими ключами и значениями: Кроме того, в KVM хранится список самых популярных фильмов всех времен и имена режиссеров всех основных фильмов.
| Ключ | Значение |
|---|---|
| top_movies | Принцесса-невеста,Крестный отец,Гражданин Кейн |
| Гражданин Кейн | Орсон Уэллс |
| Принцесса-невеста | Роб Райнер |
| Крестный отец | Фрэнсис Форд Коппола |
Ниже приведен пример конфигурации правила KVM, которое можно использовать для получения названия самого популярного фильма и имени его режиссера:
<Get assignTo="top.movie.pick" index="1"> <Key> <Parameter>top_movies</Parameter> </Key> </Get> <Get assignTo="movie.director"> <Key> <Parameter ref="top.movie.pick"/> </Key> </Get>
При вызове прокси-сервера API Edge создает следующие переменные, которые можно использовать в потоке прокси-сервера API:
top.movie.pick=Princess Bridemovie.director=Rob Reiner
Атрибуты
В таблице ниже описаны атрибуты элемента <Get>.
| Атрибут | Описание | По умолчанию | Тип поля |
|---|---|---|---|
| assignTo |
Переменная, которой нужно присвоить полученное значение. Если карта "ключ-значение" зашифрована, начните имя assignTo с символов <Get assignTo="private.myvar"> Если вы попытаетесь получить зашифрованную карту значений ключей без использования префикса, правило вызовет ошибку. Префикс, который необходим для базовой безопасности во время отладки, скрывает зашифрованные значения от трассировки прокси-сервера API и сеансов отладки. Информацию о создании зашифрованных карт "ключ-значение" можно найти в разделах "Создание" API управления картами "ключ-значение" и Создание и редактирование карт "ключ-значение" среды. |
Н/Д | Обязательно |
| индекс |
Индексный номер (с точкой отсчета в единице) объекта, который нужно получить из ключа с несколькими значениями.
Например, если указать Пример можно найти на вкладке "Получение зашифрованного значения из хранилища пар "ключ-значение" в разделе Примеры. |
Н/Д | Необязательно |
Элемент <InitialEntries>
Начальные значения для карт пар "ключ-значение", которые заполняются в карте пар "ключ-значение" при ее инициализации.
Обязательно укажите название хранилища пар "ключ-значение" с помощью атрибута mapIdentifier в родительском элементе. Пример:
<InitialEntries> <Entry> <Key> <Parameter>key_name_literal</Parameter> </Key> <Value>v1</Value> </Entry> <Entry> <Key> <Parameter>key_name_variable</Parameter> </Key> <Value>v3</Value> <Value>v4</Value> </Entry> </InitialEntries>
При использовании этого элемента при сохранении правила в интерфейсе управления в развернутой версии прокси-сервера или развертывании пакета прокси-сервера API, содержащего правило с этим элементом, ключ(и) автоматически создаются в KVM (в незашифрованном виде). Если значения в правиле отличаются от значений в KVM, при развертывании прокси-сервера значения в KVM перезаписываются. Новые ключи и значения добавляются в существующий KVM вместе с имеющимися.
Ключи и значения, заданные в этом элементе, должны быть литералами. Например, в этом элементе не поддерживается макрос <Parameter
ref="request.queryparam.key">.
Размер ключа ограничен 2 КБ как для Edge в общедоступном облаке, так и для Edge в частном облаке. Значение KVM не может превышать 2 КБ.
Чтобы создать зашифрованную карту KVM, используйте API управления картами "ключ-значение".
| По умолчанию | Н/Д |
|---|---|
| Тип поля | Необязательно |
| Тип | Н/Д |
Элемент <Key>
Указывает ключ в записи карты "ключ-значение". Ключ может быть составным, то есть для его создания можно добавить несколько параметров. Например, поля userID и role можно объединить в поле key. Пример:
<Key>
<Parameter>key_name_literal</Parameter>
</Key>Ознакомьтесь с информацией об элементе <Parameter>, чтобы узнать, как задать название ключа.
В Edge для общедоступного облака размер ключа ограничен 2 КБ. Подробнее о различиях между API Edge для общедоступного и частного облака…
| По умолчанию | Н/Д |
|---|---|
| Тип поля | Необязательно |
| Тип | Н/Д |
Элемент <Parameter>
Указывает ключ в паре "ключ-значение". Этот элемент указывает название при создании, размещении, получении или удалении пары "ключ-значение".
Указать название можно с помощью:
-
строка-литерал;
<Key> <Parameter>literal</Parameter> </Key>
-
Переменная, которая будет получена во время выполнения, с помощью атрибута
ref.<Key> <Parameter ref="variable_name"/> </Key>
-
Сочетание литералов и ссылок на переменные.
<Key> <Parameter>targeturl</Parameter> <Parameter ref="apiproxy.name"/> <Parameter>weight</Parameter> </Key>
Если элемент Key содержит несколько элементов Parameter, эффективная строка ключа представляет собой конкатенацию значений каждого параметра, соединенных двойным подчеркиванием. Например, если в приведенном выше примере переменная apiproxy.name имеет значение "abc1", то эффективным ключом будет targeturl__abc1__weight.
При получении, обновлении или удалении записи "ключ-значение" название ключа должно совпадать с названием ключа в карте "ключ-значение". Ознакомьтесь с правилами указания и получения названий ключей.
| По умолчанию | Н/Д |
|---|---|
| Тип поля | Обязательно |
| Тип | Строка |
Атрибуты
В таблице ниже описаны атрибуты элемента <Parameter>.
| Атрибут | Описание | По умолчанию | Тип поля |
|---|---|---|---|
| ref | Указывает название переменной, значение которой содержит точное название ключа, который вы хотите создать, получить или удалить. | Н/Д | Обязательный атрибут, если между открывающим и закрывающим тегами не указано литеральное значение. Запрещено, если указано литеральное значение. |
Элемент <Put>
Записывает пару "ключ-значение" в карту пар "ключ-значение", независимо от того, зашифрована она или нет. Если карта значений ключей, указанная в атрибуте mapIdentifier родительского элемента, не существует, она будет создана автоматически (без шифрования). Если карта "ключ-значение" уже существует, ключ и значение будут добавлены в нее.
Чтобы создать зашифрованную карту пар "ключ-значение", используйте API управления картами пар "ключ-значение" или следуйте инструкциям в разделе Создание и изменение карт пар "ключ-значение" на уровне среды, чтобы создать зашифрованные карты пар "ключ-значение" на уровне среды в интерфейсе.
<Put override="false"> <Key> <Parameter ref="mykeyvar"/> </Key> <Value ref="myvalvar1"/> </Put>
| По умолчанию | Н/Д |
|---|---|
| Тип поля | Обязательно, если не указаны атрибуты "цена" <Get> и "цена со скидкой" <Delete>. |
| Тип | Н/Д |
Атрибуты
В таблице ниже описаны атрибуты элемента <Put>.
| Атрибут | Описание | По умолчанию | Тип поля |
|---|---|---|---|
| переопределение |
Если задано значение |
false |
Необязательно |
Элемент <Scope>
Определяет границу доступности для карт со значениями ключей. Область действия по умолчанию – environment. Это означает, что по умолчанию записи карт используются совместно всеми прокси API, работающими в среде (например, тестовой или рабочей). Если вы зададите область действия apiproxy, записи в карте "ключ-значение" будут доступны только прокси-серверу API, который записывает значения в карту.
Обратите внимание, что при доступе к карте или записи на карте необходимо указать то же значение области действия, которое использовалось при создании карты. Например, если карта была создана с областью действия apiproxy, при получении ее значений, внесении изменений или удалении записей необходимо использовать область действия apiproxy.
<Scope>environment</Scope>
| По умолчанию | environment |
|---|---|
| Тип поля | Необязательно |
| Тип | Строка |
| Допустимые значения: |
|
Элемент <Value>
Указывает значение ключа. Значение можно указать в виде строки или переменной, которая будет получена во время выполнения, с помощью атрибута ref:
<!-- Specify a literal value --> <Value>literal<Value>
Или:
<!-- Specify the name of variable value to be populated at run time. --> <Value ref="variable_name"/>
Вы также можете добавить несколько элементов <Value>, чтобы указать многокомпонентное значение. Значения объединяются во время выполнения.
В следующем примере в KVM добавляются два ключа:
- Ключ
k1со значениямиv1,v2 - Ключ
k2со значениямиv3,v4
<InitialEntries>
<Entry>
<Key>
<Parameter>k1</Parameter>
</Key>
<Value>v1</Value>
<Value>v2</Value>
</Entry>
<Entry>
<Key>
<Parameter>k2</Parameter>
</Key>
<Value>v3</Value>
<Value>v4</Value>
</Entry>
</InitialEntries>В следующем примере создается один ключ с двумя значениями. Предположим, название организации – foo_org, название прокси-сервера API – bar, а название среды – test.
- Ключ
foo_orgсо значениямиbar,test
<Put>
<Key>
<Parameter ref="organization.name"/>
</Key>
<Value ref="apiproxy.name"/>
<Value ref="environment.name"/>
</Put>| По умолчанию | Н/Д |
|---|---|
| Тип поля | Обязательно |
| Тип | Строка |
Атрибуты
В таблице ниже описаны атрибуты элемента <Value>.
| Атрибут | Описание | По умолчанию | Тип поля |
|---|---|---|---|
| ref | Указывает название переменной, значение которой содержит значения ключей, которые вы хотите задать. | Н/Д | Обязательный атрибут, если между открывающим и закрывающим тегами не указано литеральное значение. Запрещено, если указано литеральное значение. |
Справочник по ошибкам
Ошибки, возвращаемые правилами Edge, имеют единый формат, описанный в справочнике кодов ошибок.
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые задаются Edge, когда это правило вызывает ошибку. Эта информация важна, если вы разрабатываете правила обработки ошибок. Подробнее о том, что нужно знать об ошибках в правилах и об обработке ошибок…
Ошибки времени выполнения
Эти ошибки могут возникать при выполнении правил.
| Код ошибки | Статус HTTP | Причина | Исправить |
|---|---|---|---|
steps.keyvaluemapoperations.SetVariableFailed |
500 |
Эта ошибка возникает, если вы пытаетесь получить значение из зашифрованной карты "ключ-значение" и присвоить его переменной, название которой не начинается с префикса |
build |
steps.keyvaluemapoperations.UnsupportedOperationException |
500 |
Эта ошибка возникает, если атрибуту |
build |
Ошибки развертывания
Эти ошибки могут возникать при развертывании прокси-сервера, содержащего это правило.
| Название ошибки | Причина | Исправить |
|---|---|---|
InvalidIndex |
Если атрибут index, указанный в элементе <Get> правила "Операции с картой значений ключей", равен нулю или отрицательному числу, развертывание прокси-сервера API завершится неудачно. Индекс начинается с 1, поэтому нулевой или отрицательный индекс считается недействительным.
|
build |
KeyIsMissing |
Эта ошибка возникает, если элемент <Key> отсутствует или элемент <Parameter> отсутствует в элементе <Key> под элементом <Entry> элемента <InitialEntries> правила "Операции с картой значений ключей".
|
build |
ValueIsMissing |
Эта ошибка возникает, если элемент <Value> отсутствует в элементе <Entry> элемента <InitialEntries> правила "Операции с картой значений ключей". |
build |
Схемы
Примечания
Общую информацию о картах пар "ключ-значение" можно найти в статье Как работать с картами пар "ключ-значение".
Хранилище карт "ключ-значение" предоставляет простой механизм сохранения данных, отформатированных как пары "ключ-значение". Вы можете получить доступ к ним во время выполнения с помощью правил или кода. Карта содержит произвольные данные в формате key=value.
например localhost=127.0.0.1, zip_code=94110 или first_name=felix. В первом примере localhost – это ключ, а 127.0.0.1 – значение. Каждая пара "ключ-значение" хранится как запись в карте "ключ-значение". Карта "ключ-значение" может содержать много записей.
Ниже приведен пример использования карт пар "ключ-значение". Предположим, вам нужно сохранить список IP-адресов, связанных с различными серверными средами. Вы можете создать карту пар "ключ-значение" с названием ipAddresses, которая будет содержать список пар "ключ-значение" в качестве записей. Например, этот код JSON может представлять такую карту:
{
"entry" : [ {
"name" : "Development",
"value" : "65.87.18.18"
}, {
"name" : "Staging",
"value" : "65.87.18.22"
} ],
"name" : "ipAddresses"
}Эту структуру можно использовать для создания хранилища IP-адресов, которые могут применяться в правилах во время выполнения для принудительного добавления в белый или черный список, динамического выбора целевого адреса внутреннего сервера и т. д. Как правило, правила KeyValueMapOperations используются для хранения или получения долгоживущей информации, которая должна быть повторно использована в нескольких транзакциях запроса/ответа.
Картами "ключ-значение" можно управлять с помощью правила KeyValueMapOperations или напрямую через API управления Apigee Edge. Подробную информацию об API Organization key/value maps API можно найти в справочнике по Management API. Например, с помощью API можно загружать большие наборы данных в хранилище пар "ключ-значение" или создавать скрипты для управления записями в карте пар "ключ-значение". Чтобы получить доступ к карте "ключ-значение" с помощью правила KeyValueMapOperations, вам нужно создать ее с помощью API.
Как задавать и получать названия ключей
С помощью элементов <Parameter> и <Value> можно указать либо литеральное значение (между открывающим и закрывающим тегами), либо атрибут ref, чтобы задать имя переменной, значение которой будет использоваться во время выполнения.
Элемент Parameter заслуживает особого внимания, поскольку он определяет название создаваемого ключа, а также название ключа, который вы хотите получить или удалить. Ниже приведены два примера. Первый вариант задает название ключа в явном виде, а второй – с помощью переменной. Предположим, что для создания ключей в KVM используются следующие значения:
<Parameter>key_name_literal</Parameter> <Parameter ref="key.name.variable"/>
В первом случае в хранилище пар "ключ-значение" в качестве названия ключа сохраняется буквальное значение "key_name_literal". Во втором случае значение key.name.variable становится названием ключа в хранилище пар "ключ-значение". Например, если в key.name.variable содержится значение foo, ключ будет называться "foo".
Если вы хотите получить ключ и его значение с помощью операции GET (или удалить с помощью операции DELETE), параметр <Parameter> должен соответствовать названию ключа в KVM. Например, если имя ключа в хранилище пар "ключ-значение" – foo, вы можете указать либо литеральное значение с помощью <Parameter>foo</Parameter>, либо переменную, которая содержит точное значение foo, например <Parameter ref="variable.containing.foo"/>.