Vor kurzem habe ich für einen unserer Kunden an einem Projekt zum Thema ITSM gearbeitet und wurde gebeten, ServiceNow über seine REST-API mit einem externen System zu integrieren.
Denjenigen unter Ihnen, die ServiceNow nicht kennen, empfehle ich einen Blick auf deren Website. ServiceNow ist eine sehr breit angelegte Technologieplattform, mit der Sie digitale Workflows für fast jeden Bereich Ihres Unternehmens erstellen können. In diesem Fall habe ich das Vorfallsystem (Ticketing) mit einer externen Partei integriert, um einen besseren Workflow für beide Parteien zu schaffen.
Nun könnten Sie sich fragen, wie Sie dies mit den vorhandenen WSO2-Produkten bewerkstelligen können. Für eine sichere Umsetzung nehmen wir den WSO2 API Manager (APIM), um den Datenverkehr und die Sicherheit zu verwalten, den WSO2 Identity Server (IS), um die Authentifizierung (oder Autorisierung) zu handhaben, und den WSO2 Enterprise Integrator (EI), um all die verschiedenen Vermittlungsszenarien zu den verschiedenen Endpunkten zu handhaben.
In unserem Fall werden Informationen sowohl von ServiceNow an das externe System als auch in umgekehrter Richtung weitergeleitet. Ich beschreibe diese separat, da sie in Bezug auf die Authentifizierung mit ServiceNow etwas anders funktionieren.
ServiceNow-Integration in ein externes System
Innerhalb von ServiceNow können Sie Skripte schreiben, die Ihrem Anwendungsfall entsprechen. Wir wollten die Integrationsplattform auslösen, wenn ein neuer Vorfall erstellt wird. Damit das funktioniert, musste es so konfiguriert werden, dass die Authentifizierung zwischen den beiden Programmen lückenlos ist. Die Authentifizierung kann in ServiceNow auf zwei Arten erfolgen: Basisauthentifizierung (mit der Option der gegenseitigen Authentifizierung über bestimmte Profile in ServiceNow) und OAuth2.0 in verschiedenen Konfigurationen.
Für den ausgehenden Datenverkehr können Sie einen OAuth2.0-Provider in ServiceNow einrichten, der zur Authentifizierung mit dem WSO2 APIM über WSO2 IS verwendet werden kann. Dieser Provider wird mit WSO2 IS verknüpft, wo er die Token abruft, die zur Authentifizierung der in WSO2 APIM eingehenden Anforderung verwendet werden. Nachdem die Verbindung hergestellt und das Token auf dem APIM validiert wurde, kann die Nutzlast der Nachricht über die entsprechende API, die von ServiceNow aufgerufen wird, an die WSO2 EI weitergeleitet werden.
Innerhalb des WSO2 EI-Produkts können Sie den Enterprise Service Bus für die Nachrichtenvermittlung nutzen, um die erforderlichen Nutzdaten für das externe System Ihrer Wahl zu erstellen, indem Sie die Nachricht von JSON in XML oder ein anderes Format umwandeln, während Sie arbeiten. Um sicherzustellen, dass diese Nachrichten ankommen, können Sie eine garantierte Zustellung mit einer Messaging-Komponente wie Apache ActiveMQ einrichten.
Integration externer Systeme in ServiceNow
Für das Senden von Daten an ServiceNow funktioniert der Ablauf ähnlich, aber es gibt einige Änderungen. In unserem Anwendungsfall haben wir das externe System nach neuen Daten abgefragt, aber dieselbe Integration ist auch mit einer externen Partei möglich, die aktiv die Integrationsplattform aufruft. Einziger Unterschied ist, dass Sie eventuell eine zusätzliche API-Operation hinzufügen, die der externe Partner aufrufen kann.
Ich gehe in diesem Fall einfach davon aus, dass die WSO2 EI die Daten bereits abgerufen hat, da die Verbindung zur externen Partei nicht Gegenstand dieses Blogs ist und es sich um fast jedes beliebige System auf der Welt handeln könnte. Angenommen, Sie erhalten eine Nachricht mit einem Benutzernamen, einem Titel und einer Beschreibung vom externen System, die Sie verwenden möchten, um einen Vorfall in ServiceNow zu erstellen, der dem spezifischen Benutzernamen zugeordnet ist.
Dieser Vorgang erfordert zwei separate Aufrufe der ServiceNow REST API:
- Eine GET-Anfrage an die ServiceNow-Benutzertabelle zum Abrufen der Benutzerkennung
- Eine POST-Anfrage an die ServiceNow-Vorfallstabelle
Um die API aufrufen zu können, wird jedoch ein Zugriffstoken benötigt. Dies kann auch über die REST-API abgerufen werden, aber statt einen oAuth2.0-Anbieter einzurichten, müssen Sie einen OAuth2.0-Client erstellen und die vom Client bereitgestellte Kombination aus Client Secret und Client Id für den Abruf eines Tokens über die EI verwenden. Nach der Einrichtung der Authentifizierung können Sie mit der Verwendung der REST-API beginnen. Die ServiceNow REST API verfügt über eine umfangreiche Funktionalität und ist (meiner Meinung nach) sehr gut in Kombination mit den WSO2-Produkten zu verwenden, da es einfach ist, die Nachrichtenformate zu vermitteln und die richtigen Aufrufe an die API einzurichten, um die gewünschten Daten abzurufen. Dazu ist lediglich eine gewisse Recherche erforderlich, welche Daten sich in welcher Tabelle befinden. Dank der umfangreichen ServiceNow-Dokumentation und dem REST-API-Explorer ist dies nicht schwer zu finden.
Zum Abschluss des Beispiels müssen wir die Benutzer-ID eines Benutzers abrufen, während wir nur den Benutzernamen haben. Die GET-Anfrage-URL würde etwa so aussehen:
GET <em>https://{ServiceNowHost}/api/now/table/sys_user?sysparm_query=user_name={the username}</em>
Dies gibt einen JSON-Payload mit verschiedenen Details des Benutzers, einschließlich der ID, zurück.
Nach dem Extrahieren der ID aus dem Antwort-Payload können Sie damit beginnen, den Payload für die Erstellung eines Vorfalls zusammenzustellen.
Diese würde etwa so aussehen:
{ "caller_id":"The user id", "short_description":"The Title", "description":"The description" }
Mit dem entsprechenden Endpunkt:
POST <em>https://{ServiceNowHost}/api/now/table/incident</em>
Nach der Übermittlung des korrekten Payloads an den Endpunkt gibt ServiceNow einen Incident-Payload mit einer Incident-Nummer und einer Incident-ID zurück, um zu bestätigen, dass der Incident erfolgreich erstellt wurde.
Das Beispiel ist damit abgeschlossen, es gibt natürlich noch viele weitere Möglichkeiten mit diesem Setup, während der beiden beschriebenen Abläufe. Dabei muss es nicht bei einem einzigen Informationsaufruf bleiben, wenn mehrere notwendig sind, ist auch das möglich. Falls dieser Blog bei Ihnen Fragen aufwirft, zögern Sie nicht, diese in den Kommentaren zu stellen oder uns über einen unserer anderen Kanäle zu kontaktieren.