info@yenlo.com
deu
Menu
WSO2 9 min

MockLab und WSO2 Micro Integrator

In diesem Blog werde ich Ihnen zeigen, wie ich MockLab verwende, um eine sehr einfache API zu simulieren, und wie ich den Micro Integrator verwenden werde, um die Back-End-URL sowie den erforderlichen API-Schlüssel für diese Demo zu verbergen.

Rob Blaauboer
Rob Blaauboer
Integration Consultant & WSO2 Trainer
MockLab und WSO2 Micro Integrator

Als Ausbilder entwickle ich mein eigenes Schulungsmaterial. Ich suche immer nach Möglichkeiten zur Vereinfachung – und zwar in dem Sinne, dass man für eine Sache so wenig Zeit wie möglich benötigt.

Zum Beispiel – und das ist ein gutes Beispiel – verwende ich seit einigen Jahren WireMock, das lokal auf unseren Schulungscomputern läuft, um bestimmte Dienste zu simulieren. Einige dieser Dienste reagieren nur mit einer Verzögerung von einer bestimmten Anzahl von Sekunden, wodurch ein Endpunktfehler bei einem Micro Integrator ausgelöst wird.

Andere Dienste werden nachgebildet, da sie lediglich mit dem Namen und der Nummer des Dienstes antworten müssen, wenn es sich um eine Round-Robin-Endpunktdefinition mit Lastenverteilung handelt.

Obwohl das Einrichten von WireMock keine große Sache ist, habe ich die Installation von WireMock kürzlich von meinen lokalen Rechnern entfernt. Auf der API-Konferenz in London im Oktober dieses Jahres hörte ich von einer gehosteten Version namens MockLab, die ich in ihrer kostenlosen Version nutzen kann, um herauszufinden, ob sie einen Mehrwert für unsere Schulungen bietet.

Die kostenlose Version bietet 1000 kostenlose Aufrufe pro Monat. Wenn diese Zahl überschritten wird, muss man natürlich ein Abonnement erwerben. Für mich reichen aber 1000 Aufrufe in der Regel aus.

In diesem Blog werde ich Ihnen zeigen, wie ich MockLab verwende, um eine sehr einfache API zu simulieren, und wie ich den Micro Integrator verwenden werde, um die Back-End-URL sowie den erforderlichen API-Schlüssel für diese Demo zu verbergen.

Ich schirme alles vor dem Benutzer ab, indem ich die API durch den Micro Integrator fließen lasse, um ein wenig zu vermitteln. In diesem Fall füge ich einen APIKEY in den Header ein und leite ihn an den Endpunkt weiter. Aber fangen wir mit MockLab an!

Installation

Natürlich gibt es keine. Da es sich um einen gehosteten Dienst handelt, gehe ich einfach auf die MockLab-URL und registriere mich oder verknüpfe die Anmeldung mit Google oder GitHub.

Mocklab inlog Google or Github

Ich entscheide mich für GitHub und beginne damit, eine neue Mock-API zu erstellen.

Die Erstellung ist wirklich einfach – klicken Sie auf „Mock API“ und geben Sie die Details ein.

Creating a new mock API for Github

Der Hostname ist optional und kann beim Aufrufen der API verwendet werden. Darunter befindet sich auch ein zufällig generierter Code als Teil einer URL wie r1274.mocklab.io.

Danach erstellen wir die API namens Blog und definieren einen Kontext / eine Ressource, bevor wir auf die Schaltfläche „Speichern“ klicken.

Create new API Github

Außerdem können wir nach Bedarf die Sicherheit für den Zugriff auf die API definieren. Das kann eine Benutzer-ID/ ein Passwort (AKA Http Basic) oder Header-Match sein.

Define security to access API

Wir können einen Header (mit Bezeichnung) und das Prädikat auswählen, zum Beispiel Gleich 1234.

Naming API in Mock API Security

Aber wir lassen ihn vorerst leer und erstellen einen Stub. Der Stub erzeugt einen GET unter /retrieve/data (nur ein zufälliger Kontext/Ressource), antwortet mit einem 200-Statuscode und einem JSON-Body – allerdings mit einer Verzögerung von 15000 Millisekunden. Außerdem fügen wir einen Header hinzu, um sicherzustellen, dass die Json-Antwort tatsächlich eine Nachricht mit dem Inhaltstyp application/json ist. Wenn Sie das weglassen, erhalten Sie eine Nachricht im Octet-Stream-Format zurück.

Header with Content Type application json

Wir setzen das Zeitlimit auf 15 Sekunden (15000 ms).

set the timeout in mocklab

Wir können es vom Browser aus testen, da es sich um ein GET handelt.

mocklab test GET

Sie erhalten die Dummy-Antwort in Ihrem Browserfenster zurück. Zur Sicherheit fügen wir ein Header-Match hinzu, damit die API nicht für alle offen ist.

