Comment créer un service Web en quelques minutes

Deux fois par mois, nous revoyons certains des articles préférés de nos lecteurs au cours de l'histoire de Nettuts +. Ce tutoriel a été publié pour la première fois en juillet 2010.

Offrir votre contenu ou votre logique en tant que service sur le Web est une excellente idée. Pour commencer, cela vous permet de créer de nombreux frontaux pour vos propres informations sans avoir à accéder en permanence aux bases de données (ce qui facilite grandement la mise à l'échelle de votre système)..

Le résultat encore plus pratique est que vous permettez aux internautes de jouer avec vos informations et de construire des choses que vous n’avez même jamais rêvé de faire. De nombreuses entreprises comprennent que cette "innovation en provenance de la masse" est un cadeau qui est trop beau pour être manqué. C'est pourquoi il y a tant d'excellentes API autour de.

Fournir une API au monde est une histoire totalement différente. Vous devez savoir comment redimensionner vos serveurs, vous devez être là pour répondre aux questions des responsables de la mise en œuvre et vous devez conserver une bonne documentation pour permettre aux utilisateurs d'utiliser votre contenu. Vous devez également réfléchir à une bonne stratégie de mise en cache afin d'empêcher l'explosion de vos serveurs et trouver un moyen de limiter l'accès à votre système afin d'éviter que des personnes n'en abusent.. Ou est-ce que tu?


Entrez YQL

Yahoo propose un système permettant aux utilisateurs d'accéder à leurs API, appelé Yahoo Query Language ou YQL. YQL est un langage de type SQL qui transforme les informations sur le Web en bases de données virtuelles pouvant être interrogées par les utilisateurs finaux. Ainsi, si vous souhaitez, par exemple, rechercher sur le Web le terme "éléphant", il vous suffit d'utiliser la déclaration suivante:

sélectionnez * depuis search.web where query = "elephant"
Voir le résultat en XML dans votre navigateur.

Vous envoyez cette instruction à un noeud final de données et vous la récupérez au format XML, JSON ou JSON-P. Vous pouvez demander plus de résultats et les filtrer en définissant ce que vous voulez récupérer:

http://query.yahooapis.com/v1/public/yql? q = requête yql & diagnostics = true | false & format = json | xml & callback = nom de la fonction

Mélanger et assortir

Toutes les API de Yahoo sont disponibles via cette interface et vous pouvez combiner des services avec des sous-sélections. Par exemple, vous pouvez exécuter un outil d’analyse de mots clés sur l’abrégé d’une recherche sur le Web pour trouver les mots clés pertinents. En utilisant le unique() fonctions, vous pouvez également facilement supprimer les faux positifs.

select * from search.termextract where contexte in (sélectionnez abstract dans search.web (50) where query = "elephant") | unique (champ = "résultat")

Voir les résultats de cette requête plus complexe ici.

La console

Le moyen le plus simple de jouer avec YQL en tant que consommateur consiste à utiliser la console à l'adresse http://developer.yahoo.com/yql/console/. Là vous pouvez cliquer sur différentes tables pour voir une requête de démonstration comment l’utiliser et si vous cliquez sur le bouton desc lien vous trouvez quelles options sont disponibles pour vous.

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

YQL Limits

L'utilisation de YQL a quelques limites qui sont décrites dans la documentation. En substance, vous pouvez accéder au point de terminaison de données ouvertes 1 000 fois par heure, par IP. Si vous authentifiez une application avec oAuth, vous obtenez 10 000 hits par heure. 100 000 visites par jour sont autorisées pour chaque application..

Ceci, et la mise en cache des résultats que YQL fait automatiquement, signifie que les données ne sont demandées que lorsqu'elles ont été modifiées. Cela signifie que YQL est en quelque sorte un pare-feu pour les requêtes sur les données que les utilisateurs proposent avec.

Soyez prudent lorsque vous utilisez "$ .getJSON" de jQuery et une fonction anonyme comme rappel. Cela peut réduire les capacités de cache de YQL et nuire aux performances.


Construction de services Web avec des tables ouvertes

La chose vraiment cool pour vous en tant que fournisseur est que YQL est ouvert à d'autres fournisseurs de données.

Si vous souhaitez proposer une API au monde (ou simplement en avoir une pour vous-même en interne), vous pouvez facilement le faire en écrivant une "table ouverte" qui est un schéma XML pointant vers un service Web..

Les gens le font souvent, ce qui signifie que si vous cliquez sur le lien "Afficher les tables de la communauté" dans la console YQL, vous constaterez qu’il ya maintenant 812 tables au lieu de 118 avec lesquelles jouer (à partir d’aujourd’hui - demain, il y aura probablement plus).

Pour obtenir votre service dans YQL et l’offrir au monde entier, il vous suffit de le pointer vers YQL. Regardons un exemple simple:


Application du monde réel: Craigslist en tant qu'API

Le site d'annonces gratuites en ligne gratuit de Craigslist n'a pas d'API publique - ce qui est dommage, vraiment. Cependant, lorsque vous effectuez une recherche sur le site, vous constaterez que les résultats de la recherche ont une sortie RSS - ce qui pointe au moins vers la fonctionnalité de l'API. Par exemple, lorsque je recherche "vélo de montagne schwinn" à San Francisco, l'URL de la recherche est la suivante:

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

Cela peut être changé en une URL avec des variables, les variables étant l'emplacement, le type de produit que vous recherchez (qui est la section du site) et la requête que vous avez recherchée (dans ce cas, j'ai enveloppé les paramètres de manière frisée. bretelles):

