So erstellen Sie einen Webdienst in wenigen Minuten

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, Inhalte oder Logik als Service im Web anzubieten. Für den Anfang können Sie zahlreiche Frontends für Ihre eigenen Informationen erstellen, ohne ständig auf die Datenbanken zugreifen zu müssen (und dadurch die Skalierung Ihres Systems erheblich vereinfacht)..

Das praktischere Ergebnis ist, dass Sie den Webbenutzern erlauben, mit Ihren Informationen zu spielen und Dinge zu erstellen, von denen Sie noch nie zuvor geträumt haben. Viele Unternehmen wissen, dass diese "Crowd-Sourcing-Innovation" ein Werbegeschenk ist, das zu schön ist, um es zu übersehen. Deshalb gibt es so viele großartige APIs.

Die Bereitstellung einer API für die Welt ist jedoch eine völlig andere Geschichte. Sie müssen wissen, wie Ihre Server skaliert werden, Sie müssen für die Beantwortung von Fragen durch Implementierer vor Ort sein und 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 gehen, und Sie müssen einen Weg finden, den Zugriff auf Ihr System zu beschränken, damit die Benutzer es nicht missbrauchen. Oder tust du?


Geben Sie YQL ein

Yahoo bietet ein System für den Zugriff auf APIs, die als Yahoo Query Language oder YQL bezeichnet wird. 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 "Elefant" suchen möchten, müssen Sie lediglich die folgende Anweisung verwenden:

Wählen Sie * aus search.web aus, wobei Abfrage = "Elefant"
Sehen Sie sich das Ergebnis als XML in Ihrem Browser an.

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

http://query.yahooapis.com/v1/public/yql? q = yql query & diagnostics = true | false & format = json | xml & callback = Funktionsname

Mischen und Anpassen

Alle APIs von Yahoo sind über diese Schnittstelle verfügbar, und Sie können Dienste mit Unterauswahlen kombinieren. Sie könnten beispielsweise ein Keyword-Analyse-Tool über die Zusammenfassung einer Websuche ausführen, um relevante Schlüsselwörter zu finden. Verwendung der einzigartig() Funktionen können Sie auch leicht positive Ergebnisse entfernen.

Wählen Sie * aus search.termextract wo Kontext (wählen Sie abstract aus search.web (50), wobei Abfrage = "Elefant") | eindeutig (Feld = "Ergebnis")

Sehen Sie sich die Ergebnisse dieser komplexeren Abfrage hier an.

Die Konsole

Die einfachste Möglichkeit, 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 zu sehen, wie sie verwendet wird, und wenn Sie auf klicken desc Über den Link erfahren Sie, welche Optionen Ihnen zur Verfügung stehen.

http://developer.yahoo.com/yql/console/

YQL-Grenzen

Die Verwendung von YQL hat einige Einschränkungen, die in der Dokumentation beschrieben werden. Im Wesentlichen können Sie auf den offenen Datenendpunkt 1.000 Mal pro Stunde und pro IP zugreifen. Wenn Sie eine Anwendung mit oAuth authentifizieren, erhalten Sie 10.000 Treffer pro Stunde. Für jede Anwendung sind 100.000 Treffer pro Tag zulässig.

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

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


Erstellen von Web Services 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 einfach nur eine für sich selbst haben), können Sie dies leicht tun, indem Sie eine "offene Tabelle" schreiben, ein XML-Schema, das auf einen Webdienst verweist.

Die Leute machen das oft, was bedeutet, wenn Sie auf den Link "Community-Tabellen anzeigen" in der YQL-Konsole klicken, werden Sie feststellen, dass es jetzt 812 statt 118 Tische gibt, mit denen Sie spielen können Mehr).

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


Real-World-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 über eine RSS-Ausgabe verfügen - was zumindest auf die API-Funktionalität hinweist. Wenn ich beispielsweise in San Francisco nach "schwinn mountainbike" suche, lautet die URL der Suche:

http://sfbay.craigslist.co.uk/search/sss?format=rss&query=schwinn+mountain+bike

Dies kann in eine URL mit Variablen geändert werden, wobei die Variablen der Speicherort, der Produkttyp, nach dem Sie suchen (der Bereich der Website ist) und die Suchanfrage, nach der Sie gesucht haben (in diesem Fall habe ich die Parameter in geschwungenem Zustand eingepackt) Hosenträger):

http: // location .craigslist.co.uk / search / type? format = rss & query = query

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

 Yahoo! Inc.http://craigslist.org/Wählen Sie * aus table wobei location = "sfbay" und type = "sss" und query = "schwinn mountain bike".Durchsucht Craigslist.org  

