Zasada KeyValueMapOperations

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

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

Co

Daje oparty na zasadach dostęp do magazynu mapy klucz-wartość (KVM) dostępnego w Apigee Edge. Pary klucz-wartość można przechowywać, pobierać i usuwać z nazwanych istniejących map przez skonfigurowanie zasad KeyValueMapOperations, które określają operacje PUT, GET lub DELETE. (Zasada musi wykonać co najmniej 1 z tych operacji).

Filmy

Aby dowiedzieć się więcej o KVM, obejrzyj te filmy.

Wideo Opis
Dlaczego warto korzystać z Map klucz-wartość? Dowiedz się, do czego są potrzebne i jak działają KVM.
Utwórz KVM za pomocą interfejsu użytkownika i pobieraj KVM w czasie działania Utwórz KVM, pobierz jej wartość za pomocą zasady KVM i wstrzyknij wartość do żądania do interfejsu API za pomocą zmiennych przepływu.
Tworzenie i aktualizowanie KVM w środowisku wykonawczym interfejsu API Utwórz KVM w środowisku wykonawczym interfejsu API, korzystając z zasady KVM.
Buforuj KVM, aby zwiększyć wydajność Zwiększ wydajność zasady KVM, przechowując dane w pamięci podręcznej.
Przechowuj zaszyfrowane KVM Przechowuj informacje poufne w KVM w zaszyfrowanym formacie i pobieraj wartość w czasie działania za pomocą zasady KVM i zmiennych prywatnych.
Zarządzanie dostępem za pomocą zakresu KVM Ogranicz KVM do organizacji, środowiska, serwera proxy interfejsu API lub wersji proxy interfejsu API za pomocą atrybutu zakresu zasad KVM.
Usuwanie wpisów KVM w środowisku wykonawczym interfejsu API Usuń wpisy KVM w środowisku wykonawczym interfejsu API, korzystając z operacji DELETE zasady KVM.

Sample

PUT KVM z literałem

Gdy ta zasada jest uruchamiana, tworzy zaszyfrowaną maszynę wirtualną o nazwie FooKVM, a następnie klucz o nazwie FooKey_1 z 2 wartościami ustawionymi z ciągami literałowymi foo i bar (nie ustawiono z wartościami wyodrębnionymi ze zmiennych). Przy wykonywaniu GET klucza w następnym przykładzie określasz numer indeksu, aby pobrać żądaną 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 „environment”. Oznacza to, że możesz zobaczyć maszynę wirtualną w interfejsie zarządzania w sekcji Interfejsy API > Konfiguracja środowiska > Mapy par klucz-wartość. Główne maszyny wirtualne wyświetlane na tej stronie są ograniczone do wybranego środowiska.

POBIERZ KVM z literału

Ta zasada analizuje mapę 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 par klucz-wartość jest usługa skracania adresów URL. Mapę par klucz-wartość można skonfigurować tak, aby zapisywały skrócone adresy URL wraz z odpowiadającymi im pełnymi adresami URL.

Ten przykład zasad tworzy mapę par klucz-wartość. Zasada przesyła klucz z 2 powiązanymi wartościami do mapy 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>

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

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

Jeśli na przykład zasada jest uruchamiana w czasie działania, zmienne mogą mieć takie wartości:

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

Poniższa mapa i wpis klucz-wartość zostaną wygenerowane w magazynie par klucz-wartość Edge i ograniczone do serwera proxy interfejsu API, do którego powiązana jest zasada:

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

Wpis będzie trwał do momentu jego usunięcia. Wpisy do magazynu klucz-wartość są rozłożone między instancjami Edge, które działają w chmurze.

POBIERZ KVM ze zmiennej

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

Aby pobrać wartość wpisu mapy klucz/wartość, taką jak ta dostępna na karcie KeyValueMapOperations PUT, skonfiguruj zasadę pobierającą mapę par 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>

Jeśli po uruchomieniu tej zasady wartość zmiennej urlencoding.requesturl.hashed wynosi ed24e12820f2f900ae383b7cc4f2b31c402db1be, zmienna niestandardowa o nazwie urlencoding.shorturl zostanie ustawiona z wartością http://tinyurl.com/38lwmlr.

Po pobraniu danych inne zasady i kod mogą uzyskać do nich dostęp przez wyodrębnienie wartości z tych zmiennych.

Zaszyfrowana wartość GET z KVM

Jeśli mapa klucz-wartość jest zaszyfrowana, pobierz wartości za pomocą prefiksu „private.” w wartości atrybutu assignTo. W tym przykładzie zmienna private.encryptedVar zawiera odszyfrowaną wartość klucza foo mapy klucz-wartość. Informacje o tworzeniu zaszyfrowanych map par klucz-wartość znajdziesz w tematach tworzenia za pomocą interfejsu API zarządzania mapami klucz/wartości.

<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

Dokumentacja elementów 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>

Ten przykład pokazuje atrybuty w tagu <KeyValueMapOperations>:

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

W tabeli poniżej znajdziesz opis atrybutów charakterystycznych dla tagu <KeyValueMapOperations>:

Atrybut Opis Domyślne Obecność
mapIdentifier

Określa identyfikator, który ma być używany podczas uzyskiwania dostępu do mapy utworzonej przez tę zasadę lub w interfejsie zarządzania.

W Apigee Edge dla chmury publicznej nazwa KVM uwzględnia wielkość liter. Na przykład foobar różni się od FooBar.

Jeśli wykluczysz ten atrybut, używany będzie KVM o nazwie kvmap.

Na poziomie organizacji/środowiska/apiproxy możesz użyć atrybutu mapIdentifier, aby określić własną nazwę mapy.

Nie dotyczy Opcjonalnie

Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślne 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>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw wartość false, aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.

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

false Opcjonalnie
enabled

Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

false Wycofano

Element <DisplayName>

Użyj oprócz atrybutu name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

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

Nie dotyczy

Jeśli pominiesz ten element, zostanie użyta wartość atrybutu name zasady.

Obecność Opcjonalnie
Typ Ciąg znaków

Element <Delete>

Usuwa określoną parę klucz-wartość. Należy użyć co najmniej 1 z tych elementó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ślne Nie dotyczy
Obecność Wymagane w przypadku braku wartości <Get> lub <Put>.
Typ Nie dotyczy

Element <Entry>

Wartości wyjściowe dla map klucz-wartość, które są wypełniane w mapie par klucz-wartość po jej zainicjowaniu.

W przypadku Edge dla chmury publicznej 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ślne Nie dotyczy
Obecność Opcjonalnie
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ść z pamięci podręcznej określonego KVM.

Wartość 0 lub -1 albo jego wykluczenie oznacza, że używana jest wartość domyślna 300 sekund. Na przykład:

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

KVM to mechanizm długoterminowego przechowywania danych, który przechowuje klucze i wartości w bazie danych NoSQL. Z tego powodu odczyt z maszyny wirtualnej w czasie działania może potencjalnie spowolnić serwer proxy. Aby zwiększyć wydajność, Edge ma wbudowany mechanizm buforowania kluczy/wartości KVM w pamięci podczas działania. Ta zasada operacji KVM zawsze odczytuje dane z pamięci podręcznej w przypadku operacji GET.

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

GET – przy pierwszym wykonaniu operacji GET żądane klucze/wartości z KVM (której nazwa jest określona w atrybucie głównym zasad mapIdentifier) są ładowane do pamięci podręcznej, gdzie pozostają przy kolejnych operacjach GET, dopóki nie wystąpi jedna z tych sytuacji:

  • Liczba sekund podana w polu <ExpiryTimeInSecs> wygasa.
    lub
  • Operacja PUT w zasadzie KVM zastępuje istniejące wartości (objaśnione poniżej).

PUT – operacja PUT zapisuje klucze/wartości w określonym KVM. Jeśli PUT zapisuje klucz w kluczu, który już istnieje w pamięci podręcznej, ta pamięć podręczna jest natychmiast odświeżana i teraz zachowuje nową wartość dla liczby sekund określonej w elemencie <ExpiryTimeInSecs> zasady.