http: // emplacement .craigslist.co.uk / search / type? format = rss & query = requête

Une fois que vous avez trouvé un motif comme celui-ci, vous pouvez commencer à écrire votre table ouverte:

 Yahoo! Inc.http://craigslist.org/sélectionnez * depuis table où location = "sfbay" et tapez = "sss" et query = "schwinn mountain bike"Recherches sur Craigslist.org  

Pour une description complète de tout ce que cela signifie, vous pouvez consulter la documentation YQL sur les tables ouvertes, mais voici un aperçu rapide:

  1. Vous commencez avec le prologue XML et un table élément pointant vers le schéma pour les tables ouvertes YQL. Cela permet à YQL de valider votre table.
  2. Vous ajoutez un méta élément contenant des informations sur votre table: l'auteur, l'URL de votre documentation et un exemple de requête. L'exemple de requête est le plus important ici, car c'est ce qui apparaîtra dans la boîte de requête de la console YQL lorsque les gens cliquent sur le nom de votre table. C'est la première étape pour utiliser votre API - alors faites-le valoir. Affichez les paramètres que vous proposez et comment les utiliser. le table une partie sera remplacée par le nom de la table.
  3. le fixations L'élément montre à quoi la table est connectée et quelles sont les clés attendues dans une requête.
  4. Vous définissez le chemin et le type de la sortie dans le sélectionner element - les valeurs du type sont XML ou JSON et le chemin vous permet uniquement de renvoyer une certaine section des données renvoyées à partir de l'URL à laquelle vous accédez.
  5. dans le les urls section, vous définissez les points de terminaison d’URL de votre service. Dans notre cas, il s'agit de l'URL paramétrée précédemment. YQL remplace les éléments entre accolades par les informations fournies par l'utilisateur YQL.
  6. dans le contributions section, vous définissez toutes les clés possibles que les utilisateurs finaux peuvent ou doivent fournir. Chaque clé a un identifiant, une paramType qui est soit chemin, si le paramètre fait partie du chemin de l'URL, ou question, s'il doit être ajouté à l'URL en tant que paramètre. Vous définissez les clés obligatoires en définissant la obligatoire attribuer à vrai.

Et c'est ça! En rassemblant ce document XML, vous avez franchi la première des trois étapes pour que vos services Web fassent partie de l’infrastructure YQL. L'étape suivante consiste à indiquer à YQL où se trouve la définition de votre service Web. Téléchargez simplement le fichier sur un serveur, par exemple http://isithackday.com/craigslist.search.xml. Vous pointez ensuite YQL vers le service en appliquant le utilisation commander:

utilisez "http://isithackday.com/craigslist.search.xml" en tant que cl; sélectionnez * depuis cl où location "sfbay" et tapez = "sss" et query = "playstation"