Um eine vollständige Beschreibung der Bedeutung all dieser Informationen zu erhalten, können Sie die YQL-Dokumentation zu offenen Tabellen überprüfen. Hier finden Sie eine kurze Anleitung:

  1. Sie beginnen mit dem XML-Prolog und einem Tabelle Element, das auf das Schema für offene YQL-Tabellen zeigt. Dadurch kann YQL Ihre Tabelle überprüfen.
  2. Sie fügen ein Meta Element mit Informationen zu Ihrer Tabelle: Der Autor, die URL Ihrer Dokumentation und eine Beispielabfrage. Die Beispielabfrage ist hier am wichtigsten, da dies im Abfragefeld der YQL-Konsole angezeigt wird, wenn Personen auf Ihren Tabellennamen klicken. Es ist der erste Schritt zur Verwendung Ihrer API - machen Sie es sich also lohnend. Zeigen Sie die von Ihnen angebotenen Parameter und deren Verwendung. Das Tabelle Teil wird durch den Namen der Tabelle ersetzt.
  3. Das Bindungen Element zeigt an, mit was die Tabelle verbunden ist und welche Schlüssel in einer Abfrage erwartet werden.
  4. Sie definieren das Pfad und das Art der Ausgabe in der wählen Element - Werte für den Typ sind XML oder JSON, und der Pfad ermöglicht es Ihnen, nur einen bestimmten Abschnitt der Daten zurückzugeben, die von der URL zurückgegeben werden, auf die Sie zugreifen.
  5. In dem URLs In diesem Abschnitt definieren Sie die URL-Endpunkte Ihres Dienstes. In unserem Fall ist dies die zuvor parametrierte URL. YQL ersetzt die Elemente in geschweiften Klammern durch die vom YQL-Benutzer bereitgestellten Informationen.
  6. In dem Eingänge In diesem Abschnitt definieren Sie alle möglichen Schlüssel, die der Endbenutzer zur Verfügung stellen kann oder soll. Jeder Schlüssel hat eine Ich würde, ein paramType das ist entweder Pfad, wenn der Parameter Teil des URL-Pfads ist, oder Abfrage, wenn es der URL als Parameter hinzugefügt werden soll. Sie legen fest, welche Schlüssel obligatorisch sind verpflichtend zuschreiben wahr.

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 Web-Service-Definition befindet. Laden Sie die Datei einfach auf einen Server hoch, beispielsweise http://isithackday.com/craigslist.search.xml. Sie weisen dann YQL auf den Dienst an, indem Sie die benutzen Befehl:

Verwenden Sie "http://isithackday.com/craigslist.search.xml" als cl; Wählen Sie * aus cl, wo sich der Speicherort "sfbay" befindet, und geben Sie = "sss" und query = "playstation" ein.

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


Logik als Service

Manchmal haben Sie überhaupt keinen Webservice, und Sie möchten der Welt nur eine bestimmte Logik anbieten. Ich habe gerade festgestellt, dass ich das neulich tat. Was ich wissen wollte, ist der Abstand zwischen zwei Orten auf der Erde. Dafür musste ich den Längen- und Breitengrad der Orte finden und sehr kluge Berechnungen durchführen. Da ich eine faule Person bin, baute ich auf der Arbeit auf, die andere Leute für mich geleistet haben. Um den Breitengrad 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 mit:

Wähle * aus geo.places (1), wobei Text = "Paris"

Probieren Sie es selbst aus.

Um eine Funktion zu finden, die zuverlässig den Abstand zwischen zwei Orten auf der Erde berechnet, verbrachte ich einige Minuten bei Google und fand die Implementierung der "Vincenty Inverse Lösung der Geodätik auf dem Ellipsoid" von Chris Veness..

YQL bietet einen ausführbaren Block in offenen Tabellen, der serverseitiges JavaScript enthält. Anstatt die Daten einfach vom Dienst zurückzusenden, können Sie diese Informationen verwenden, um die Informationen vor der Rückgabe zu konvertieren. 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:

  Wähle * aus table wobei place1 = "london" und place2 = "paris" Christian Heilmann http://isithackday.com/hacks/geo/distance/  Gibt die Entfernung zweier Orte auf der Erde in Meilen oder Kilometern an   
  1. Das Meta Element ist das gleiche wie jede andere offene Tabelle.
  2. In dem Bindungen Wir haben keine URL, auf die wir verweisen können, sodass wir diese URL weglassen können. Wir fügen jedoch jetzt ein ausführen Element, das dafür sorgt, dass die SchlüsselDie definierten s werden an das in diesem Block definierte JavaScript gesendet.
  3. Da die Geo-API von Yahoo Namespace-XML zurückgibt, müssen wir dem JavaScript mitteilen, welcher Namespace das ist.
  4. Ich führe zwei YQL-Abfragen mit dem Skript aus y.query () Methode mit der place1 und place2 Parameter, um die Standorte der beiden Orte zu erhalten. Das .Ergebnisse Nach dem Methodenaufruf wird sichergestellt, dass ich die Ergebnisse bekomme. Ich lagere sie ein res und res2 beziehungsweise.
  5. Ich erhalte dann die Längen- und Breitengrade für jedes Ergebnis und rufe das an distVincenty () Methode.
  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 mit der Definition von a antwort.objekt Das ist, was YQL zurückgeben wird. Da dies serverseitiges JavaScript mit voller E4X-Unterstützung ist, muss ich nur das XML schreiben, das ich mit den JavaScript-Variablen zurückgeben möchte, die ich in geschweiften Klammern darstellen möchte.

