7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Web Development

Wie man einen Webdienst in wenigen Minuten erstellt

Read Time: 12 mins

German (Deutsch) translation by Federicco Ancie (you can also view the original English article)

Zweimal im Monat besuchen wir einige der Lieblingsbeiträge unserer Leser aus der gesamten Geschichte von Nettuts+. Dieses Tutorial wurde erstmals im Juli 2010 veröffentlicht.

Es ist eine großartige Idee, Ihre Inhalte oder Logik als Service im Web anzubieten. Für den Anfang können Sie zahlreiche Front-Ends für Ihre eigenen Informationen erstellen, ohne ständig auf die Datenbanken zugreifen zu müssen (und so die Skalierung Ihres Systems erheblich vereinfachen).

Das noch praktischere Ergebnis ist, dass Sie den Leuten im Web erlauben, mit Ihren Informationen zu spielen und Dinge zu bauen, von denen Sie noch nie geträumt haben. Viele Unternehmen verstehen, dass diese "Crowd-Sourcing-Innovation" ein Werbegeschenk ist, das zu gut ist, um es zu verpassen, weshalb es so viele großartige APIs gibt.

Die Bereitstellung einer API für die Welt ist jedoch eine ganz andere Geschichte. Sie müssen wissen, wie Sie Ihre Server skalieren, Sie müssen für die Beantwortung von Fragen durch Implementierer da sein und Sie müssen eine gute Dokumentation führen, damit die Benutzer Ihre Inhalte verwenden können. Sie müssen auch über eine gute Caching-Strategie nachdenken, um zu verhindern, dass Ihre Server in die Luft jagen, und Sie müssen einen Weg finden, den Zugriff auf Ihr System zu beschränken, um zu vermeiden, dass Benutzer es missbrauchen. Oder machen Sie?


Geben Sie YQL ein

Yahoo bietet ein System für den Zugriff auf ihre APIs, die Yahoo Query Language (YQL). YQL ist eine Sprache im SQL-Stil, die Informationen im Web in virtuelle Datenbanken umwandelt, die von Endbenutzern abgefragt werden können. Wenn Sie beispielsweise im Internet nach dem Begriff "elephant" suchen möchten, müssen Sie lediglich die folgende Anweisung verwenden:

Sie senden diese Anweisung an einen Datenendpunkt und erhalten sie entweder als XML, JSON oder JSON-P zurück. Sie können weitere Ergebnisse anfordern und diese filtern, indem Sie definieren, was Sie zurückerhalten möchten:

Mischen und Anpassen

Alle Yahoo-APIs sind über diese Schnittstelle verfügbar, und Sie können Dienste mit Unterauswahlen kombinieren. Sie können beispielsweise ein Keyword-Analyse-Werkzeug über die Zusammenfassung einer Websuche ausführen, um relevante Keyterms zu finden. Mit den unique() Funktionen können Sie auch leicht falsch positive Ergebnisse entfernen.

Die Ergebnisse dieser komplexeren Abfrage finden Sie hier.

Keywords extracted from the abstract of search resultsKeywords extracted from the abstract of search resultsKeywords extracted from the abstract of search results

Die Konsole

Der einfachste Weg, mit YQL als Verbraucher zu spielen, ist die Verwendung der Konsole unter http://developer.yahoo.com/yql/console/. Dort können Sie auf verschiedene Tabellen klicken, um eine Demo-Abfrage zur Verwendung anzuzeigen. Wenn Sie auf den desc-Link klicken, erfahren Sie, welche Optionen Ihnen zur Verfügung stehen.


YQL-Grenzen

Die Verwendung von YQL hat einige Grenzen, die in der Dokumentation beschrieben sind. Im Wesentlichen können Sie pro IP 1.000 Mal pro Stunde auf den Open Data-Endpunkt zugreifen. Wenn Sie eine Anwendung mit oAuth authentifizieren, erhalten Sie 10.000 Treffer pro Stunde. Jede Anwendung darf 100.000 Treffer pro Tag erzielen.

Dies und das Zwischenspeichern von Ergebnissen, die YQL automatisch ausführt, bedeutet, dass die Daten nur angefordert werden, wenn sie geändert werden. Dies bedeutet, dass YQL eine Art Firewall für Anfragen an die Daten ist, die die Benutzer damit anbieten.

Seien Sie vorsichtig, wenn Sie jQuerys "$.getJSON" und eine anonyme Funktion als Rückruf verwenden. Dies kann die Caching-Fähigkeiten von YQL beeinträchtigen und die Leistung beeinträchtigen.


