Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.
Apigee bietet ein leistungsstarkes Dienstprogramm namens Apigee API, das Folgendes anbietet:
- API-Proxys bereitstellen oder Bereitstellung aufheben
- Virtuelle Hosts, Schlüsselspeicher und Truststores usw. konfigurieren
- Entitäten wie Schlüssel/Wert-Zuordnungen (Key Value Maps, KVMs), API-Produkte, Entwickler-Apps, Entwickler, Consumer-Keys usw. erstellen, löschen und aktualisieren
- Informationen zu diesen Entitäten abrufen
Diese Dienste werden über eine Komponente namens Management Server in der Apigee-Plattform zugänglich gemacht. Diese Dienste lassen sich mit einfachen API-Aufrufen einfach aufrufen.
Manchmal müssen Sie einen oder mehrere dieser Dienste über API-Proxys zur Laufzeit verwenden. Dies liegt daran, dass Entitäten wie KVMs, OAuth-Zugriffstokens, API-Produkte, Entwickler-Apps, Entwickler, Consumer-Keys usw. hilfreiche Informationen in Form von Schlüssel/Wert-Paaren, benutzerdefinierten Attributen oder als Teil des Profils enthalten.
Sie können beispielsweise die folgenden Informationen in einer KVM speichern, um sie zur Laufzeit sicherer und zugänglicher zu machen:
- Backend-Ziel-URLs
- Umgebungsattribute
- Sicherheitsanmeldedaten für Backend- oder Drittanbietersysteme
Möglicherweise möchten Sie auch die Liste der API-Produkte oder die E-Mail-Adresse des Entwicklers zur Laufzeit abzurufen. Diese Informationen werden im Rahmen des Developer Apps-Profils verfügbar sein.
Alle diese Informationen können zur Laufzeit effektiv verwendet werden, um dynamisches Verhalten in Richtlinien oder benutzerdefiniertem Code in Apigee zu aktivieren.
Anti-Pattern
Die Apigee-APIs werden bevorzugt und sind nützlich für Verwaltungsaufgaben und sollten nicht für die Ausführung von Laufzeitlogik in API-Proxy-Flows verwendet werden. Dies hat folgende Gründe:
- Die Verwendung von Apigee APIs für den Zugriff auf Informationen zu Entitäten wie KVMs, OAuth-Zugriffstokens oder zu einem anderen Zweck über API-Proxys führt zu einer Abhängigkeit von Verwaltungsservern.
- Verwaltungsserver sind kein Bestandteil der Apigee-Laufzeitkomponenten und daher sind sie möglicherweise nicht hochverfügbar.
- Verwaltungsserver können auch nicht innerhalb desselben Netzwerks oder Rechenzentrums bereitgestellt werden und können daher zur Laufzeit zu Netzwerklatenzen führen.
- Die Einträge auf den Verwaltungsservern werden für einen längeren Zeitraum im Cache gespeichert, sodass Sie die neuesten Daten möglicherweise nicht sofort in den API-Proxys sehen, wenn Sie innerhalb kurzer Zeit Schreib- und Lesevorgänge ausführen.
- Erhöhen der Netzwerk-Hops zur Laufzeit
Im folgenden Codebeispiel wird der Apigee API-Aufruf über den benutzerdefinierten JavaScript-Code durchgeführt, um die Informationen aus der KVM abzurufen:
var response = httpClient.send('https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/keyvaluemaps')
Wenn der Verwaltungsserver nicht verfügbar ist, schlägt der JavaScript-Code fehl, der den Apigee API-Aufruf aufruft. Dadurch schlägt die API-Anfrage fehl.
Auswirkungen
- Führt während der Laufzeit zu einer zusätzlichen Abhängigkeit von Verwaltungsservern. Jeder Fehler auf den Verwaltungsservern wirkt sich auf die API-Aufrufe aus.
- Nutzeranmeldedaten für Apigee APIs müssen entweder lokal oder in einem sicheren Speicher, z. B. einer verschlüsselten KVM, gespeichert werden.
- Leistungseinbußen durch den Aufruf des Verwaltungsdienstes über das Netzwerk
- Die aktualisierten Werte werden aufgrund einer längeren Cache-Ablaufzeit auf Verwaltungsservern möglicherweise nicht sofort angezeigt.
Best Practice
Es gibt effektivere Möglichkeiten, Informationen von Entitäten wie KVMs, API-Produkten, Entwickler-Apps, Entwicklern, Consumer-Keys usw. zur Laufzeit abzurufen. Hier einige Beispiele:
- Verwenden Sie eine KeyValueMapOperations-Richtlinie, um auf Informationen aus KVMs zuzugreifen. Im folgenden Beispielcode wird gezeigt, wie Sie Informationen von der KVM abrufen:
<!-- /antipatterns/examples/2-6.xml --> <KeyValueMapOperations mapIdentifier="urlMap" async="false" continueOnError="false" enabled="true" name="GetURLKVM"> <DisplayName>GetURLKVM</DisplayName> <ExpiryTimeInSecs>86400</ExpiryTimeInSecs> <Scope>environment</Scope> <Get assignTo="urlHosti" index="2"> <Key> <Parameter>urlHost_1</Parameter> </Key> </Get> </KeyValueMapOperations>
- Um über den API-Proxy auf Informationen zu API-Produkten, Entwickler-Apps, Entwicklern, Consumer-Keys usw. zuzugreifen, können Sie Folgendes tun:
- Wenn Ihr API-Proxy-Flow eine VerifyAPIKey-Richtlinie hat, können Sie mit den Flow-Variablen, die als Teil dieser Richtlinie ausgefüllt werden, auf die Informationen zugreifen. Im folgenden Beispielcode sehen Sie, wie Sie den Namen und die created_by-Informationen einer Entwickler-App mit JavaScript abrufen:
<!-- /antipatterns/examples/2-7.xml --> print("Application Name ", context.getVariable(""verifyapikey. VerifyAPIKey.app.name")); print("Created by:", context.getVariable("verifyapikey. VerifyAPIKey.app.created_by"));
- Wenn Ihr API-Proxy-Flow keine VerifyAPIKey-Richtlinie hat, können Sie über die
AccessEntity
- und dieExtractVariables
-Richtlinie auf die Profile von API-Produkten, Entwickler-Apps usw. zugreifen:- Rufen Sie das Profil der Entwickler-App mit der AccessEntity-Richtlinie ab:
<!-- /antipatterns/examples/2-8.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AccessEntity async="false" continueOnError="false" enabled="true" name="GetDeveloperApp"> <DisplayName>GetDeveloperApp</DisplayName> <EntityType value="app"></EntityType> <EntityIdentifier ref="developer.app.name" type="appname"/> <SecondaryIdentifier ref="developer.id" type="developerid"/> </AccessEntity>
- Extrahieren Sie
appId
aus der Entwickler-App mit der ExtractVariables-Richtlinie:<!-- /antipatterns/examples/2-9.xml --> <ExtractVariables name="Extract-Developer App-Info"> <!-- The source element points to the variable populated by AccessEntity policy. The format is <policy-type>.<policy-name> In this case, the variable contains the whole developer profile. --> <Source>AccessEntity.GetDeveloperApp"</Source> <VariablePrefix>developerapp</VariablePrefix> <XMLPayload> <Variable name="appld" type="string"> <!-- You parse elements from the developer profile using XPath. --> <XPath>/App/AppId</XPath> </Variable> </XMLPayload> </ExtractVariables>
- Rufen Sie das Profil der Entwickler-App mit der AccessEntity-Richtlinie ab:
- Wenn Ihr API-Proxy-Flow eine VerifyAPIKey-Richtlinie hat, können Sie mit den Flow-Variablen, die als Teil dieser Richtlinie ausgefüllt werden, auf die Informationen zugreifen. Im folgenden Beispielcode sehen Sie, wie Sie den Namen und die created_by-Informationen einer Entwickler-App mit JavaScript abrufen: