fb
API Management 5 Minuten

Eine API mit Failover Endpunkten erstellen

Geschrieben für API Manager 3.X.0

Rob Blaauboer
Rob Blaauboer
Integration Consultant & WSO2 Trainer
Create an API with Failover Endpoints
Scrollen

Der WSO2 API Manager kann sowohl mit Failover Endpunkten als auch mit Load Balanced Endpunkten arbeiten. In diesem Blog werden wir eine API mit dem Failover Endpunkt aus dem API Manager heraus erstellen. Wir verwenden den API Manager 3.2.0. 

Einrichten des API-Managers

Die Installation des API-Managers werde ich hier nicht beschreiben. Was Sie installieren müssen, ist natürlich Java. Falls Sie es nicht bereits haben, unterstützt der API Manager 3.2.0 Java 8 und 11, sowohl Oracle als auch OpenJDK. Schauen Sie in die Dokumentation, wenn Sie weitere Informationen wünschen oder benötigen. Nachdem Sie Java_home eingestellt haben, können Sie die Zip-Datei mit dem API Manager herunterladen und entpacken. Das funktioniert sowohl auf Windows als auch auf Linux / Mac OS. Bitte besuchen Sie diesen Blog über die Installation von WSO2-Produkten.

Wiremock

Um die APIs zu mocken, verwende ich für die ausfallbedingte Nutzung WireMock, eine einfache Java-basierte Anwendung. Ich führe sie lokal aus und sie verwendet standardmäßig Mock-APIs auf Port 8080. Für Ihr Setup können Sie es lokal oder auch auf einem Server laufen lassen.

Sie finden in diesem Artikel von meinem Kollegen Dusan Dević eine Anleitung, wie Sie WireMock ausführen können. Darin wird erwähnt, dass ein Mock mithilfe einer Mapping-Datei erstellt werden kann. Für diesen Blog benötigen wir einige Mappings in WireMock. Ich erstelle drei Mock-APIs: api_6, api_7 und api_8.

Im Folgenden sehen Sie den api_6 Mock-Endpunkt (api6.json), der für einen regulären (nicht konfigurierten) Endpunkt zu spät antwortet.

{
    "request": {
        "method": "GET",
        "url": "/api_6"
    },
    "response": {
        "status": 200,
        "body": "30 seconds passed so here I am!",
        "fixedDelayMilliseconds": 30000, 
        "headers": {
            "Content-Type": "application/json" }
    }
}

Dies ist api_7 (api7.json), die ohne Verzögerung antwortet, API 8 ist eine Kopie davon, aber natürlich mit einer anderen url (api_8) und einem anderen Namen (api8.json).

{
    "request": {
        "method": "GET",
        "url": "/api_7"
    },
    "response": {
        "status": 200,
        "body": "Here I am API 7. no delay",
        "fixedDelayMilliseconds": 0,
        "headers": {
            "Content-Type": "application/json" }
    }
}

Sie können die Antworten der gemockten Endpunkte z. B. mit SoapUI sehen. 

API Failover endpoints 1

Erstellen einer neuen API namens Failover mit API Manager

Wir beginnen mit dem Erstellen einer neuen API namens Failover. 

Öffnen Sie den API-Publisher, indem Sie zu https://localhost:9443/publisher gehen. Loggen Sie sich mit dem Admin-Konto ein und wählen Sie die Option design new rest API aus dem Menü im API Publisher. 

API Failover endpoints 2

Füllen Sie die folgenden Details in Bezug auf die API-Definition aus: 

API Failover endpoints 3

Die Details sind:

NameFailover
Contextfail
Version1.0
Endpointhttp://[your-hostname]:8080/api_6
Business plan(s)Gold

Wählen Sie „Erstellen“, um die API zu erstellen. Dies ist der Übersichtsbildschirm. 

Design-Konfigurationen im API Manager

Im diesem Blog konzentrieren wir uns hauptsächlich auf die technische Einrichtung der Failover-Endpunkte. Es ist wichtig zu wissen, dass das Devportal (früher als Store bekannt) ein Ort ist, an dem Entwickler Ihre APIs finden, ausprobieren und abonnieren können. Wie jeder Store, der etwas anbietet, ist es wichtig, dass Sie auch Zeit auf die nicht-technischen Aspekte verwenden, wie z. B. die Dokumentation (wie man die API verwendet), Tags, um die Auffindbarkeit zu verbessern und ein schönes Bild, das die API hervorhebt. Dies erfolgt auf der Registerkarte Designkonfiguration. 

Wir haben ein eigenes Logo erstellt. Wenn Sie dieses ebenfalls ändern möchten, drücken Sie auf Designkonfigurationen und laden Sie ein Logo Ihrer Wahl hoch. 

API Failover endpoints 4

Laden Sie das Logo in die API hoch und nehmen Sie die folgenden Änderungen an der Designkonfiguration vor.