add a Header mocklab

Das Ganze können wir jetzt auch über SoapUI testen, da wir die Fehlermeldung so leichter sehen können.

mocklab test from SoapUI

Wenn wir den Schlüssel als Header hinzufügen, können wir sehen, dass wir die 200 und die Antwort erhalten.

mocklab test Soapui 200 and Response

Und wir erhalten die Antwort statt eines 401-Statuscodes zurück.

Hiding it

Hierfür kann man unter anderem einen Zwischenstopp in die API einbauen, d. h. man ruft den Endpunkt nicht direkt auf, sondern geht zu einer anderen API, die bei jedem Aufruf das simulierte Backend aufruft. Der Vorteil eines solchen Setups ist, dass der von uns aufgerufene Endpunkt – in diesem Fall der des Mock Labs – der Person, die die API aufruft, nicht bekannt ist. Außerdem sieht sie nicht, dass der API-Schlüssel als Header in den Datenfluss eingefügt wird. Diese Lösung können Sie verwenden, wenn Sie dem API-Fluss so etwas wie einen Header hinzufügen möchten, das aber nicht in der API-Definition tun wollen, oder wenn Sie den tatsächlich aufgerufenen Adressendpunkt verbergen möchten.

In diesem Fall müssen wir also eine API erstellen und in einem sehr einfachen Fluss dem API-Aufruf den Header hinzufügen. Diesen leiten wir dann an den ursprünglichen Endpunkt in MockLab weiter.

Ich werde nicht die gesamte Einrichtung des Micro Integrators und des Integration Studios beschreiben, weil das in diesem Blog zu weit führen würde. Sie können sich aber einen dieser Blogs durchlesen, wenn Sie Fragen zur Installation haben. Ich werde unter anderem die Einrichtung beschreiben, und in diesem Fall werde ich Integration Studio 8.1 einsetzen, das über einen eingebetteten Micro Integrator 4.1 verfügt. Das macht es sehr einfach, da ich außer dem Integration Studio keine zusätzliche Software installieren muss.

Normalerweise würde ich das Ganze in einer Linux-Umgebung installieren, aber für diesen Blog werde ich Windows verwenden. Und zwar aus dem einfachen Grund, dass sowohl die WSO2-Produkte als auch das Integration Studio auf den wichtigsten Plattformen laufen: Windows, Linux und Macintosh.

Integration Studio starten

Um Integration Studio zu starten, klicken Sie einfach auf das Symbol in dem Verzeichnis, in dem Sie es installiert haben.

Starting integration studio new workspace

Ich habe einen neuen Arbeitsbereich erstellt (der, wie Sie sehen, nur auf ein Verzeichnis verweist) und werde in diesem Verzeichnis ein neues Integrationsprojekt erstellen.

new Integration Project in directory

Wir befinden uns derzeit in der Ansicht „Erste Schritte“ (Getting Started) des Integration Studios.

Getting Started view of integration studio

Wenn Sie auf „Neues Integrationsprojekt“ klicken, öffnet sich der Assistent, der für uns die Projektstruktur mit einem Composite Exporter und einem Konfigurationsprojekt für die Speicherung der Artefakte erstellt. Ich werde es MockLabProject nennen.

Select modules integration studio

Der Assistent fügt dem Projektnamen den Zusatz configs und composite exporter hinzu, um die Unterverzeichnisse zu erstellen. Wir behalten alle Einstellungen bei und klicken auf „Fertig stellen“ (Finish).

Integration Studio wechselt nun in die ESB-Ansicht, wo wir das neu erstellte Projekt öffnen und einen Blick auf das Unterverzeichnis configs werfen können.

Integration studio switches to ESB

Hier können wir eine neue API erstellen. Wählen Sie das Unterverzeichnis „api“ aus, klicken Sie mit der rechten Maustaste darauf und wählen Sie Neu / REST-API (New / REST API).

create a new API and select REST API
mockAPI API artifact creation options

Geben Sie einfach MockAPI und /mock als Name und Kontext ein. Kicken Sie auf „Fertig stellen“ (Finish).

enter MockAPI

Der Einfachheit halber werden wir den Quellcode kopieren und die Standard-API-Definition ersetzen.

copy source code and replace default API definition

Klicken Sie auf „Quelle“ (Source) und kopieren Sie diesen Code.

<?xml version="1.0" encoding="UTF-8"?>
<api context="/mock" name="MockAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET">
        <inSequence>
            <header name="APIKEY" scope="transport" value="1234"/>
            <call>
                <endpoint>
                    <http method="get" uri-template="https://yenloblog.mocklab.io/retrieve/data">
                        <suspendOnFailure>
                            <initialDuration>-1</initialDuration>
                            <progressionFactor>-1</progressionFactor>
                            <maximumDuration>0</maximumDuration>
                        </suspendOnFailure>
                        <markForSuspension>
                            <retriesBeforeSuspension>0</retriesBeforeSuspension>
                        </markForSuspension>
                    </http>
                </endpoint>
            </call>
            <property name="ContentType" scope="axis2" type="STRING" value="application/json"/>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