Vous pouvez essayer ceci et vous verrez que vous trouvez maintenant des stations de jeu à vendre dans la région de la baie de San Francisco. Neat, n'est ce pas?


La logique en tant que service

Parfois, vous n'avez pas du tout de service Web et tout ce que vous voulez, c'est offrir une certaine logique au monde. Je me suis retrouvé à faire la même chose l'autre jour. Ce que je voulais savoir, c’est la distance qui sépare deux endroits sur Terre. Pour cela, je devais trouver la latitude et la longitude des lieux, puis faire des calculs très astucieux. En tant que paresseux, je me suis appuyé sur le travail que d’autres personnes ont fait pour moi. Afin de trouver la latitude et la longitude d'un certain endroit sur Terre, vous pouvez utiliser les API Yahoo Geo. Dans YQL, vous pouvez le faire avec:

sélectionnez * depuis geo.places (1) où text = "paris"

Essayez ceci vous-même.

Afin de trouver une fonction qui calcule de manière fiable la distance entre deux endroits sur Terre, j'ai passé quelques minutes sur Google et découvert l'application de Chris Veness à la "Solution de géodésique inverse de Vincenty sur l'ellipsoïde"..

YQL propose un bloc exécutable dans des tables ouvertes contenant du code JavaScript côté serveur. Au lieu de simplement renvoyer les données du service, vous pouvez utiliser ceci pour convertir des informations avant de les renvoyer. Vous pouvez également effectuer des appels REST vers d'autres services et vers YQL lui-même dans ces blocs JavaScript. Et voici ce que j'ai fait:

  select * from table où place1 = "london" et place2 = "paris" Christian Heilmann http://isithackday.com/hacks/geo/distance/  Vous donne la distance de deux endroits sur la terre en miles ou en kilomètres   
  1. le méta l'élément est le même que n'importe quelle autre table ouverte.
  2. dans le fixations nous n'avons pas d'URL à pointer pour pouvoir l'omettre. Cependant, nous ajoutons maintenant un exécuter élément qui assure que le clés défini sera envoyé au JavaScript défini dans ce bloc.
  3. Comme la Geo API de Yahoo renvoie le XML en espace de nom, nous devons indiquer au JavaScript quel espace de nom est utilisé..
  4. J'exécute deux requêtes YQL à partir du script en utilisant le y.query () méthode utilisant le lieu1 et place2 paramètres pour obtenir les emplacements des deux endroits. le .résultats après l'appel de la méthode s'assure que j'obtiens les résultats. Je les stocke dans res et res2 respectivement.
  5. J'obtiens ensuite la latitude et la longitude pour chacun des résultats et appelle le distVincenty () méthode.
  6. Je divise le résultat par 1000 pour obtenir les kilomètres et multiplie le résultat par le bon nombre pour obtenir les milles.
  7. Je termine la partie du script en définissant un response.object ce qui est ce que YQL retournera. Comme il s'agit de JavaScript côté serveur avec prise en charge complète de E4X, tout ce dont j'ai besoin d'écrire est le code XML que je souhaite renvoyer avec les variables JavaScript que je souhaite restituer entre accolades..

En utilisant ce service et en ajoutant un peu d’interface, je peux maintenant facilement montrer la distance entre Batman et Robin.

En utilisant du code JavaScript côté serveur, vous pouvez non seulement convertir des données, mais également proposer facilement un service constitué uniquement de calculs, un peu comme le fait Google Calculator..


Conversion d'un ensemble de données modifiable dans un service Web

Cependant, dans la plupart des cas, vous souhaitez réellement permettre aux utilisateurs de modifier facilement les données qui pilotent le service Web. Normalement, nous construisions un système de gestion de contenu, formions les utilisateurs et passions beaucoup de temps à transférer les données du système de gestion de contenu sur le Web pour y accéder via YQL. Cela peut être plus facile si.

Il y a quelques mois, j'ai publié un site Web appelé winterolympicsmedals.com qui contient toutes les informations sur les Jeux olympiques d'hiver au fil des ans..

winterolympicsmedals.com

