Zasada KeyValueMapOperations

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Ikona operacji na mapach klucz-wartość w interfejsie Edge

Co

Umożliwia dostęp do sklepu map klucz-wartość (KVM) w Apigee Edge na podstawie zasad. Pary klucz-wartość można przechowywać, pobierać i usuwać z nazwanych istniejących map, konfigurując zasady KeyValueMapOperations, które określają operacje PUT, GET lub DELETE. (Co najmniej 1 z tych działań musi być wykonywane przez zasadę).

Filmy

Aby dowiedzieć się więcej o KVM, obejrzyj poniższe filmy.

Wideo Opis
Dlaczego mapy par klucz-wartość? Dowiedz się, dlaczego potrzebujesz przełączników KVM i jak one działają.
Tworzenie mapy wartości klucza za pomocą interfejsu i pobieranie jej w czasie działania Utwórz mapę wartości kluczy, pobierz jej wartość za pomocą zasady mapy wartości kluczy i wstrzyknij ją do żądania interfejsu API za pomocą zmiennych przepływu.
Tworzenie i aktualizowanie mapy klucz-wartość w czasie działania interfejsu API Utwórz mapę wartości klucza w czasie działania interfejsu API za pomocą zasady KVM.
Buforowanie KVM w celu zwiększenia wydajności Zwiększ wydajność zasad KVM, zapisując dane w pamięci podręcznej.
Szyfrowany magazyn KVM Przechowuj informacje poufne w KVM w zaszyfrowanym formacie i pobieraj wartość w czasie działania za pomocą zasad KVM i zmiennych prywatnych.
Zarządzanie dostępem za pomocą zakresu KVM Ogranicz KVM do organizacji, środowiska, proxy interfejsu API lub wersji proxy interfejsu API za pomocą atrybutu zakresu zasad KVM.
Usuwanie wpisów KVM w czasie działania interfejsu API Usuń wpisy KVM w czasie działania interfejsu API za pomocą operacji DELETE w zasadach KVM.

Przykłady

PUT KVM z literałem

Gdy ta zasada zostanie uruchomiona, utworzy zaszyfrowaną mapę klucz-wartość o nazwie FooKVM, a następnie utworzy klucz o nazwie FooKey_1 z 2 wartościami ustawionymi za pomocą ciągów dosłownych foobar (nie za pomocą wartości wyodrębnionych ze zmiennych). Gdy w przykładzie poniżej użyjesz klucza GET, podasz numer indeksu, aby pobrać wybraną wartość.

<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>

Zwróć uwagę, że zakres to „środowisko”. Oznacza to, że możesz zobaczyć mapę par klucz-wartość w interfejsie zarządzania w sekcji Interfejsy API > Konfiguracja środowiska > Mapy par klucz-wartość. Wyświetlone na tej stronie mapowania kluczy są zawężone do wybranego środowiska.

GET KVM z literału

Ta zasada analizuje FooKVM z poprzedniego przykładu, pobiera drugą wartość (index="2") z klucza FooKey_1 i zapisuje ją w zmiennej o nazwie 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 ze zmienną

Prostym przykładem przydatnej mapy klucz-wartość jest usługa skracania adresów URL. Mapę klucz-wartość można skonfigurować tak, aby przechowywała skrócone adresy URL wraz z odpowiadającymi im pełnymi adresami URL.

Ten przykładowy plik zasad tworzy mapę klucz-wartość. Zasada umieszcza klucz z 2 powiązanymi wartościami w mapie klucz/wartość o nazwie „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>

Klucz w tym przykładzie, urlencoding.requesturl.hashed, to przykład zmiennej niestandardowej. Zahaszowany adres URL żądania jest generowany przez kod (np. JavaScript lub Java), a następnie przechowywany w tej zmiennej, do której może uzyskać dostęp zasada KeyValueMapOperations.

Dla każdego klucza requesturl.hashed przechowywane są 2 wartości:

  • Zawartość zmiennej niestandardowej o nazwie urlencoding.longurl.encoded
  • Zawartość wstępnie zdefiniowanej zmiennej request.queryparam.url

Na przykład, gdy zasada jest wykonywana w czasie działania, wartości zmiennych mogą być następujące:

  • urlencoding.requesturl.hashed: ed24e12820f2f900ae383b7cc4f2b31c402db1be
  • urlencoding.longurl.encoded: http://tinyurl.com/38lwmlr
  • request.queryparam.url: http://apigee.com