Speichern Sie mit STRG-S. Wechseln Sie in den Entwurfsmodus und Sie werden dieses Setup sehen.

mocklab save code

Öffnen Sie das Pom des Composite Exporters und wählen Sie die API aus. Speichern Sie mit STRG-S.

Wählen Sie Fenster – Ansicht anzeigen – Andere… (Window-Show View – Other…)

Open the Pom of the Composite Exporter

Geben Sie Server ein oder wählen Sie sie aus und klicken Sie auf Öffnen.

select servers in integration studio

Klicken Sie in der Registerkarte Server mit der rechten Maustaste auf Micro Integrator Server (das obere rechteckige Feld (verdeckt)) und wählen Sie Hinzufügen und Entfernen,

Micro Integrator Server mocklab

Auswählen, Hinzufügen und Fertig stellen.

mocklab projects add and remove

Starten Sie den Server, klicken Sie erneut mit der rechten Maustaste auf Micro Integrator Server und wählen Sie Start (wie in der vorletzten Abbildung dargestellt).

Start the server on Micro Integrator Server 1

Die Konsole stellt die bereitgestellte API dar.

console the deployed API

Öffnen Sie nun erneut das Rest-Projekt in SoapUI. Erstellen Sie ein neues REST-Projekt für die exponierte API (http://localhost:8290/mock).

Create new REST Project on exposed API in SoapUI
request new rest project

Header fehlt

Zugegeben, bei der ersten Einrichtung habe ich vergessen, den Header festzulegen, da ich davon ausging, dass der json-Body auch einen korrekten Header enthält. Man muss ihn allerdings manuell festlegen, da die Nachricht sonst als application/octet-stream und nicht als application/json eingeht ( da wir in MockLab eine json-Antwort definiert haben).

Als Abhilfe legen wir den Inhaltstyp auf application/json fest. Wenn Sie den messageType als application/json festlegen, erhalten Sie eine Antwort wie diese: {„binary“: „eyJQYXRpZW50cyI6IjEwMSJ9“}, was eine base64-codierte Version der obigen Nachricht ist.

Dies kann natürlich entschlüsselt werden. Dafür verwenden wir den eingehenden Nachrichtentext.

setting header in mockapi
<?xml version="1.0" encoding="UTF-8"?>
<api context="/mock" name="MockAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET">
        <inSequence>
            <header name="APIKEY" scope="transport" value="1234"/>
            <call>
                <endpoint>
                    <http method="get" uri-template="https://yenloblog.mocklab.io/retrieve/data">
                        <suspendOnFailure>
                            <initialDuration>-1</initialDuration>
                            <progressionFactor>-1</progressionFactor>
                            <maximumDuration>0</maximumDuration>
                        </suspendOnFailure>
                        <markForSuspension>
                            <retriesBeforeSuspension>0</retriesBeforeSuspension>
                        </markForSuspension>
                    </http>
                </endpoint>
            </call>
            <property expression="$body/*" name="messageBody" scope="default" type="STRING"/>
            <payloadFactory media-type="json">
                <format>$1</format>
                <args>
                    <arg evaluator="xml" expression="base64Decode(get-property('messageBody'))"/>
                </args>
            </payloadFactory>
            <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

Wir müssen den Body in eine Variable kopieren, da die PayloadFactory den Body initialisiert, indem sie einen neuen Body erstellt. In diesem Fall sehen Sie die dekodierten json-Nutzdaten in der Antwort.

Zusammenfassung

Manchmal braucht man einfach einen Dienst, um etwas zu simulieren. Vielleicht möchten Sie etwas ausprobieren, aber können noch keinen Dienst entwickeln oder der Dienst ist noch nicht verfügbar.

In diesem Fall sollten Sie Mocklab als eine schnelle Möglichkeit in Betracht ziehen, um eine API zu erstellen, die Sie verwenden können.  In diesem Blog habe ich Ihnen gezeigt, wie einfach Mocklab funktioniert, indem ich eine API definiert und den WSO2 Micro Integrator in Verbindung mit dem WSO2 Integration Studio verwendet habe, um das Setup durch Senden einer einfachen Nachricht an die API zu testen. Sie können sogar die Anforderung hinzufügen, einen Header mit einem Code hinzuzufügen, den Mocklab überprüft und erst dann antwortet, wenn der Header vorhanden und korrekt ist.

deu
Schließen
Was ist auf unserer Speisekarte