Sozial integriert

Für soziale Netze wie Facebook und Google+ gibt es Programmierschnittstellen, über die externe Programme auf Nutzerdaten zugreifen können. Seit Kurzem bietet das deutsche XING ebenfalls eine solche API.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 14 Min.
Von
  • Oliver Höß
  • Jürgen Falkner
  • Mohammed Shohrab Uddin
  • Anette Weisbecker
Inhaltsverzeichnis

Im privaten wie im beruflichen Umfeld vieler Menschen haben soziale Netze eine riesige Bedeutung erlangt. XING liegt in Deutschland im professionellen Kontext mit über sechs Millionen Nutzern (13 Millionen weltweit) gut im Rennen, was unter anderem eine hohe Anzahl zahlender Premium-Nutzer dokumentiert [a].

Durch die Integration der in sozialen Netzen enthaltenen statischen und dynamischen Daten (Nutzerdaten, Kontakte, Jobangebote, Nachrichten et cetera) und Funktionen (Login, Nachrichten oder Status-Updates senden) in eigene Applikationen können Entwickler vielfach neue Anwendungspotenziale erschließen.

Aus diesem Grund hat XING zum Jahreswechsel 2012/2013 den Zugriff für externe Applikationen über eine öffentlich verfügbare API freigegeben. Durch sie können Entwickler die Daten und Funktionen von XING in eigenen Applikationen nutzen. Fürs Erstellen einer Beispielanwendung dienen im Folgenden die Google App Engine (GAE) und das Google Web Toolkit (GWT).

Die in XINGs App Gallery präsentierten Anwendungen, die schon die API nutzen (Abb. 1)

Durch die vorgeschaltete fast einjährige Beta-Testphase, die nur für einen eingeschränkten Teilnehmerkreis verfügbar war, wurden schon eine Reihe interessanter Anwendungen entwickelt, die die API nutzen. Eine Auswahl davon ist in der Gallery der Developer-Seite dargestellt [b]. Beispiele für Anwendungen in der App Gallery, ohne Anspruch auf Vollständigkeit, sind

– eine Integration mit einem Bewerber-Management-System, mit dem Job-Angebote direkt auf XING gepostet werden können und mit dem sich die Bewerber mit ihren XING-Daten auf das Angebot bewerben können (Promerit XING Connector),

– eine Integrationslösung für das weitverbreitete Cloud-basierte Customer Relationship Management System Salesforce.com, sodass die Daten aus XING dort verfügbar sind (Connect for XING),

– eine mobile Lösung fürs Orten von XING-Kontakten, die momentan in der Nähe sind (Radar for XING),

– die mobilen Apps von XING, die ebenfalls die öffentliche API nutzen.

XINGs API stellt die wesentlichen Daten und Funktionen der Plattform für die externe Nutzung zur Verfügung. Aus Gründen der Übersichtlichkeit ist die API in unterschiedliche funktionale Bereiche gegliedert (Profile, Kontakte, Nachrichten et cetera), sodass sich der Nutzer der API gut darin zurechtfinden kann (siehe Tabelle „Funktionale Bereiche der XING-API“).

Die Nutzung der API aus technischer Sicht erfolgt durch bewährte Webtechniken. Die einzelnen Funktionen stehen als RESTful Services (Representational State Transfer) zur Verfügung, die entweder XML-Daten (Extensible Markup Language) oder, im Standard, das kompaktere JSON-Format zurückliefern (JavaScript Object Notation).

Mit dem API Explorer kann man die XING-API testen, hier durch das eigene Profil (Abb. 2).

Über den auf der Developer-Seite integrierten API Explorer können Programmierer alle Aufrufe komfortabel testen. Sie können die für die jeweilige Funktion relevanten Parameter angeben und wählen, ob die Ausgabe in JSON oder in XML erfolgen soll. In Abbildung 2 ist beispielhaft der Abruf des eigenen Profils dargestellt, bei dem die aus der gewohnten XING-Webanwendung bekannten Felder zurückgegeben werden. Die konkrete Reihenfolge der Felder kann sich von Aufruf zu Aufruf ändern.

Die Authentifizierung und Autorisierung erfolgt nach dem im Web-Umfeld verbreiteten OAuth-Verfahren in der Version 1.0 [c]. OAuth stellt einen Token-basierten Mechanismus zur Verfügung, mit dem ein Service-Provider (in diesem Fall XING) einem Nutzer über eine externe Applikation (Consumer) einen sicheren Zugriff auf seine Daten ermöglichen kann. In der Regel ist es sinnvoll, die OAuth-Mechanismen durch eine geeignete Bibliothek zu abstrahieren (siehe die Beispielanwendung).

Um den Zugriff auf die API zu testen, wurde mit ShowMyContacts eine Anwendung entwickelt, mit der ein Nutzer die (beruflichen) Standorte seiner Kontakte in einer Google-Karte anzeigen lassen kann. Diese Funktion war vor einigen Jahren in XING integriert, die Firma hat sie jedoch wieder entfernt. Da viele Nutzer diese Funktion vermissten, bot sie sich als Beispielanwendung an. Sie ist über die öffentliche Seite der Google App Engine Appspot.com [d] verfügbar.

ShowMyContacts fußt auf Googles App Engine, die den Vorteil besitzt, dass man kostenlos Java- und Python-Anwendungen öffentlich bereitstellen kann (zur GAE und anderen Tools siehe „Alle Links“). Für ShowMyContacts kam Java zum Einsatz. In diesem Kontext bietet es sich an, als Web-Framework das Google Web Toolkit (GWT) einzusetzen, das es ermöglicht, Webanwendungen in reinem Java zu entwickeln und somit die Vorteile der Sprache wie Typsicherheit sowie eine Vielzahl nützlicher Bibliotheken zu nutzen. Aus einem Teil des Java-Codes generiert ein Cross Compiler den clientseitigen JavaScript-Code für unterschiedliche Browser, sodass eine interaktive Webanwendung entsteht. In Java beziehungsweise GWT stehen unter anderem komfortable Bibliotheken zur Nutzung der Google-Maps-API zur Verfügung, sodass die Erzeugung und Ansteuerung der Karten ebenfalls in reinem Java erfolgen kann, das wiederum der Cross Compiler des GWT in JavaScript umsetzt.

Eine Google-Karte zeigt die XING-Kontakte eines Anwenders (Abb. 3).

Nutzer bedienen die Anwendung im Browser, der über den GWT-RPC-Mechanismus (Remote Procedure Call) Daten vom ShowMyContacts-Server abruft. Dieser wiederum ruft die Daten über die API ab und sendet sie asynchron zurück an den Client. Die Ansteuerung der Google-Dienste (das heißt die Maps-API für die Darstellung der Karte, die Charts-API für die der Symbole und die Geocoding-API für die Lokalisierung der Adressen) erfolgt aus dem generierten JavaScript im Client.

Aus Sicherheitsgründen ist darauf zu achten, dass keine sicherheitsrelevanten Informationen (vor allem die API-Zugriffs-Keys) in den generierten JavaScript-Code auf dem Client gelangen. Obwohl man im GWT den JavaScript-Code verschleiern kann (Obfuscation), wäre sonst eine einfach zu nutzende Sicherheitslücke vorhanden.

Um XINGs API nutzen zu können, müssen Entwickler gemäß dem OAuth-Verfahren zuerst die Zugangsdaten für die zu entwickelnde Anwendung von XING beziehen. Diese bestehen aus einem Consumer Key, der die Applikation identifiziert, sowie aus einem Consumer Secret, das, wie der Name sagt, geheim bleiben muss. Dafür muss man Angaben zur Anwendung (URL, Kurzbeschreibung, Nutzungsrichtlinien, Name und Adresse des Betreibers) machen. XING unterscheidet zwischen Test- und Produktionszugangsdaten und empfiehlt, zuerst die Applikation mit den Testzugangsdaten zu entwickeln und zu testen. Dabei können Programmierer alle funktionalen Bereiche der API nutzen, sie erhalten jedoch stark verfremdete Daten zurückgeliefert.

Funktionale Bereiche der XING-API