W pamięci klucz-wartość Edge'a zostanie wygenerowana ta mapa klucz-wartość i ten wpis, które będą ograniczone do serwera proxy interfejsu API, do którego dołączona jest zasada:

{
    "entry" :[
        {
            "name" : "ed24e12820f2f900ae383b7cc4f2b31c402db1be",
            "value" : "http://tinyurl.com/38lwmlr,http://apigee.com"
        }
    ],
    "name" : "urlMapper"
}

Wpis będzie widoczny, dopóki nie zostanie usunięty. Wpisy w pamięci klucz/wartość są rozpowszechniane w instancjach Edge, które działają w chmurze.

Pobieranie KVM ze zmiennej

Prostym przykładem przydatnej mapy klucz-wartość jest usługa „skracania” adresów URL. Mapę klucz-wartość można skonfigurować tak, aby przechowywała skrócone adresy URL wraz z odpowiadającymi im pełnymi adresami URL.

Aby pobrać wartość wpisu mapy klucz-wartość, np. wpisu omówionego na karcie PUT w sekcji Operacje na mapie klucz-wartość, skonfiguruj zasadę GET mapy klucz-wartość:

<KeyValueMapOperations name="getUrl" mapIdentifier="urlMapper">
   <Scope>apiproxy</Scope>
   <Get assignTo="urlencoding.shorturl" index='1'>
      <Key>
         <Parameter ref="urlencoding.requesturl.hashed"/>
      </Key>
   </Get>
</KeyValueMapOperations>

Gdy ta zasada jest wykonywana, jeśli wartość zmiennej urlencoding.requesturl.hashed to ed24e12820f2f900ae383b7cc4f2b31c402db1be, zmienna niestandardowa o nazwie urlencoding.shorturl zostanie ustawiona na wartość http://tinyurl.com/38lwmlr.

Po pobraniu danych inne zasady i kod mogą uzyskać do nich dostęp, wyodrębniając wartość z tych zmiennych.

Pobieranie zaszyfrowanej wartości z KVM

Jeśli mapa wartości klucza jest zaszyfrowana, pobierz wartości, używając prefiksu „private.” w wartości atrybutu assignTo. W tym przykładzie zmienna private.encryptedVar zawiera odszyfrowaną wartość klucza foo w mapie klucz-wartość. Informacje o tworzeniu zaszyfrowanych map par klucz-wartość znajdziesz w sekcji „create” w interfejsie API do zarządzania mapami par klucz-wartość.

<KeyValueMapOperations name="getEncrypted" mapIdentifier="encrypted_map">
   <Scope>apiproxy</Scope>
   <Get assignTo="private.encryptedVar" index='1'>
      <Key>
         <Parameter>foo</Parameter>
      </Key>
   </Get>
</KeyValueMapOperations>

Po pobraniu danych inne zasady i kod mogą uzyskać do nich dostęp, wyodrębniając wartość z tej zmiennej.


Odwołanie do elementu

Odwołanie do elementu opisuje elementy i atrybuty zasady 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>

Atrybuty <KeyValueMapOperations>

Poniższy przykład pokazuje atrybuty tagu <KeyValueMapOperations>:

<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="map_name">

W tabeli poniżej opisano atrybuty specyficzne dla tagu <KeyValueMapOperations>:

Atrybut Opis Domyślny Obecność
mapIdentifier

Określa identyfikator, który będzie używany podczas uzyskiwania dostępu do mapy utworzonej przez te zasady lub w interfejsie zarządzania.

W przypadku Apigee Edge Public Cloud w nazwie mapy klucz-wartość rozróżniana jest wielkość liter. Na przykład foobar różni się od FooBar.

Jeśli wykluczysz ten atrybut, używana jest mapa wartości klucza o nazwie kvmap.

W zakresie organizacji, środowiska lub serwera proxy interfejsu API możesz użyć atrybutu mapIdentifier, aby określić własną nazwę mapy.

Nie dotyczy Opcjonalny

W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślny Obecność
name

Wewnętrzna nazwa zasady. Wartość atrybutu name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekracza 255 znaków.

Opcjonalnie możesz użyć elementu <DisplayName> do oznaczenia zasady jako edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw jako false, aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne w przypadku większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po zastosowaniu zasady niepowodzenie.

fałsz Opcjonalnie
enabled