Mit diesem Dienst und dem Hinzufügen einer Schnittstelle kann ich jetzt leicht die Entfernung zwischen Batman und Robin anzeigen.

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


Umwandlung eines bearbeitbaren Datensatzes in einen Webdienst

In den meisten Fällen möchten Sie jedoch die Möglichkeit haben, die Daten, die den Webdienst steuern, auf einfache Weise zu bearbeiten. Normalerweise würden wir ein CMS erstellen, Leute darin schulen und viel Zeit investieren, um die Daten vom CMS ins Web zu bringen, um über YQL darauf zuzugreifen. Das geht aber einfacher.

Vor ein paar Monaten habe ich eine Website mit dem Namen winterolympicsmedals.com veröffentlicht, auf der Sie alle Informationen über die Olympischen Winterspiele im Laufe der Jahre erhalten.

winterolympicsmedals.com

Die Daten, die die Website steuern, wurden von The Guardian in Großbritannien in ihrem Datenblog als Excel-Tabelle kostenlos veröffentlicht. Um daraus einen bearbeitbaren Datensatz zu erstellen, musste ich lediglich eine Kopie in meinem eigenen Google Docs-Repository speichern. Diese Daten können Sie hier erreichen. Google Text & Tabellen ermöglicht die gemeinsame Nutzung von Tabellen im Internet. Durch die Verwendung von "CSV" als Ausgabeformat erhalte ich eine URL für den Zugriff in YQL:

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

select * from csv where url = "http://spreadsheets.google.com/pub? key = 0AhphLklK1Ve4dHBXRGtJWk1abGVRYVJFZjQ5M3YxSnc & hl = de & output = csv"

Sehen Sie sich das Ergebnis in Ihrem eigenen Browser an.

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

select * from csv wobei url = "http://spreadsheets.google.com/pub? key = 0AhphLklK1Ve4dHBXRGtJWk1abGVRYVJFZjQ5M3YxSnc & hl = de & output = csv" und Spalten = "Jahr, Stadt, Sport, Disziplin, Typ".

Sehen Sie sich die umbenannten Spalten in Ihrem Browser an.

Dadurch können Sie die Informationen filtern. Genau das habe ich beim Erstellen von winterolympicsmedals.com getan. Um beispielsweise alle Goldmedaillen von 1924 zu erhalten, würden Sie Folgendes tun:

Wählen Sie * from csv aus, wobei url = "http://spreadsheets.google.com/pub? key = 0AhphLklK1Ve4dHBXRGtJWk1abGVRYVJFZjQ5M3YxSnc & hl = de & output = csv" und Spalten = "Jahr, Stadt, Sport, Disziplin, Land, Jahr und Jahr = "1924" und Typ = "Gold"

Sehen Sie die Goldmedaillen von 1924 in Ihrem Browser.

So können Sie den kostenlosen Speicher von Google und die kostenlose Web-Service-Infrastruktur verwenden, um kostenlose Daten in einen Web-Service umzuwandeln. Alles was Sie tun müssen, ist eine nette Schnittstelle dafür zu erstellen.


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

Wenn Sie Ihre offene Tabelle definiert haben, können Sie sie verwenden, indem Sie sie auf Ihrem eigenen Server hosten, oder Sie können sie voll nutzen, indem Sie sie dem YQL-Tabellen-Repository hinzufügen. Dazu müssen Sie es nur in das YQL-Tabellen-Repository von GitHub aufnehmen, das Sie unter http://github.com/yql/yql-tables/ finden. Ausführliche Informationen zur Verwendung von Git und GitHub finden Sie im Hilfebereich.

Wenn Sie eine Anfrage an das YQL-Team senden, um aus Ihrem Repository zu ziehen, testen Sie Ihren Tisch. Wenn alles in Ordnung ist, verschieben Sie ihn zu http://datatables.org/, der Ressource Die Community-Tabelle in der YQL-Konsole.

http://datatables.org/

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


Erweiterte YQL-Themen

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


Zusammenfassung

Durch die Kombination von offenen Systemen wie YQL und Google Text & Tabellen sowie einigen Kenntnissen in XML und JavaScript können Sie innerhalb von Minuten einen Webservice für Benutzer anbieten. Wenn Sie Ihre Entwicklung vom Zugriff auf lokale Dateien und Datenbanken auf den Zugriff auf Dienste verlagern, ist dies auf jeden Fall vielseitiger und Sie können jederzeit den Anbieter wechseln. Mit YQL können Sie Ihre Zehen in das Wasser von Web-Services eintauchen, ohne zu ertrinken, da der größte Teil der harten 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.