Ist die Applikation weitgehend fertig, kann man den Produktivzugang beantragen, bei dem man explizit die in der Anwendung benötigten API-Funktionen angeben muss, die der Endanwender später bei der Nutzung (analog zu mobilen Apps) ebenfalls freigeben muss. Gewährt XING den Produktivzugang, erhält man zwei PINs zugesendet, die wiederum den Zugriff auf den Produktivschlüssel beziehungsweise das Produktivgeheimnis ermöglichen. Die zweite PIN kommt nach einer manuellen Prüfung per Briefpost, sodass gleichzeitig eine Verifizierung der hinterlegten Anschrift erfolgt.

Nach erfolgreicher Registrierung (Test beziehungsweise Produktion) können Entwickler die einzelnen Funktionen der XING-API aufrufen. Dabei müssen sie den durch das OAuth-Protokoll vorgegebenen Ablauf einhalten. Um an dieser Stelle die technische Komplexität zu reduzieren, verwendet XING die Open-Source-Bibliothek Scribe [e], die die OAuth-Funktionen in Java kapselt und vordefinierte Klassen für die Nutzung der XING-API und anderer Dienste wie Facebook, LinkedIn, Google und Twitter bietet.

ShowMyContacts-Architektur: XING- und Google-Server liefern Daten, die der Server und der Client der Anwendung anfordern (Abb. 4).

Die für den Aufruf einzelner Funktionen der XING-API notwendigen Verfahren stellt ein Ausschnitt aus dem serverseitigen Java-Code dar (XINGAccess.java). In einem vorbereitenden Schritt muss der Scribe-Dienst konfiguriert werden. Dabei muss man unter anderem den API-Key, das API-Secret sowie die Callback-Adresse der eigenen Seite (in diesem Fall ShowMyContacts) übergeben.

In Schritt 1 (dieser und die folgenden Schritte sind im Listing und in Abbildung 5 nachzulesen) fordert man das sogenannte Request Token bei XING auf Basis dieser Daten an. Im positiven Fall, das heißt wenn die übergebenen Daten in Ordnung sind, kann über Scribe die sogenannte Authorization URL gebildet werden. Die Basis-URL für die XING-Autorisierung ist schon in der entsprechenden Klasse in Scribe hinterlegt. In Schritt 2 „wandert“ der Nutzer zur Authentifizierung auf die Login-Seite von XING für die jeweilige Applikation weiter, in diesem Fall ShowMyContacts. Der Login-Schritt entfällt, wenn man, wie viele häufige Nutzer, dauerhaft in XING eingeloggt ist.

Ist die Authentifizierung erfolgreich, landet der Benutzer bei der erstmaligen Nutzung der Anwendung auf der Autorisierungsseite. Dort bekommt er Informationen zur Applikation sowie die benötigten Berechtigungen für sie angezeigt. Wenn der Nutzer dies bestätigt, geht’s weiter. Im XING-Profil kann man sich unter „Einstellungen -> Privatsphäre“ anzeigen lassen, welchen Applikationen der Zugriff gewährt wurde. Bei Bedarf kann man diesen Applikationen dort den Zugriff wieder entziehen. Bei Applikationen im Testmodus werden immer alle Rechte gewährt, allerdings unter Verwendung verfälschter Daten.

Nach einer erfolgreichen Authentifizierung beziehungsweise Autorisierung leitet XING den Nutzer wieder auf die in der Callback-URL angegebene Webseite weiter. In der Regel ist das die, von der der Vorgang gestartet wurde. Aus Sicherheitsgründen überprüft XING, dass die Callback-URL mit der URL übereinstimmt, die man bei der Beantragung des Produktiv-Key hinterlegt hat.

Wie Pingpong gestalten sich die Anfragen an den XING-Server und die Antworten an die Anwendung (Abb. 5).

Bei dieser Weiterleitung wird ein zusätzlicher URL-Parameter Verifier übergeben, der zusammen mit dem Request Token dazu dient, das sogenannte Access Token abzurufen (Schritt 3). Erst dieses Token erlaubt den Zugriff auf die fachlichen Funktionen der API, da erst hier sichergestellt ist, dass der Nutzer authentifiziert ist und er der Applikation die benötigten Rechte zugesteht. Ebenso kann man den Verifier manuell übergeben (Out-Of-Band-Autorisierung, OOB), was jedoch für den Endanwender in der Regel nicht akzeptabel ist, da er in diesem Fall den Verifier manuell in die Consumer-Applikation übertragen muss.