Les données qui gèrent le site Web ont été publiées gratuitement par The Guardian au Royaume-Uni sur leur blog de données sous forme de feuille de calcul Excel. Afin de transformer cela en un ensemble de données modifiable, tout ce que je devais faire était de sauvegarder une copie dans mon propre référentiel Google Docs. Vous pouvez accéder à ces données ici. Google Documents permet le partage de feuilles de calcul sur le Web. En utilisant "CSV" comme format de sortie, je reçois une URL à laquelle accéder dans YQL:

Et en utilisant YQL, vous pouvez utiliser CSV comme source de données:

sélectionnez * depuis csv où url = "http://spreadsheets.google.com/pub? key = 0AhphLklK1Ve4dHBXRGtJWk1abGVRYVJFZjQ5M3YxSnc & hl = en & output = csv"

Voir le résultat de cela dans votre propre navigateur.

Comme vous pouvez le constater, la table CSV ajoute automatiquement des lignes et des colonnes à la sortie XML. Pour en faire un service Web plus utile et pouvant être filtré, vous pouvez fournir une liste de colonnes permettant de renommer les éléments XML résultants:

sélectionnez * depuis csv où url = "http://spreadsheets.google.com/pub? key = 0AhphLklK1Ve4dHBXRGtJWk1abGVRYVJFZjQ5MxYxSnc & hl = en & output = csv" et colonnes = "année, ville, sport, pays, événements, événements, événements,

Voir les colonnes renommées dans votre navigateur.

Cela vous permet de filtrer les informations, ce qui est exactement ce que j'ai fait pour construire winterolympicsmedals.com. Par exemple, pour obtenir toutes les médailles d'or de 1924, procédez comme suit:

select * from csv où url = "http://spreadsheets.google.com/pub? key = 0AhphLklK1Ve4dHBXRGtJWk1abGVRYVJFZjQ5MxYxSnc & hl = en & output = csv" et colonnes = "année, ville, sport, pays, événement, événement, événement = "1924" et type = "Or"

Voir les médailles d'or de 1924 dans votre navigateur.

Vous pouvez donc utiliser le stockage gratuit de Google et l'infrastructure de services Web gratuits pour convertir des données gratuites en un service Web. Tout ce que vous avez à faire est de créer une belle interface pour cela.


Ajout de votre service aux tables de communauté YQL

Une fois que vous avez défini votre table ouverte, vous pouvez l’utiliser en l’hébergeant sur votre propre serveur ou vous pouvez y accéder en ajoutant l’ajoute au référentiel de tables YQL. Pour ce faire, il vous suffit de l'ajouter au référentiel des tables YQL sur GitHub, disponible à l'adresse http://github.com/yql/yql-tables/. Vous trouverez une aide détaillée sur l’utilisation de Git et GitHub dans la section Aide correspondante..

Si vous envoyez une requête à l'équipe YQL pour qu'elle extrait de votre référentiel, elle testera votre table et si tout va bien, elle la transférera vers http://datatables.org/, qui constitue la ressource pour la table des communautés dans la console YQL.

http://datatables.org/

Cela rend non seulement la vie des autres développeurs plus intéressante, mais constitue également une très bonne promotion pour vous. Au lieu d'espérer trouver des développeurs pour jouer avec vos données, vous les amenez là où les développeurs les recherchent déjà.


Sujets avancés sur YQL

Cette introduction ne peut que gratter la surface de ce que vous pouvez faire avec YQL. Si vous consultez la documentation, vous constaterez qu'en plus de ces tables ouvertes "en lecture", vous pouvez également configurer certains services sur lesquels vous pouvez écrire, et que YQL offre également le stockage en nuage de vos informations. Consultez la documentation complète YQL pour plus.


Résumé

En combinant des systèmes ouverts tels que YQL et Google Docs, ainsi que des connaissances en XML et JavaScript, vous pouvez offrir un service Web à des personnes en quelques minutes. Dans tous les cas, déplacer votre développement de l'accès aux fichiers et aux bases de données locaux vers l'accès aux services le rend beaucoup plus polyvalent et vous permet de changer de fournisseur à tout moment. Avec YQL, vous pouvez plonger vos pieds dans l'eau des services Web sans vous noyer, car la plupart des travaux difficiles ont déjà été effectués pour vous. Merci d'avoir lu!


A propos de l'auteur

Christian Heilmann est un évangéliste développeur international qui travaille pour Mozilla..