API Failover endpoints 5
Namefailoverlogo
DescriptionFailover API
Publisher Access ControlAll
Designer Portal VisibilityPublic
TagsFailover

Betätigen Sie „Save“, um die Änderungen zu speichern. 

Wechseln Sie zu Ressourcen und entfernen Sie alle standardmäßig erstellten Platzhalter-Ressourcen, AUSSER GET /*. Normalerweise würden Sie niemals Platzhalter-Ressourcen haben, da diese ein Sicherheitsrisiko darstellen. Eine API-Definition sollte so geschlossen wie möglich sein. Der Einfachheit halber werden wir jedoch die Platzhalter-Ressource zulassen.

API Failover endpoints 6

Betätigen Sie „Save“, um die Änderungen zu speichern. 

Klicken Sie auf dem Übersichtsbildschirm auf die Endpunkte und Sie sehen den folgenden Inhalt:

API Failover endpoints 7

Klicken Sie bei den Load Balance- und Failover-Konfigurationen auf ‚Not Configured‘.

API Failover endpoints 8

Wählen Sie Failover als Endpunkttyp und ergänzen Sie 2 Failover-Endpunkte, indem Sie den ursprünglichen Endpunkt (der auf api_6 zeigt) kopieren und api_7 und api_8 als zusätzliche Failover-Endpunkte verwenden, wie in der folgenden Abbildung gezeigt.

API Failover endpoints 9

Ändern Sie für den ersten Endpunkt (api_6) die erweiterte Konfiguration wie folgt. Fügen Sie die Fehlercodes 101503, 101504, 101505, 101507 hinzu, indem Sie sie in der Dropdown-Liste auswählen. 

API Failover endpoints 10

In der Regel würden Sie dies für alle Endpunkte tun, aber da der api_6 der einzige ist, der spät antwortet, genügt dies. Um das Ganze zu beschleunigen, habe ich den Connection Timeout auf 5000 ms gesetzt. 

Speichern Sie, um die Änderungen zu speichern. 

API Failover endpoints 11

Die API in der Lebenszyklusdefinition veröffentlichen und zum Devportal gehen, um die API zu sehen. Melden Sie sich bei der API an, erzeugen Sie ein Token, kopieren Sie es und probieren Sie die API mit der Soap-Oberfläche aus. 

API Failover endpoints 12

SoapUI

Erstellen Sie in SoapUI ein neues REST-Projekt basierend auf der URL https://localhost:8243/fail/1.0. Die Authentifizierung muss auf Oauth 2.0 eingestellt und das generierte Access Token in das Feld Access Token in Soap UI kopiert werden. Sie können jedoch auch so konfigurieren, dass das Token in Soap UI generiert wird. Wir gehen nicht ins Detail, sondern sagen Ihnen nur, dass Sie in diesem Fall auf die Schaltfläche „Get Token“ im Fenster „Authorization“ klicken und die erforderlichen Details eingeben müssen. Diese Informationen finden Sie im Devportal.

API Failover endpoints 13

Nach einiger Zeit werden Sie eine Antwort erhalten. Durch die Failover-Konfiguration im API-Manager sollten Sie die Antwort des zweiten Endpunkts, api_7, in unserer Liste der Endpunkte sehen.

API Failover endpoints 14

Sie können auf der Konsole sehen, was passiert ist.

[2021-04-26 12:36:04,889]  INFO - EndpointContext Endpoint : failover--v1.0_APIproductionEndpoint_0 with address http://localhost:8080/api_6 has been marked for SUSPENSION, but no further retries remain. Thus it will be SUSPENDED.
[2021-04-26 12:36:04,893]  WARN - EndpointContext Suspending endpoint : failover--v1.0_APIproductionEndpoint_0 with address http://localhost:8080/api_6 - current suspend duration is : 100ms - Next retry after : Mon Apr 26 12:36:04 CEST 2021
[2021-04-26 12:36:04,901]  WARN - FailoverEndpoint Endpoint [failover--v1.0_APIproductionEndpoint] Detect a Failure in a child endpoint : Endpoint [failover--v1.0_APIproductionEndpoint_0]
[2021-04-26 12:36:04,919]  WARN - TimeoutHandler Expiring message ID : urn:uuid:1609bac3-228b-4698-b78f-430e778c2fe2; dropping message after ENDPOINT_TIMEOUT of : 5 seconds for Endpoint [failover--v1.0_APIproductionEndpoint_1], URI : http://localhost:8080/api_6, Received through API : admin--failover:v1.0
[2021-04-26 12:36:09,039]  WARN - SynapseCallbackReceiver Synapse received a response for the request with message Id : urn:uuid:1609bac3-228b-4698-b78f-430e778c2fe2 and correlation_id : null But a callback is not registered (anymore) to process this response