In Schritt 4 kann man daher mit dem Access Token einen Aufruf an die API zum Zugriff auf die geschützten Ressourcen absetzen. Der Aufruf liefert ein Ergebnis-Objekt zurück (Response), das je nach Konfiguration eine XML-Datenstruktur oder eine JSON-Struktur ist. In der Beispielapplikation ist das JSON. Schritt 5 beschreibt, wie die zurückgelieferten Daten zu verarbeiten sind. Das Open-Source-Framework Jackson [f] dient dazu, die Verarbeitung der JSON-Daten (in Java) zu bewerkstelligen und zu vereinfachen. Eine nützliche Seite in diesem Zusammenhang ist jsonschema2pojo [g], die hilft, aus JSON-Schemata oder komplexen JSON-Beispielobjekten Java-Wrapper-Klassen zu erzeugen, die man durch den Jackson-ObjectMapper aus dem JSON-Datenstrom füllen kann. Anschließend kann man auf die einzelnen Subobjekte oder Attribute komfortabel aus Java zugreifen. Das Codebeispiel gibt den Anzeigenamen des Kontakts aus, der auch in XING erscheint.

Zur Darstellung der Kontakte muss die Anwendung sie auslesen; dabei kann man jedoch das schon erworbene Access Token verwenden. Für die Darstellung im engeren Sinne dienen Googles Maps-API und die darin enthaltene Geocoding-API. Die Maps-API ist in GWT durch Module komfortabel gekapselt. Fürs Generieren der für die Darstellung der Marker notwendigen dynamischen Bilder kommt Googles Charts-API zum Einsatz.

Um eine parallele Nutzung durch mehrere Anwender mit unterschiedlichen Zugangsdaten zu ermöglichen, muss serverseitig eine Sessionverwaltung vorhanden sein, die auf Basis der HTTP-Sessions die Zugangsdaten verwaltet, da der Server diese aus Sicherheitsgründen nur temporär zwischen den einzelnen Aufrufen im Speicher hält. Die Login-Daten (Name und Passwort) der einzelnen Nutzer gelangen überhaupt nicht zur Anwendung, sondern werden ausschließlich in dem von XING bereitgestellten Authentifizierungsdialog eingegeben.

Bei der Entwicklung von Anwendungen, die die XING-API nutzen, sollte man die Nutzungsbedingungen genau studieren, da XING sonst gegebenenfalls den Produktivzugang nicht freischaltet. Auf der Entwicklerseite [b] finden sich Vorgaben hinsichtlich der Benennung und der grafischen Gestaltung einer Applikation: Sie darf beispielsweise nicht vorgeben, selbst XING zu sein, muss allerdings die Login-Buttons von XING verwenden.

Mehr Infos

iX-TRACT

  • Das Business-Netz XING erlaubt Entwicklern, über eine Schnittstelle auf Daten der Nutzer zuzugreifen, wenn Letztere das erlauben.
  • Mittels REST überträgt der Server entweder XML- oder JSON-Daten.
  • Für die Sicherheit der Daten muss die Authentifizierung über OAuth 1.0 laufen.
  • Eine Beispielanwendung zeigt die eigenen Kontakte auf einer Landkarte an.

Des Weiteren bestehen Einschränkungen bezüglich der Anzahl der API-Aufrufe pro Minute, Stunde und Tag bezogen auf einzelne Endanwender (User) beziehungsweise auf die gesamte Applikation (Consumer). Für erste Testanwendungen sind diese Beschränkungen (etwa 120 Requests pro User pro Minute) auf jeden Fall ausreichend.

Da die API unabhängig von der Implementierungstechnik der Consumer-Applikation und seit einiger Zeit zumindest für Closed-Beta-Entwickler verfügbar ist, finden sich im Internet neben ersten fertigen Anwendungen eine Reihe von Frameworks und Codebeispielen für den Zugriff auf die API aus anderen Umgebungen, beispielsweise aus PHP, Ruby oder iOS. Die Beispiele auf der Entwicklerseite von XING sind üblicherweise in Ruby dargestellt, da die Plattform überwiegend diese Sprache verwendet.

