Einführung in InterSystems API Manager

Kürzlich haben wir den InterSystems API Manager (IAM) herausgebracht, eine neue Komponente der InterSystems IRIS Data Platform, die die Überwachung, Steuerung und Verkehrssteuerung der Web-API innerhalb der IT-Infrastruktur ermöglicht.


In diesem Artikel werde ich Ihnen zeigen, wie Sie IAM konfigurieren und einige der vielen Funktionen demonstrieren, die Ihnen mit IAM zur Verfügung stehen. Mit InterSystems API Manager können Sie:


  • Sehen Sie sich die API an, und erfahren Sie, wer die API verwendet, welche APIs am beliebtesten sind und welche verbessert werden müssen.
  • Steuern Sie, wer die API verwendet, und beschränken Sie die Verwendung der API von einfachen Zugriffsbeschränkungen auf Einschränkungen je nach Anforderung. Sie haben anpassbare Steuerelemente und können schnell auf Änderungen der API-Verbrauchsmuster reagieren.
  • Schützen Sie APIs mit zentralen Sicherheitsmechanismen wie OAuth2.0, LDAP oder Key Token Authentication.
  • Vereinfachen Sie die Arbeit von Drittentwicklern und bieten Sie ihnen hervorragende Erfahrungen mit der API, indem Sie ein spezielles Portal für Entwickler öffnen.
  • Skalieren Sie die API und sorgen Sie für minimale Reaktionsverzögerungen.

Die Verwaltung der API ist für den Übergang zur SOA- oder Microservice-Architektur erforderlich. Dies vereinfacht die Integration zwischen einzelnen (Mikro-) Services und macht sie für alle externen und internen Verbraucher zugänglich. Infolgedessen lassen sich neue APIs leichter erstellen, warten und nutzen.


Wenn Sie InterSystems IRIS bereits verwenden, können Sie Ihrer Lizenz die IAM-Option hinzufügen. Die IAM-Option ist für InterSystems IRIS-Kunden kostenlos. Um IAM jedoch zu verwenden, müssen Sie einen neuen Lizenzschlüssel von InterSystems anfordern.


Wenn Sie InterSystems IRIS noch nicht verwenden und nur den InterSystems API Manager ausprobieren möchten, wenden Sie sich an InterSystems.


Erste Schritte und Installation


InterSystems IAM-Kunden können den Abschnitt "Software Distribution" von der WRC- Site herunterladen und als Docker-Container ausführen. Mindestsystemanforderungen:



Zunächst müssen Sie das Docker-Image herunterladen (Wichtig! Das Archiv mit der WRC ist kein Docker-Image, Sie müssen es im Docker-Image entpacken):


docker load -i iam_image.tar 

Dieser Befehl stellt das IAM-Image für die spätere Verwendung auf Ihrem Server zur Verfügung. IAM arbeitet als separater Container, sodass Sie es unabhängig von InterSystems IRIS skalieren können. Zum Ausführen von IAM benötigen Sie Zugriff auf InterSystems IRIS, um die Lizenz herunterzuladen.


Konfigurieren Sie InterSystems IRIS:


  • Schalten Sie die Web-App /api/IAM
  • IAM Benutzer aktivieren
  • Ändern Sie das IAM Benutzerkennwort

Führen Sie jetzt den IAM-Container aus. Im Archiv finden Sie iam-setup Skripte für Windows und Unix (und Mac). Mithilfe dieser Skripte können Sie Umgebungsvariablen korrekt einrichten, sodass der IAM-Container eine Verbindung zu InterSystems IRIS herstellen kann. Hier ist ein Beispiel für ein Skript auf dem Mac:


 source ./iam-setup.sh Welcome to the InterSystems IRIS and InterSystems API Manager (IAM) setup script. This script sets the ISC_IRIS_URL environment variable that is used by the IAM container to get the IAM license key from InterSystems IRIS. Enter the full image repository, name and tag for your IAM docker image: intersystems/iam:0.34-1-1 Enter the IP address for your InterSystems IRIS instance. The IP address has to be accessible from within the IAM container, therefore, do not use "localhost" or "127.0.0.1" if IRIS is running on your local machine. Instead use the public IP address of your local machine. If IRIS is running in a container, use the public IP address of the host environment, not the IP address of the IRIS container. xxx.xxx.xxx.xxx Enter the web server port for your InterSystems IRIS instance: 52773 Enter the password for the IAM user for your InterSystems IRIS instance: Re-enter your password: Your inputs are: Full image repository, name and tag for your IAM docker image: intersystems/iam:0.34-1-1 IP address for your InterSystems IRIS instance: xxx.xxx.xxx.xxx Web server port for your InterSystems IRIS instance: 52773 Would you like to continue with these inputs (y/n)? y Getting IAM license using your inputs... Successfully got IAM license! The ISC_IRIS_URL environment variable was set to: http://IAM:****************@xxx.xxx.xxx.xxx:52773/api/iam/license WARNING: The environment variable is set for this shell only! To start the services, run the following command in the top level directory: docker-compose up -d To stop the services, run the following command in the top level directory: docker-compose down URL for the IAM Manager portal: http://localhost:8002 