Aby egzekwować zasadę, ustaw wartość true.

Aby wyłączyć zasadę, ustaw wartość false. Te zasady nie będą jest wymuszane nawet wtedy, gdy jest ono połączone z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

&lt;DisplayName&gt; element

Używaj oprócz atrybutu name do oznaczania zasady w edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

<DisplayName>Policy Display Name</DisplayName>
Domyślny

Nie dotyczy

Jeśli pominiesz ten element, atrybut name zasady otrzyma wartość .

Obecność Opcjonalnie
Typ Ciąg znaków

Element <Delete>

Usuwa określoną parę klucz/wartość. Musisz użyć co najmniej jednego z tych atrybutów: <Get>, <Put> lub <Delete>.

Pamiętaj, aby podać nazwę KVM za pomocą atrybutu mapIdentifier w elemencie nadrzędnym. Na przykład:

<Delete>
   <Key>
      <Parameter>key_name_literal</Parameter>
   </Key>
</Delete>
Domyślny Nie dotyczy
Obecność Wymagane, jeśli nie podano wartości <Get> lub <Put>.
Typ Nie dotyczy

Element <Entry>

Wartości początkowe map klucz-wartość, które są wypełniane w mapie klucz-wartość podczas jej inicjowania.

W przypadku Edge na chmurę publiczną rozmiar klucza jest ograniczony do 2 KB. Na przykład:

<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>
Domyślny Nie dotyczy
Obecność Opcjonalny
Typ Nie dotyczy

Element <ExclusiveCache>

Rola wycofana. Zamiast tego użyj elementu <Scope>.

Element <ExpiryTimeInSecs>

Określa czas w sekundach, po którym Edge odświeża wartość w pamięci podręcznej z określonego KVM.

Wartość 0 lub -1 albo pominięcie tego elementu oznacza, że używana jest wartość domyślna, czyli 300 sekund. Na przykład:

<ExpiryTimeInSecs>600</ExpiryTimeInSecs>
Domyślny 300 (5 minut)
Obecność Opcjonalny
Typ Liczba całkowita

KVM to mechanizm długoterminowego przechowywania danych, który zapisuje klucze i wartości w bazie danych NoSQL. Z tego powodu odczytywanie danych z KVM w czasie działania może spowolnić działanie serwera proxy. Aby zwiększyć wydajność, Edge ma wbudowany mechanizm buforowania kluczy i wartości KVM w pamięci w czasie działania. W przypadku operacji GET ta zasada KVM Operations zawsze odczytuje dane z pamięci podręcznej.

Element <ExpiryTimeInSecs> pozwala określić, jak długo klucze i wartości używane w zasadach są przechowywane w pamięci podręcznej, zanim zostaną ponownie odświeżone z KVM. Istnieją jednak pewne różnice w tym, jak operacje GET i PUT wpływają na wygasanie pamięci podręcznej.

GET – gdy operacja GET KVM jest wykonywana po raz pierwszy, żądane klucze/wartości z KVM (którego nazwa jest określona w atrybucie głównym mapIdentifier zasad) są ładowane do pamięci podręcznej, gdzie pozostają w przypadku kolejnych operacji GET, dopóki nie nastąpi jedno z tych zdarzeń:

  • Upłynie liczba sekund określona w parametrze <ExpiryTimeInSecs>.
    lub
  • Operacja PUT w przypadku zasad KVM zastępuje istniejące wartości (wyjaśnienie poniżej).

PUT – operacja PUT zapisuje klucze i wartości w określonym KVM. Jeśli żądanie PUT zapisuje dane w kluczu, który już istnieje w pamięci podręcznej, pamięć podręczna jest natychmiast odświeżana i zawiera nową wartość przez liczbę sekund określoną w elemencie <ExpiryTimeInSecs> zasad.

Przykład – buforowanie KVM

  1. Operacja GET pobiera wartość „rating”, która dodaje do pamięci podręcznej wartość „10”. Wartość <ExpiryTimeInSecs> w zasadach wynosi 60.
  2. 30 sekund później zasada GET jest wykonywana ponownie i pobiera z pamięci podręcznej wartość „10”.
  3. 5 sekund później zasada PUT aktualizuje wartość „rating” na „8”, a wartość <ExpiryTimeInSecs> w zasadzie PUT wynosi 20. Pamięć podręczna jest natychmiast odświeżana nową wartością, która ma być przechowywana w pamięci podręcznej przez 20 sekund. (Gdyby żądanie PUT nie zostało wysłane, pamięć podręczna pierwotnie wypełniona przez pierwsze żądanie GET istniałaby jeszcze przez 30 sekund, czyli pozostałe 30 sekund z pierwotnych 60 sekund).
  4. 15 sekund później wykonuje się kolejne żądanie GET, które pobiera wartość „8”.