Erstellen von Webdiensten mit offenen Tabellen

Das wirklich Coole für Sie als Anbieter ist, dass YQL für andere Datenanbieter offen ist.

Wenn Sie der Welt eine API anbieten möchten (oder nur eine intern für sich haben möchten), können Sie dies einfach tun, indem Sie eine "offene Tabelle" schreiben, bei der es sich um ein XML-Schema handelt, das auf einen Webdienst verweist.

Die Leute machen das oft, was bedeutet, dass wenn Sie in der YQL-Konsole auf den Link "Community-Tabellen anzeigen" klicken, Sie feststellen, dass jetzt 812 statt 118 Tische zum Spielen zur Verfügung stehen (ab heute - morgen wahrscheinlich) Mehr).

Um Ihren Service in YQL zu integrieren und der Welt anzubieten, müssen Sie lediglich YQL darauf verweisen. Schauen wir uns ein einfaches Beispiel an:


Reale Anwendung: Craigslist als API

Die kostenlose Kleinanzeigen-Website Craigslist hat keine öffentliche API - was wirklich schade ist. Wenn Sie jedoch eine Suche auf der Website durchführen, werden Sie feststellen, dass die Suchergebnisse eine RSS-Ausgabe haben - was zumindest auf die API-Funktionalität hinweist. Wenn ich in San Francisco nach "schwinn Mountainbike" suche, lautet die URL der Suche:

Dies kann in eine URL mit Variablen geändert werden, wobei die Variablen der Speicherort, die Art des gesuchten Produkts (der Abschnitt der Website) und die von Ihnen gesuchte Abfrage sind (in diesem Fall habe ich die Parameter in geschweifte Zeilen eingeschlossen Hosenträger):

Sobald Sie ein Muster wie dieses gefunden haben, können Sie mit dem Schreiben Ihrer offenen Tabelle beginnen:

Eine vollständige Beschreibung dessen, was dies alles bedeutet, finden Sie in der YQL-Dokumentation zu offenen Tabellen. Hier finden Sie eine kurze Anleitung:

  1. Sie beginnen mit dem XML-Prolog und einem tableelement, das auf das Schema für offene YQL-Tabellen verweist. Dadurch kann YQL Ihre Tabelle validieren.
  2. Sie fügen ein metaelement mit Informationen zu Ihrer Tabelle hinzu: den Autor, die URL Ihrer Dokumentation und eine Beispielabfrage. Die Beispielabfrage ist hier die wichtigste, da diese im Abfragefeld der YQL-Konsole angezeigt wird, wenn Benutzer auf Ihren Tabellennamen klicken. Dies ist der erste Schritt zur Verwendung Ihrer API - es lohnt sich also. Zeigen Sie die von Ihnen angebotenen Parameter und deren Verwendung. Der Teil {table} wird durch den Namen der Tabelle ersetzt.
  3. Das bindings element zeigt an, mit was die Tabelle verbunden ist und welche Schlüssel in einer Abfrage erwartet werden.
  4. Sie definieren den path und den type der Ausgabe im select element. Die Werte für den Typ sind XML oder JSON. Mit dem Pfad können Sie nur einen bestimmten Abschnitt der Daten zurückgeben, die von der URL zurückgegeben werden, auf die Sie zugreifen.
  5. Im Abschnitt urls definieren Sie die URL-Endpunkte Ihres Dienstes. In unserem Fall ist dies die parametrisierte URL von früher. YQL ersetzt die Elemente in geschweiften Klammern durch die vom YQL-Benutzer bereitgestellten Informationen.
  6. Im Abschnitt inputs definieren Sie alle möglichen Schlüssel, die Endbenutzer bereitstellen können oder sollten. Jeder key hat eine id, einen paramType, der entweder path ist, wenn der Parameter Teil des URL-Pfads ist, oder query, wenn er der URL als Parameter hinzugefügt werden soll. Sie definieren, welche Schlüssel obligatorisch sind, indem Sie das mandatory Attribut auf true setzen.

Und das ist alles! Durch das Zusammenstellen dieses XML-Dokuments haben Sie den ersten von drei Schritten ausgeführt, damit Ihre Webdienste Teil der YQL-Infrastruktur werden. Der nächste Schritt besteht darin, YQL mitzuteilen, wo sich Ihre Webdienstdefinition befindet. Laden Sie die Datei einfach auf einen Server hoch, z.B. http://isithackday.com/craigslist.search.xml. Anschließend verweisen Sie YQL auf den Dienst, indem Sie den Befehl use anwenden:

Sie können dies ausprobieren und sehen, dass Sie jetzt Playstations zum Verkauf in der San Francisco Bay Area finden. Ordentlich, nicht wahr?


Logik als Service

Manchmal haben Sie überhaupt keinen Webdienst, und alles, was Sie tun möchten, ist, der Welt eine bestimmte Logik anzubieten. Ich habe neulich genau das getan. Was ich wissen wollte, ist die Entfernung zwischen zwei Orten auf der Erde. Dazu musste ich den Breiten- und Längengrad der Orte ermitteln und dann sehr clevere Berechnungen durchführen. Da ich faul bin, habe ich auf die Arbeit aufgebaut, die andere für mich geleistet haben. Um den Breiten- und Längengrad eines bestimmten Ortes auf der Erde zu ermitteln, können Sie die Yahoo Geo-APIs verwenden. In YQL können Sie dies tun mit:

Probieren Sie das selbst aus.

Um eine Funktion zu finden, die die Entfernung zwischen zwei Orten auf der Erde zuverlässig berechnet, habe ich einige Minuten bei Google verbracht und Chris Veness 'Implementierung der "Vincenty Inverse Solution of Geodesics on the Ellipsoid" gefunden.

YQL bietet einen ausführbaren Block in offenen Tabellen an, der serverseitiges JavaScript enthält. Anstatt die Daten einfach vom Dienst zurückzugeben, können Sie damit Informationen konvertieren, bevor Sie sie zurückgeben. In diesen JavaScript-Blöcken können Sie auch REST-Aufrufe an andere Dienste und an YQL selbst ausführen. Und das habe ich getan:

  1. Das meta element ist dasselbe wie jede andere offene Tabelle.
  2. In den bindings haben wir keine URL, auf die wir verweisen können, sodass wir diese weglassen können. Jetzt fügen wir jedoch ein execute element hinzu, das sicherstellt, dass die definierten key an das in diesem Block definierte JavaScript gesendet werden.
  3. Da die Geo-API von Yahoo XML mit Namespace zurückgibt, müssen wir dem JavaScript mitteilen, um welchen Namespace es sich handelt.
  4. Ich führe zwei YQL-Abfragen aus dem Skript mit der Methode y.query() aus, wobei ich die Parameter place1 und place2 verwende, um die Positionen der beiden Orte zu ermitteln. Die .results nach dem Methodenaufruf stellen sicher, dass ich die Ergebnisse erhalte. Ich speichere sie in res bzw. res2.
  5. Ich erhalte dann den Breiten- und Längengrad für jedes der Ergebnisse und rufe die distVincenty()-Methode auf.
  6. Ich dividiere das Ergebnis durch 1000, um die Kilometer zu erhalten, und multipliziere das Ergebnis mit der richtigen Zahl, um die Meilen zu erhalten.
  7. Ich beende den Skriptteil, indem ich ein response.object definiere, das YQL zurückgibt. Da es sich um serverseitiges JavaScript mit vollständiger E4X-Unterstützung handelt, muss ich nur das XML schreiben, das ich mit den JavaScript-Variablen zurückgeben möchte, die ich in geschweiften Klammern rendern möchte.

Wenn ich diesen Dienst benutze und ein bisschen Schnittstelle hinzufüge, kann ich jetzt leicht die Entfernung zwischen Batman und Robin anzeigen.

Showing the distance between two places on earthShowing the distance between two places on earthShowing the distance between two places on earth

Mit serverseitigem JavaScript können Sie nicht nur Daten konvertieren, sondern auch ganz einfach einen Dienst anbieten, der nur aus Berechnungen besteht - ähnlich wie Google Calculator.


Aus einem bearbeitbaren Datensatz einen Webdienst machen

In den meisten Fällen möchten Sie jedoch den Benutzern ermöglichen, die Daten, die den Webdienst steuern, auf einfache Weise zu bearbeiten. Normalerweise würden wir ein CMS erstellen, die Leute darin schulen und viel Zeit damit verbringen, die Daten vom CMS ins Web zu bringen, um über YQL darauf zuzugreifen. Es kann jedoch einfacher gemacht werden.

Vor einigen Monaten habe ich eine Website namens winterolympicsmedals.com veröffentlicht, die Ihnen alle Informationen über die Olympischen Winterspiele im Laufe der Jahre zeigt.