Wie Sie sehen, sind der vollständige Bildname, die IP-Adresse, der InterSystems IRIS-Port und das Kennwort für den IAM-Benutzer alles, was Sie für den Einstieg benötigen.


Anstatt das Skript auszuführen, können Sie die Umgebungsvariablen manuell festlegen:


 ISC_IAM_IMAGE=intersystems/iam:0.34-1-1 ISC_IRIS_URL=http://IAM:<PASS>@<IP>:<PORT>/api/iam/license 

Starten Sie


Führen Sie nun IAM aus, indem Sie den folgenden Befehl ausführen:


 docker-compose up -d 

Dieser Befehl organisiert die IAM-Container und stellt sicher, dass alles korrekt gestartet wird. Der Status der Container wird mit dem Befehl überprüft:


 docker ps 

Öffnen Sie die Administrationsoberfläche von localhost:8002 in einem Browser.



Bisher ist es leer, da es sich um eine völlig neue Website handelt. Lass es uns ändern. IAM unterstützt das Konzept von Arbeitsbereichen zur Aufteilung der API in Module und / oder Teams. Gehen Sie zum Arbeitsbereich "default", den wir für unsere Experimente verwenden werden.


Standardarbeitsbereich-Symbolleiste


Die Anzahl der Anforderungen für diesen Arbeitsbereich ist immer noch Null, aber Sie erhalten im Menü auf der linken Seite eine Vorstellung von den grundlegenden Konzepten von IAM. Die ersten beiden Elemente: Dienste und Routen sind die wichtigsten:


  • Service - API, die wir den Verbrauchern zur Verfügung stellen möchten. Daher ist die REST-API in InterSystems IRIS ein Dienst, wie beispielsweise die Google-API, wenn Sie sie verwenden möchten.
  • Die Route entscheidet, zu welchem ​​Dienst die eingehenden Anfragen umgeleitet werden sollen. Jede Route hat einen bestimmten Satz von Bedingungen. Wenn diese erfüllt sind, wird die Anforderung an den entsprechenden Dienst gesendet. Beispielsweise kann eine Route mit einer IP, einer Absenderdomäne, HTTP-Methoden, Teilen eines URI oder einer Kombination dieser Beispiele übereinstimmen.

Service


Erstellen wir den InterSystems IRIS-Dienst mit den folgenden Werten:


Das FeldWertBeschreibung
nameIrisServicename
GastgeberIPInterSystems IRIS Server Host oder IP
Hafen52773InterSystems IRIS Server Web Port
Pfad/ api / atelierWurzelpfad
ProtokollhttpProtokoll

Übernehmen Sie die restlichen Werte standardmäßig. Klicken Create Schaltfläche Create und notieren Sie die ID des erstellten Dienstes.


Route


Nun erstellen wir eine Route:


Das FeldWertBeschreibung
Pfad/ api / atelierWurzelpfad
ProtokollhttpProtokoll
service.idGuid von 3Service (ID aus dem vorherigen Schritt)

Übernehmen Sie die restlichen Werte standardmäßig. Klicken Create Schaltfläche Create und notieren Sie die ID der erstellten Route. Standardmäßig wartet IAM auf eingehende Anforderungen an Port 8000. Jetzt werden Anforderungen, die an http://localhost:8000 gesendet werden und mit /api/atelier an InterSystems IRIS umgeleitet.


Testen


Versuchen wir, eine Anfrage in einem REST-Client zu erstellen (ich verwende Postman ).


REST-Anfrage im Postboten


Wir senden eine GET-Anfrage an http://localhost:8000/api/atelier/ (nicht vergessen / am Ende) und erhalten eine Antwort von InterSystems IRIS. Jede Anforderung durchläuft einen IAM, der Metriken sammelt:


  • HTTP-Statuscode.
  • Verzögerung
  • Überwachung (falls konfiguriert).

Ich habe mehrere weitere Anfragen gestellt (einschließlich zweier Anfragen nach nicht vorhandenen Endpunkten, wie z. B. / api / atelier / est /). Die Ergebnisse werden sofort im Dashboard angezeigt:


Dashboard mit einigen Metriken


Arbeite mit Plugins


Nachdem wir die Route konfiguriert haben, können wir unsere API steuern. Wir können Funktionen hinzufügen, die unseren Service ergänzen.


Die häufigste Methode zum Ändern des API-Verhaltens ist das Hinzufügen eines Plugins. Plugins isolieren einzelne Funktionalitäten und können sowohl global als auch nur mit einzelnen Entitäten, wie z. B. Benutzer (Benutzergruppe), Dienst oder Route, mit dem IAM verbunden werden. Wir beginnen mit dem Hinzufügen des Plugins "Ratenbegrenzung" zur Route. Um eine Verbindung zwischen dem Plug-In und der Route herzustellen, benötigen wir eine eindeutige Kennung (ID) für die Route.