Bei der Entwicklung der Beispielanwendung hat sich ergeben, dass die API stabil und gut dokumentiert ist. Sie befindet sich zwar noch in der (Weiter-)Entwicklung, es ist jedoch ermutigend, dass die mobilen Applikationen von XING selbst die Schnittstelle nutzen. Da sie in einer lebenden Plattform niemals vollständig eingefroren werden kann, ist für die Zukunft mit weiteren Änderungen zu rechnen. XING will diese Änderungen jedoch in der Regel abwärtskompatibel gestalten. In Zukunft nicht mehr zu nutzende Funktionen will die Firma frühzeitig als überholt (deprecated) kennzeichnen.

Eine spannende Informationsquelle für APIs im Internet ist in diesem Zusammenhang die Seite ProgrammableWeb [i]. Des Weiteren haben sich in den letzten Jahren eine Reihe sogenannter API-Management-Plattformen wie Mashery oder 3Scale entwickelt (siehe „Alle Links“), die Unternehmen die Infrastruktur bieten, ihre APIs zu veröffentlichen und zu verwalten. Intel hat beispielsweise im April 2013 Mashery für einen beträchtlichen Betrag übernommen, was die Bedeutung dieses Themas unterstreicht.

ist Professor für Wirtschaftsinformatik sowie Leiter des Labors für Unternehmenssoftware an der Hochschule für Technik Stuttgart (HFT Stuttgart).

ist Leiter des Competence Teams Softwaretechnik am Fraunhofer IAO sowie Sprecher der Fraunhofer-Allianz Cloud Computing.

ist Student im internationalen Master-Studiengang Software Technology an der HFT Stuttgart.

ist Institutsdirektorin sowie Leiterin des Geschäftsfelds Informations- und Kommunikationstechnik am Fraunhofer IAO.

Alle Links: www.ix.de/ix1307146

Mehr Infos

Listing: Nutzung der XING API in Java unter Verwendung der Scribe-Bibliothek

// Serverseitiger Java-Code 
// zur Übersicht ohne Rahmencode, Exceptions und Fehlerbehandlung

// Konstanten

// KEY 20 Zeichen
private static final String APIKEY = "xxxxxxxxxxxxxxxxxxxx";      
// SECRET 40 Zeichen
private static final String APISECRET = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; 
// URL der aufzurufenden XING-Funktion  
private static final String PROTECTED_RESOURCE_URL = "https://api.xing.com/v1/users/me";  
// Callback URL (wird durch XING überprüft)
private static final String CALLBACK ="http://showmycontacts.appspot.com/";   

// Konfiguration des Scribe-OAuth-Service-Objekts (Method Chaining)
OAuthService service = new ServiceBuilder()
.provider(XingApi.class)
.apiKey(APIKEY)
.apiSecret(APISECRET)
.callback(CALLBACK).build();

// Schritt 1: Request Token anfordern
Token requestToken = service.getRequestToken();

// Autorisierungs-URL konstruieren
String authURL = service.getAuthorizationUrl(requestToken);

// Schritt 2: Nutzer im Client zur XING Autorisierungs-Seite weiterleiten
// Erfolgt auf Client-Seite und ist hier nicht dargestellt
// In GWT einfach mit Window.Location.assign(authURL);

// Schritt 3: Nach erfolgter Autorisierung 
// Verifier clientseitig aus URL extrahieren (String v) und Access Token anfordern
// Extraktion erfolgt auf Client-Seite und ist hier nicht dargestellt
Verifier verifier = new Verifier(v);
Token accessToken = service.getAccessToken(requestToken, verifier);

// Schritt 4: Abfrage der geschützten Ressourcen
// Hier: eigenes Profil
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
service.signRequest(accessToken, request);
Response response = request.send();

// Schritt 5: Verarbeitung der Informationen
// Verarbeitung des komplexen JSON-Objects durch generierte Jackson-Objekte
ObjectMapper mapper = new ObjectMapper();
jackson.Users users = mapper.readValue(response.getBody(),jackson.Users.class);

// Zum Test Anzeigename ausgeben (Titel, Vorname, Nachname)
System.out.println(users.getUsers().get(0).getDisplay_name());


      

      

      

    

(hb)