Przykład: zapisywanie KVM w pamięci podręcznej

  1. Operacja GET pobiera wartość „rating”, która dodaje wartość „10” do pamięci podręcznej. <ExpiryTimeInSecs> w zasadzie ma wartość 60.
  2. Po 30 sekundach zasada GET jest uruchamiana ponownie i pobiera z pamięci podręcznej wartość „10”.
  3. 5 sekund później zasada PUT aktualizuje wartość „rating” na „8”, a <ExpiryTimeInSecs> w zasadzie PUT ma wartość 20. Pamięć podręczna jest natychmiast odświeżana przy użyciu nowej wartości, która obecnie jest ustawiona tak, aby pozostawała w pamięci podręcznej przez 20 sekund. (Gdyby PUT nie wystąpiło, pamięć podręczna wypełniona pierwotnie przez pierwsze GET dalej będzie istnieć przez kolejne 30 sekund.
  4. 15 sekund później wykonuje się kolejna metoda GET, która pobiera wartość „8”.

Element <Get>

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

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

Aby pobierać wiele elementów z KVM, możesz uwzględnić w zasadzie wiele bloków Get.

Domyślne Nie dotyczy
Obecność Wymagane, jeśli brakuje <Put> lub <Delete>.
Typ Nie dotyczy

Pobieranie pojedynczego produktu z maszyny wirtualnej

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

Pobieranie wielu elementów z maszyny wirtualnej

W przykładzie poniżej przyjmijmy, że kluczowa jest maszyna wirtualna z podanymi niżej kluczami i wartościami. Oprócz magazynu najpopularniejszych filmów wszech czasów, KVM przechowuje również imię i nazwisko reżysera wszystkich popularnych filmów.

Klucz Wartość
top_movies Księżniczka,Ojciec chrzestny,Citizen Kane
Obywatel Kane Orsona Wellesa
Księżniczka Rob Reiner
Ojciec chrzestny Francis Ford Coppola

Oto konfiguracja zasad KVM, dzięki której możemy pobrać obecnie najpopularniejszy film i imię i nazwisko 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>

Po wywołaniu serwera proxy interfejsu API Edge tworzy te zmienne, których możesz używać w procesie obsługi serwera proxy interfejsu API:

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

Atrybuty

Tabela poniżej zawiera opis atrybutów elementu <Get>:

Atrybut Opis Domyślne Obecność
assignTo

Zmienna, do której należy przypisać pobraną wartość.

Jeśli mapa par klucz jest zaszyfrowana, rozpocznij nazwę assignTo od „private.”. Na przykład:

<Get assignTo="private.myvar">

Zasada zgłasza błąd, jeśli próbujesz pobrać zaszyfrowaną mapę par klucza bez użycia prefiksu. 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.

Informacje o tworzeniu zaszyfrowanych map par klucz-wartość znajdziesz w tematach tworzenia w ramach interfejsu Key/Value Maps Management API oraz tworzenia i edytowania map klucz-wartość środowiska.

Nie dotyczy Wymagane
index

Numer indeksu (w indeksie równym 1) elementu, który ma zostać pobrany z klucza wielowartościowego. Na przykład wpisanie index=1 zwróci pierwszą wartość i przypisze ją do zmiennej assignTo. Jeśli nie podasz wartości indeksu, wszystkie wartości w tym wpisie są przypisywane do zmiennej jako java.util.List.

Przykład można znaleźć na karcie „Pobieranie zaszyfrowanej wartości z KVM” w sekcji Przykłady.

Nie dotyczy Opcjonalnie

Element <InitialEntries>

Wartości wyjściowe w przypadku map par klucz-wartość, które są wypełniane w mapie par klucz-wartość po jej zainicjowaniu. Pamiętaj, aby podać 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 zapiszesz zasadę w interfejsie zarządzania na wdrożonej wersji serwera proxy lub wdrożysz pakiet proxy interfejsu API zawierający zasadę z tym elementem, klucze zostaną automatycznie utworzone w KVM (jako niezaszyfrowane). Jeśli wartości w zasadzie różnią się od wartości w KVM, po wdrożeniu serwera proxy wartości w KVM są zastępowane. Wszystkie nowe pary klucz-wartość zostaną dodane do istniejącej klucza maszyny wirtualnej razem z dotychczasowymi parami.

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

Rozmiar klucza jest ograniczony do 2 KB zarówno w przypadku Edge dla chmury publicznej, jak i Edge dla Private mogła. Wartość KVM jest ograniczona do 2 KB.

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

Domyślne Nie dotyczy
Obecność Opcjonalnie
Typ Nie dotyczy

Element <Key>

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

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

Szczegółowe informacje o ustawianiu nazwy klucza znajdziesz w elemencie <Parameter>.

W przypadku Edge dla chmury publicznej rozmiar klucza jest ograniczony do 2 KB. Więcej informacji znajdziesz w artykule o różnicach między interfejsem Edge for Public Cloud API a interfejsem Private Cloud API.

Domyślne Nie dotyczy
Obecność Opcjonalnie
Typ Nie dotyczy

Element <Parametr>

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ł

    <Key>
      <Parameter>literal</Parameter>
    </Key>
    
  • Zmienna do pobrania w czasie działania 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, ciąg znaków skutecznego klucza to połączenie wartości każdego parametru połączone podwójnym podkreśleniem. Na przykład w powyższym przykładzie, jeśli zmienna apiproxy.name ma wartość „abc1”, skutecznym kluczem jest targeturl__abc1__weight.

Niezależnie od tego, czy pobierasz, aktualizujesz czy usuwasz wpis klucz-wartość, nazwa klucza musi być taka sama jak nazwa klucza na mapie par klucz-wartość. Wskazówki znajdziesz w sekcji Określanie i pobieranie nazw kluczy.

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

Atrybuty

Tabela poniżej zawiera opis atrybutów elementu <Parameter>:

Atrybut Opis Domyślne Obecność
referencja 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 tagiem otwierającym a zamykającym nie podano wartości literału. Niedozwolone w przypadku podania wartości literału.

Element <Put>

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

Aby utworzyć zaszyfrowaną mapę par klucz-wartość, użyj interfejsu API zarządzania kluczami i wartościami map. Możesz też zapoznać się z informacjami w sekcji Tworzenie i edytowanie map wartości kluczy środowiska, co pozwoli Ci utworzyć w interfejsie zaszyfrowane KVM w zakresie środowiska.

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

Atrybuty

Tabela poniżej zawiera opis atrybutów elementu <Put>:

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

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

false Opcjonalnie

Element <Scope>

Określa granicę ułatwień dostępu na mapach klucz-wartość. Domyślnym zakresem jest environment, co oznacza, że wpisy map są domyślnie wspólne przez wszystkie serwery proxy interfejsu API działające w środowisku (na przykład testowe lub produkcyjne). Jeśli ustawisz zakres na apiproxy, wpisy w mapie par klucz-wartość będą dostępne tylko przez serwer proxy interfejsu API, który zapisuje wartości na mapie.

Pamiętaj, że podczas uzyskiwania dostępu do wpisu o mapie lub mapie 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, przy pobieraniu jej wartości, wprowadzaniu zmian lub usuwaniu wpisów musisz używać zakresu apiproxy.

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

Element <Value>

Określa wartość klucza. Możesz podać wartość jako ciąg literału lub za pomocą atrybutu ref jako zmienną do pobierania 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ć wiele elementów <Value>, aby określić wieloczęściową wartość. Wartości są łączone w czasie działania.

W tym przykładzie do KVM zostały dodane 2 klucze:

  • Klucz k1 o wartościach v1,v2
  • Klucz k2 o wartościach 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 poniższym przykładzie tworzony jest 1 klucz z 2 wartościami. Załóżmy, że nazwa organizacji to foo_org, nazwa serwera proxy interfejsu API to bar, a środowisko to test:

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

Atrybuty

Tabela poniżej zawiera opis atrybutów elementu <Value>:

Atrybut Opis Domyślne Obecność
referencja Określa nazwę zmiennej, której wartość zawiera pary klucz-wartość, które chcesz ustawić. Nie dotyczy Wymagany, jeśli między tagiem otwierającym a zamykającym nie podano wartości literału. Niedozwolone w przypadku podania wartości literału.

Informacje o błędach

Błędy zwracane z zasad Edge mają spójny format opisany w Informacjach na temat 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ść (w języku angielskim).

Magazyn mapy par klucz-wartość zapewnia prosty mechanizm trwałości danych sformatowanych jako pary klucz/wartość. Możesz uzyskać do nich dostęp w czasie działania 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 w mapie par klucz-wartość. Mapa par klucz-wartość może zawierać wiele wpisów.

Oto przykład użycia map klucz-wartość. Załóżmy, że chcesz 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 plik 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 w celu wymuszania umieszczania adresów IP na liście dozwolonych lub odrzuconych, aby dynamicznie wybierać docelowy adres backendu itp. Zwykle zasada KeyValueMapOperations służy do przechowywania lub pobierania długotrwałych informacji, których należy używać ponownie w wielu transakcjach żądań i odpowiedzi.

Mapami klucz-wartość można manipulować za pomocą zasady KeyValueMapOperations lub bezpośrednio przez interfejs Apigee Edge Management API. Więcej informacji o interfejsie API map klucz-wartość organizacji znajdziesz w dokumentacji interfejsu Management API. Za pomocą interfejsu API możesz na przykład przesyłać duże zbiory danych do magazynu par klucz-wartość lub tworzyć skrypty do zarządzania wpisami z mapami par klucz-wartość. Zanim uzyskasz dostęp do mapy za pomocą zasady KeyValueMapOperations, musisz utworzyć ją za pomocą interfejsu API.

Określanie i pobieranie nazw kluczy

Za pomocą elementów <Parameter> i <Value> możesz podać wartość literałową (gdzie wartość znajduje się między tagiem otwierającym i zamykającym) lub użyć atrybutu ref, aby określić nazwę zmiennej, której wartość należy używać w czasie działania.

Warto wspomnieć o elemencie Parametr, ponieważ określa on nazwę utworzonego klucza oraz nazwę klucza, który chcesz pobrać lub usunąć. Poniżej przedstawiliśmy 2 przykłady. Pierwszy określa dosłownie nazwę klucza, a drugi – nazwę klucza za pomocą zmiennej. Załóżmy, że do tworzenia kluczy w KVM:

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

W pierwszej instancji wartość literałowa „key_name_literal” jest przechowywana w KVM jako nazwa klucza. W drugim instancji każda wartość znajdująca się w key.name.variable staje się nazwą klucza w KVM. Jeśli np. key.name.variable zawiera wartość foo, klucz będzie miał nazwę „foo”.

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

Powiązane artykuły