Anforderungslimit


Klicken Sie im Menü auf der linken Seite auf Plugins. Sie sehen alle aktiven Plugins auf diesem Bildschirm, aber da dieser IAM-Server neu ist, gibt es noch keine aktiven Plugins. Fahren Sie mit dem nächsten Schritt fort, indem Sie auf "Neues Plugin" klicken.


Das benötigte Plugin befindet sich in der Kategorie "Traffic Control" und heißt "Rate Limiting". Wähle es. Es gibt einige Einstellungen, die Sie hier vornehmen können, aber wir beschäftigen uns nur mit zwei Feldern:


Das FeldWertBeschreibung
route_idIDRouten-ID
config.minute5Anzahl der Anfragen pro Minute

Das ist alles. Das Plugin ist konfiguriert und aktiv. Ich stelle fest, dass wir verschiedene Zeitintervalle wie Minute, Stunde oder Tag auswählen können. Einstellungen können kombiniert werden (z. B. 1000 Anforderungen pro Stunde und gleichzeitig 100 Anforderungen pro Minute). Ich habe das Protokoll gewählt, da es so einfach ist, das Plugin zu überprüfen.


Wenn Sie dieselbe Anfrage erneut an Postman senden, wird die Antwort mit zwei zusätzlichen Headern zurückgegeben:


  • XRateLimit-Limit-Minute: 5
  • XRateLimit-Verbleibende-Minute: 4

Dies teilt dem Kunden mit, dass er bis zu 5 Anfragen pro Minute stellen und im aktuellen Zeitintervall 4 weitere Anfragen stellen kann.


Geschwindigkeitsbegrenzung


Wenn Sie dieselbe Anforderung immer wieder stellen, wird Ihnen am Ende das verfügbare Kontingent ausgehen und Sie erhalten stattdessen einen HTTP-Statuscode 429 mit dem folgenden Antworttext:


API-Überschreitung


Warten Sie eine Minute, und Sie können erneut Anforderungen senden.


Dies ist ein praktischer Mechanismus, mit dem Sie:


  • Schützen Sie das Backend vor Lastspitzen.
  • Teilen Sie den Kunden mit, wie viele Anfragen sie stellen können.
  • Monetize API.

Sie können Werte für verschiedene Zeitintervalle festlegen und so den API-Verkehr für einen bestimmten Zeitraum glätten. Angenommen, Sie erlauben 600 Anfragen pro Stunde auf einer bestimmten Route. Es gibt durchschnittlich 10 Anfragen pro Minute. Nichts hindert den Client jedoch daran, alle 600 Anfragen in der ersten Minute der Stunde zu erledigen. Vielleicht ist das was du brauchst. Möglicherweise möchten Sie innerhalb einer Stunde eine gleichmäßigere Auslastung erzielen. Wenn Sie den Wert des config.minute auf 20 setzen, stellen Sie config.minute , dass Ihre Benutzer nicht mehr als 20 Anforderungen pro Minute und 600 Anforderungen pro Stunde config.minute . Dies ermöglicht kleine Sprünge im Minutenintervall im Vergleich zu einem vollständig gemittelten Datenstrom von 10 Anforderungen pro Minute, aber Benutzer können das Stundenkontingent nicht für eine Minute verwenden. Jetzt benötigen sie mindestens 30 Minuten, um alle ihre Abfragen zu bearbeiten. Clients erhalten für jedes Zeitintervall zusätzliche Header, zum Beispiel:


HTTP-HeaderWert
X-RateLimit-Limit-Stunde600
X-RateLimit-Reststunde595
X-RateLimit-Limit-Minute20
X-RateLimit-Verbleibende-Minute16

Natürlich gibt es viele verschiedene Möglichkeiten, Abfragegrenzen anzupassen, je nachdem, was Sie erreichen möchten.


Schlussfolgerungen


Ich bin der Meinung, dass das Material für den ersten Artikel über den InterSystems API Manager völlig ausreicht. Wir haben nur eines von über 40 Plugins verwendet. Mit IAM können Sie viele weitere interessante Dinge tun:


  • Fügen Sie einen zentralen Authentifizierungsmechanismus für alle Ihre APIs hinzu.
  • Skalieren Sie die Last mit dem Balancer auf mehrere Services.
  • Fügen Sie dem Testpublikum vor einem vollständigen Upgrade neue Funktionen und Fehlerbehebungen hinzu.
  • Stellen Sie internen und externen Entwicklern ein dediziertes Webportal zur Verfügung, das alle APIs dokumentiert.
  • Cache-Anforderungen, um die Antwortwartezeit und die System-Backend-Last zu reduzieren.

Referenzen


Source: https://habr.com/ru/post/de475670/


All Articles