Element <Get>

Pobiera wartość określonego klucza. Musisz użyć co najmniej jednego z tych atrybutów: <Get>, <Put> lub <Delete>.

Pamiętaj, aby podać nazwę KVM za pomocą atrybutu mapIdentifier w elemencie nadrzędnym.

W zasadach możesz umieścić kilka bloków Get, aby pobrać z KVM wiele elementów.

.
Domyślny Nie dotyczy
Obecność Wymagane, jeśli nie podano wartości <Put> lub <Delete>.
Typ Nie dotyczy

Pobieranie pojedynczego elementu z KVM

<Get assignTo="myvar" index="1">
   <Key>
      <Parameter>key_name_literal</Parameter>
   </Key>
</Get>

Pobieranie wielu elementów z KVM

W poniższym przykładzie załóżmy, że mapa klucz-wartość ma te klucze i wartości: Oprócz przechowywania listy najpopularniejszych filmów wszech czasów KVM przechowuje nazwiska reżyserów wszystkich ważnych filmów.

Klucz Wartość
top_movies Princess Bride,The Godfather,Citizen Kane
Obywatel Kane Orson Welles
Princess Bride Rob Reiner
Ojciec chrzestny Francis Ford Coppola

Oto konfiguracja zasad KVM, której możemy użyć do pobrania aktualnie najpopularniejszego filmu i imienia jego reżysera:

<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>

Gdy wywoływany jest serwer proxy interfejsu API, Edge tworzy te zmienne, których możesz używać w przepływie serwera proxy interfejsu API:

  • top.movie.pick=Princess Bride
  • movie.director=Rob Reiner

Atrybuty

W tabeli poniżej opisano atrybuty elementu <Get>:

Atrybut Opis Domyślny Obecność
assignTo

Zmienna, do której ma zostać przypisana pobrana wartość.

Jeśli mapa klucz-wartość jest zaszyfrowana, zacznij nazwę assignTo od znaku „private.”. Przykład:

<Get assignTo="private.myvar">

Zasada zgłasza błąd, jeśli spróbujesz pobrać zaszyfrowaną mapę wartości klucza bez użycia prefiksu. Prefiks, który jest wymagany ze względów bezpieczeństwa podczas debugowania, ukrywa zaszyfrowane wartości w sesjach śledzenia i debugowania proxy interfejsu API.

Informacje o tworzeniu zaszyfrowanych map klucz-wartość znajdziesz w tematach „create” w interfejsie API do zarządzania mapami klucz-wartość i w artykule Tworzenie i edytowanie map klucz-wartość środowiska.

Nie dotyczy Wymagane
indeks

Numer indeksu (w indeksie rozpoczynającym się od 1) elementu do pobrania z klucza o wielu wartościach. Na przykład określenie index=1 zwróci pierwszą wartość i przypisze ją do zmiennej assignTo. Jeśli nie podano wartości indeksu, wszystkie wartości tego wpisu są przypisywane do zmiennej jako java.util.List.

Przykład znajdziesz na karcie „Get Encrypted Value from KVM” w Przykłady.

Nie dotyczy Opcjonalny

Element <InitialEntries>

Wartości początkowe map klucz-wartość, które są wypełniane w mapie klucz-wartość podczas jej inicjowania. Pamiętaj, aby określić nazwę KVM za pomocą atrybutu mapIdentifier w elemencie nadrzędnym. Na przykład:

<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>

Gdy używasz tego elementu i zapisujesz zasady w interfejsie zarządzania w przypadku wdrożonej wersji proxy lub wdrażasz pakiet proxy interfejsu API zawierający zasady z tym elementem, klucze są automatycznie tworzone w mapie wartości klucza (jako niezaszyfrowane). Jeśli wartości w zasadach różnią się od wartości w mapie wartości kluczy, po wdrożeniu serwera proxy wartości w mapie wartości kluczy zostaną zastąpione. Wszystkie nowe klucze i wartości są dodawane do istniejącego KVM wraz z dotychczasowymi kluczami i wartościami.

