Was ist eine API
Eine API (Application Programming Interface) ist eine Programmierschnittstelle. Beziehungsweise ein Satz von Befehlen, Funktionen, Protokollen und Objekten, die zwei unterschiedliche Systeme verbindet. Eine solche Schnittstelle wird also von einer Software (A) zur Verfügung gestellt, damit Software (B) und Software (A) miteinander kommunizieren können. Solche Abfragen finden standardmässig mit REST oder SOAP statt. Als Protokoll wird HTTP verwendet. Gängige Formate, die bei einem «API Request» ausgegeben werden sind HTML, XML, Plain Text oder JSON. Wobei JSON heutzutage die bevorzugte Ausgabe ist, da dieses Format von praktisch allen Programmiersprachen verstanden werden kann. Mehr zu der Deserialisierung von JSON gibt es im vorherigen Teil 2 zu lesen:
https://routinuum.ch/deserialisierung-mit-rpa-teil-2-json/
Es gibt verschiedene API-Typen:
Private API | Ausschliesslich intern oder innerhalb eines Netzwerk |
Partner API | Benötigt spezifische Rechte, Lizenzen, etc |
Public API | Öffentliche API, oft wird ein «Authentication Token» benötigt |
Aktivität „HTTP Request“
Um eine API Abfrage zu tätigen ist das Aktivitätenpaket «UiPath.WebAPI.Activities» notwendig (siehe vorhergehende Blogposts zu XML und JSON). Darin ist neben dem XML und JSON Deserializer auch ein «HTTP Request» und «SOAP Request» enthalten. Sobald die Aktivität „HTTP Request“ in den Prozess gezogen wird, öffnet sich ein Wizard zur Konfiguration des HTTP Request.
Hier wird als Endpoint die API Adresse benötigt inklusive Key. Im obigen Beispiel wird eine Public API der NASA verwendet (über folgenden Link können bei NASA API-Keys generiert werden: https://api.nasa.gov/). Mit Preview kann in das Register „Response“ gewechselt werden, wo bereits die API-Abfrage ersichtlich ist. Daraus ebenfalls ersichtlich ist, dass die API-Abfrage das „Astronomy Picture of the Day“ (APOD) von heute zurückgibt. Die weiteren Optionen sind einfacher direkt in den Eigenschaften der Aktivität zu konfigurieren und werden nachfolgend detailliert erklärt.
Eigenschaften HTTP-Request
Für APIs gibt es normalerweise Dokumentationen. Aus diesen Dokumentationen geht hervor wie eine Abfrage (Query / Request) aufgebaut ist, welches Format verwendet werden kann, wie die Authentifizierung funktioniert, sowie ob und welche Parameter, Header oder weitere Optionen verfügbar sind. Auf der NASA API Webseite sind diese bestens dokumentiert. Die wichtigsten Eigenschaften für eine GET-Abfrage sind in untenstehender Grafik markiert und werden nachfolgend erläutert.
Input (1)
AcceptFormat
Unter Input kann das Format hinterlegt werden. Gemäss der NASA API wird hier das moderne JSON Format verwendet, weitere Formate sind ANY, XML und Custom.
EndPoint
Der Endpoint wurde bereits im Wizard definiert, kann alternativ aber auch hier eingetragen werden. NASA gibt vor, dass der EndPoint wie folgt aussieht:https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY
Methode
Es gibt verschiedene Methoden, die gängigen Methoden sind GET, POST, PUT und DELETE, welche sich nach CRUD richten. Mit GET wird eine normale Abfrage getätigt.
OAuth1 (2)
ConsumerKey
Da es sich um eine öffentliche API (Public API) handelt, wird lediglich der API Key (hier ConsumerKey) benötigt. Dieser wird bei der Anmeldung am NASA API Dienst direkt generiert. Bei anderen Diensten (z.B. Google) ist dieser hinter einem Login abrufbar, damit die Abfragen verrechnet werden können.
Options (3)
Aus der API-Dokumentation geht hervor, welche Optionen zur Verfügung stehen. In der NASA API Dokumentation steht, dass nur „GET“ Methoden zugelassen sind. Zudem kann nach folgenden „Query Parameter“ eine Abfrage erstellt werden.
Testweise, um zu sehen ob das richtige Resultat bei der Abfrage herauskommt, kann die Abfrage vorab auch manuell erstellt werden. Zuerst benötigen wir den EndPoint mit API-Key (https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY
) und können die Abfrage um ein spezifisches Datum (1. Oktober 2021) &date=2021-10-01
(YYYY-MM-DD) ergänzen. Fertig würde die Abfrage also wie folgt aussehen: https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2021-10-01
. Bei erfolgreicher Abfrage kann ein Parameter unter „Parameter“ in den Optionen eingetragen werden:
Result (4)
Unter Result kann eine Ausgabe-Variabel (CTRL + K) erstellt werden. Somit wird aus dem Prozess eine Variabel als Typ String herausgereicht. Diese String-Variabel sollte bei gleicher Einstellung dasselbe Resultat ergeben, wie die manuelle Abfrage von oben auf der API JSON Webseite von NASA. In unserem Test hier erhalten wir folgendes Resultat für das Datum 1. Oktober 2021:
Das JSON-Format ist also in der String-Variabel integriert. Mit dieser Variabel kann jetzt eine Deserialisierung vorgenommen werden. Die Deserialisierung von JSON oder auch XML werden in den beiden vorgehenden Teilen bestens erklärt:
Abschluss Deserialisierung
Mit APIs können also Daten von Schnittstellen in gängigen Formaten abgefragt werden. Die Formate werden deserialisiert und können anschliessend weiterverwendet werden. So könnte beispielsweise eine API-Abfrage auf eine öffentliche Adressdatenbank (z.B. Staat) sicherstellen, dass die Stammdatenqualität in einem Unternehmen weiterhin aufrecht erhalten wird. Indem ein RPA-Bot angepasste Firmendaten an eine zuständige Person meldet und diese nur noch verifizieren muss, ob diese Änderungen in Ordnung sind. Die Möglichkeiten von RPA in Verbindung mit APIs sind sehr mächtig und vorallem sehr performant. Habt Ihr weitere Fragen oder Unklarheiten im Zusammenhang mit der RPA-Abfrage von APIs? Wir freuen uns über Eure Kommentare und stehen bei Fragen gerne zur Verfügung.