Die Daten, die die Website steuern, wurden von The Guardian in Großbritannien in ihrem Datenblog kostenlos als Excel-Tabelle veröffentlicht. Um daraus einen bearbeitbaren Datensatz zu machen, musste ich lediglich eine Kopie in meinem eigenen Google Text & Tabellen-Repository speichern. Sie können diese Daten hier erreichen. Google Text & Tabellen ermöglicht das Teilen von Tabellenkalkulationen im Web. Durch die Verwendung von "CSV" als Ausgabeformat erhalte ich eine URL, auf die in YQL zugegriffen werden kann:

Sharing a spreadsheet in Google docsSharing a spreadsheet in Google docsSharing a spreadsheet in Google docs

Und mit YQL können Sie CSV als Datenquelle verwenden:

Sehen Sie das Ergebnis in Ihrem eigenen Browser.

Wie Sie sehen können, fügt die CSV-Tabelle der XML-Ausgabe automatisch Zeilen und Spalten hinzu. Um diesen Webdienst nützlicher und filterbarer zu machen, können Sie eine Spaltenliste bereitstellen, um die resultierenden XML-Elemente umzubenennen:

Sehen Sie sich die umbenannten Spalten in Ihrem Browser an.

Auf diese Weise können Sie die Informationen filtern. Genau das habe ich getan, um winterolympicsmedals.com zu erstellen. Um beispielsweise alle Goldmedaillen von 1924 zu erhalten, gehen Sie wie folgt vor:

Sehen Sie die Goldmedaillen von 1924 in Ihrem Browser.

Sie können also den kostenlosen Speicher von Google und die kostenlose Webdienstinfrastruktur verwenden, um kostenlose Daten in einen Webdienst umzuwandeln. Alles was Sie tun müssen, ist eine schöne Oberfläche dafür zu erstellen.


Hinzufügen Ihres Dienstes zu den Community-Tabellen von YQL

Sobald Sie Ihre offene Tabelle definiert haben, können Sie sie verwenden, indem Sie sie auf Ihrem eigenen Server hosten, oder Sie können sie vollständig hinzufügen, indem Sie sie dem YQL-Tabellen-Repository hinzufügen. Dazu müssen Sie es lediglich zum YQL-Tabellen-Repository von GitHub hinzufügen, das Sie unter http://github.com/yql/yql-tables/ finden. Eine ausführliche Hilfe zur Verwendung von Git und GitHub finden Sie in der Hilfe.

Wenn Sie eine Anfrage an das YQL-Team senden, um sie aus Ihrem Repository abzurufen, wird Ihre Tabelle getestet. Wenn alles in Ordnung ist, wird sie an http://datatables.org/ verschoben, für die die Ressource vorgesehen ist die Community-Tabelle in der YQL-Konsole.

Dies macht nicht nur das Leben anderer Entwickler interessanter, sondern ist auch eine sehr gute Werbung für Sie. Anstatt zu hoffen, Entwickler zu finden, die mit Ihren Daten spielen, bringen Sie die Daten dorthin, wo Entwickler bereits danach suchen.


Erweiterte YQL-Themen

Diese Einführung kann nur die Oberfläche dessen kratzen, was Sie mit YQL tun können. Wenn Sie die Dokumentation überprüfen, werden Sie feststellen, dass Sie zusätzlich zu diesen "gelesenen" offenen Tabellen auch einige Dienste einrichten können, in die geschrieben werden kann, und YQL bietet auch die Cloud-Speicherung Ihrer Informationen. Weitere Informationen finden Sie in der umfangreichen YQL-Dokumentation.


Zusammenfassung

Durch die Kombination offener Systeme wie YQL und Google Docs sowie einiger Kenntnisse in XML und JavaScript können Sie den Menschen in wenigen Minuten einen Webdienst anbieten. Wenn Sie Ihre Entwicklung vom Zugriff auf lokale Dateien und Datenbanken auf den Zugriff auf Dienste verlagern, ist sie in jedem Fall viel vielseitiger und Sie können jederzeit in Zukunft den Anbieter wechseln. Mit YQL können Sie Ihre Zehen in das Wasser von Webdiensten tauchen, ohne zu ertrinken, da die meiste harte Arbeit bereits für Sie erledigt wurde. Danke fürs Lesen!


Über den Autor

Christian Heilmann ist ein internationaler Entwickler-Evangelist, der für Mozilla arbeitet.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.