Klucze i wartości wypełniane przez ten element muszą być literałami. Na przykład w tym elemencie nie jest obsługiwany tag <Parameter ref="request.queryparam.key">.

Rozmiar klucza jest ograniczony do 2 KB zarówno w przypadku Edge w chmurze publicznej, jak i Edge w chmurze prywatnej. Wartość KVM jest ograniczona do 2 KB.

Aby utworzyć zaszyfrowaną mapę KVM, użyj interfejsu Key/Value Maps Management API.

Domyślny Nie dotyczy
Obecność Opcjonalny
Typ Nie dotyczy

Element <Key>

Określa klucz we wpisie mapy klucz-wartość. Klucz może być złożony, co oznacza, że do jego utworzenia można dołączyć więcej niż 1 parametr. Na przykład userIDrole można połączyć, aby utworzyć key. Na przykład:

<Key>
    <Parameter>key_name_literal</Parameter>
</Key>

Więcej informacji o tym, jak ustawić nazwę klucza, znajdziesz w elemencie <Parameter>.

W przypadku Edge na chmurę publiczną rozmiar klucza jest ograniczony do 2 KB. Więcej informacji znajdziesz w artykule Różnice między interfejsami Edge API dla chmury publicznej i chmury prywatnej.

Domyślny Nie dotyczy
Obecność Opcjonalny
Typ Nie dotyczy

Element <Parameter>

Określa klucz w parze klucz/wartość. Ten element określa nazwę podczas tworzenia, umieszczania, pobierania lub usuwania pary klucz/wartość.

Nazwę możesz określić za pomocą:

  • literał ciągu znaków;

    <Key>
      <Parameter>literal</Parameter>
    </Key>
  • Zmienna, która ma zostać pobrana w czasie działania programu, przy użyciu atrybutu ref

    <Key>
      <Parameter ref="variable_name"/>
    </Key>
  • Kombinacja literałów i odwołań do zmiennych

    <Key>
      <Parameter>targeturl</Parameter>
      <Parameter ref="apiproxy.name"/>
      <Parameter>weight</Parameter>
    </Key>

Jeśli element Key zawiera wiele elementów Parameter, efektywny ciąg klucza jest konkatenacją wartości każdego parametru połączonych podwójnym podkreśleniem. Jeśli na przykład w powyższym przykładzie zmienna apiproxy.name ma wartość „abc1”, efektywny klucz będzie miał wartość targeturl__abc1__weight.

Niezależnie od tego, czy pobierasz, aktualizujesz czy usuwasz wpis klucz-wartość, nazwa klucza musi być zgodna z nazwą klucza na mapie klucz-wartość. Wskazówki znajdziesz w artykule Określanie i pobieranie nazw kluczy.

Domyślny Nie dotyczy
Obecność Wymagane
Typ Ciąg znaków

Atrybuty

W tabeli poniżej opisano atrybuty elementu <Parameter>:

Atrybut Opis Domyślny Obecność
ref Określa nazwę zmiennej, której wartość zawiera dokładną nazwę klucza, który chcesz utworzyć, pobrać lub usunąć. Nie dotyczy Wymagany, jeśli między tagami otwierającym i zamykającym nie podano wartości literalnej. Niedozwolone, jeśli podano wartość literału.

Element <Put>

Zapisuje parę klucz-wartość na mapie klucz-wartość, niezależnie od tego, czy jest ona zaszyfrowana czy nie. Jeśli mapa par klucz-wartość określona w atrybucie mapIdentifier elementu nadrzędnego nie istnieje, jest ona automatycznie tworzona (jako niezaszyfrowana). Jeśli mapa klucz-wartość już istnieje, klucz i wartość zostaną do niej dodane.

Aby utworzyć zaszyfrowaną mapę klucz-wartość, użyj interfejsu API do zarządzania mapami klucz-wartość lub zapoznaj się z artykułem Tworzenie i edytowanie map klucz-wartość środowiska, aby utworzyć zaszyfrowane mapy klucz-wartość o zakresie środowiska w interfejsie.

<Put override="false">
   <Key>
      <Parameter ref="mykeyvar"/>
   </Key>
   <Value ref="myvalvar1"/>
</Put>
Domyślny Nie dotyczy
Obecność Wymagane, jeśli nie podano wartości <Get> lub <Delete>.
Typ Nie dotyczy

Atrybuty

W tabeli poniżej opisano atrybuty elementu <Put>:

Atrybut Opis Domyślny Obecność
zastąpić

Jeśli ta opcja ma wartość true, zastępuje wartość klucza.

false Opcjonalny

Element <Scope>

Określa granicę dostępności map wartości klucza. Domyślny zakres to environment, co oznacza, że domyślnie wpisy map są współdzielone przez wszystkie proxy interfejsu API działające w środowisku (np. testowym lub produkcyjnym). Jeśli ustawisz zakres na apiproxy, wpisy na mapie klucz-wartość będą dostępne tylko dla serwera proxy interfejsu API, który zapisuje wartości na mapie.

Pamiętaj, że podczas uzyskiwania dostępu do mapy lub wpisu mapy musisz podać tę samą wartość zakresu, która została użyta podczas tworzenia mapy. Jeśli na przykład mapa została utworzona z zakresem apiproxy, podczas pobierania jej wartości, wprowadzania zmian lub usuwania wpisów musisz użyć zakresu apiproxy.

<Scope>environment</Scope>
Domyślny environment
Obecność Opcjonalny
Typ Ciąg znaków
Prawidłowe wartości:
  • organization
  • environment
  • apiproxy
  • policy (wersja proxy interfejsu API)

Element <Value>

Określa wartość klucza. Wartość możesz podać jako ciąg dosłowny lub za pomocą atrybutu ref jako zmienną, która ma być pobierana w czasie działania:

<!-- Specify a literal value -->
<Value>literal<Value>

lub

<!-- Specify the name of variable value to be populated at run time. -->
<Value ref="variable_name"/>

Możesz też dodać kilka elementów <Value>, aby określić wartość wieloczęściową. Wartości są łączone w czasie działania.

W poniższym przykładzie do KVM dodawane są 2 klucze:

  • Klucz k1 z wartościami v1,v2
  • Klucz k2 z wartościami 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>

W tym przykładzie tworzony jest jeden klucz z 2 wartościami. Załóżmy, że nazwa organizacji to foo_org, nazwa proxy interfejsu API to bar, a środowisko to test:

  • Klucz foo_org z wartościami bar,test
<Put>
    <Key>
        <Parameter ref="organization.name"/>
    </Key>
    <Value ref="apiproxy.name"/>
    <Value ref="environment.name"/>
</Put>
Domyślny Nie dotyczy
Obecność Wymagane
Typ Ciąg znaków

Atrybuty

W tabeli poniżej opisano atrybuty elementu <Value>:

Atrybut Opis Domyślny Obecność
ref Określa nazwę zmiennej, której wartość zawiera wartości klucza, które chcesz ustawić. Nie dotyczy Wymagany, jeśli między tagami otwierającym i zamykającym nie podano wartości literalnej. Niedozwolone, jeśli podano wartość literału.

Odwołanie do błędu

Błędy zwracane przez zasady Edge mają spójny format opisany w dokumentacji kodów błędów.

W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.

Błędy w czasie wykonywania

Te błędy mogą wystąpić podczas wykonywania zasady.

Kod błędu Stan HTTP Przyczyna Napraw
steps.keyvaluemapoperations.SetVariableFailed 500

Ten błąd występuje, gdy próbujesz pobrać wartość z zaszyfrowanej mapy par kluczy i ustawić wartość na zmienną, której nazwa nie ma prefiksu private. Prefiks, który jest wymagany do podstawowych działań związanych z bezpieczeństwem podczas debugowania, ukrywa zaszyfrowane wartości w sesjach śledzenia serwera proxy interfejsu API i debugowania.

steps.keyvaluemapoperations.UnsupportedOperationException 500

Ten błąd występuje, jeśli atrybut mapIdentifier jest ustawiony na pusty ciąg znaków w zasadzie operacji mapowania par klucz-wartość.

Błędy wdrażania

Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego te zasady.

Nazwa błędu Przyczyna Napraw
InvalidIndex Jeśli atrybut index określony w elemencie <Get> w zasadzie operacji mapowania par klucz-wartość ma wartość zero lub jest liczbą ujemną, wdrożenie serwera proxy interfejsu API się nie uda. Indeks zaczyna się od 1, więc indeks o wartości 0 lub ujemna liczba całkowita jest uznawany za nieprawidłowy.
KeyIsMissing Ten błąd występuje, jeśli całkowicie brakuje elementu <Key> lub brakuje elementu <Parameter> w elemencie <Key> poniżej <Entry> elementu <InitialEntries> zasad operacji mapy klucz-wartość.
ValueIsMissing Ten błąd występuje, jeśli brakuje elementu <Value> pod elementem <Entry> elementu <InitialEntries> zasady operacji na mapie par klucz-wartość.

Schematy

Zastosowanie

Omówienie map klucz-wartość znajdziesz w artykule Praca z mapami klucz-wartość.

Magazyn map klucz-wartość zapewnia prosty mechanizm utrwalania danych sformatowanych jako pary klucz-wartość. Możesz uzyskać do nich dostęp w czasie działania programu za pomocą zasad lub kodu. Mapa zawiera dowolne dane w formacie key=value.

Na przykład localhost=127.0.0.1, zip_code=94110 lub first_name=felix. W pierwszym przykładzie localhost to klucz, a 127.0.0.1 to wartość. Każda para klucz/wartość jest przechowywana jako wpis na mapie klucz-wartość. Mapa klucz-wartość może przechowywać wiele wpisów.

Oto przykład użycia map wartości klucza. Załóżmy, że musisz przechowywać listę adresów IP powiązanych z różnymi środowiskami backendu. Możesz utworzyć mapę klucz-wartość o nazwie ipAddresses, która zawiera listę par klucz-wartość jako wpisy. Na przykład ten kod JSON może reprezentować taką mapę:

{
  "entry" : [ {
    "name" : "Development",
    "value" : "65.87.18.18"
  }, {
    "name" : "Staging",
    "value" : "65.87.18.22"
  } ],
  "name" : "ipAddresses"
}

Możesz użyć tej struktury do utworzenia magazynu adresów IP, które mogą być używane przez zasady w czasie działania do wymuszania listy dozwolonych lub zabronionych adresów IP, do dynamicznego wybierania docelowego adresu backendu itp. Zasady KeyValueMapOperations są zwykle używane do przechowywania lub pobierania długoterminowych informacji, które muszą być ponownie wykorzystywane w wielu transakcjach żądanie/odpowiedź.

Mapami klucz-wartość można manipulować za pomocą zasady KeyValueMapOperations lub bezpośrednio za pomocą interfejsu API zarządzania Apigee Edge. Szczegółowe informacje o interfejsie Organization key/value maps API znajdziesz w dokumentacji API zarządzania. Za pomocą interfejsu API możesz na przykład przesyłać duże zbiory danych do magazynu klucz/wartość lub tworzyć skrypty do zarządzania wpisami w mapie klucz/wartość. Przed uzyskaniem dostępu do mapy klucz/wartość za pomocą zasady KeyValueMapOperations musisz utworzyć ją za pomocą interfejsu API.

Określanie i pobieranie nazw kluczy

Za pomocą elementów <Parameter><Value> możesz określić wartość dosłowną (wartość między tagami otwierającym i zamykającym) lub użyć atrybutu ref, aby określić nazwę zmiennej, której wartość ma być używana w czasie działania programu.

Element Parameter zasługuje na szczególną uwagę, ponieważ określa nazwę tworzonego klucza, a także nazwę klucza, który chcesz pobrać lub usunąć. Poniżej znajdziesz 2 przykłady. Pierwszy określa nazwę klucza dosłownie, a drugi – za pomocą zmiennej. Załóżmy, że do tworzenia kluczy w KVM używane są te elementy:

<Parameter>key_name_literal</Parameter>
<Parameter ref="key.name.variable"/>

W pierwszym przypadku w KVM jako nazwa klucza jest przechowywana wartość literalna „key_name_literal”. W drugim przypadku wartość w key.name.variable staje się nazwą klucza w KVM. Jeśli na przykład parametr key.name.variable zawierał wartość foo, klucz miałby nazwę „foo”.

Jeśli chcesz pobrać klucz i jego wartość za pomocą operacji GET (lub usunąć za pomocą operacji DELETE), ustawienie <Parameter> musi być zgodne z nazwą klucza w KVM. Jeśli na przykład nazwa klucza w mapie wartości klucza to „foo”, możesz podać wartość dosłowną za pomocą <Parameter>foo</Parameter> lub zmienną, która zawiera dokładną wartość „foo”, w ten sposób: <Parameter ref="variable.containing.foo"/>.

Powiązane artykuły