webmention-fr

From IndieWeb

Cette page a démarré sur webmention

Cet article est une ébauche. Vous pouvez aider le wiki IndieWebCamp à l'améliorer et le compléter.

WebMention est une réimplémentation moderne du Pingback utilisant uniquement HTTP et du contenu x-www-urlencodé plutôt que des requêtes XMLRPC. WebMention remplace Pingback.

Résumé du Protocole

Nous partons du principe que le blog de Barnaby supporte l'envoi de webmentions, et que celui d'Aaron en supporte la réception.

  • L'utilisateur Aaron publie une note sur son blog
  • L'utilisateur Barnaby publie une note sur son blog. Cette note fait un lien vers le post de Aaron.
  • Après la publication de la note (elle dispose donc d'une URL), le serveur de Barnaby ajoute ce lien au processus de publication.
  • Le serveur de Barnaby fait tente de trouver l'endpoint webmention sur la note d'Aaron. S'il ne la trouve pas, le processus s'arrête. On parle ici de découverte de l'endpoint webmention.
  • Le serveur de Barnaby envoie une webmention au endpoint webmention du post de Aaron :
    • source point sur le permalien de la note de Barnaby
    • target pointe sur le permalien de la note d'Aaron.
  • Le serveur d'Aaron reçoit la webmention.
  • Le serveur d'Aaron vérifie que target (après avoir suivi les redirections) dans la webmention est un permalien valide sur le blog de Aaron. Si ce n'est pas le cas, le processus s'arrête.
  • Le serveur de Aaron vérifie que la source (si retrouvée, après avoir suivi les redirections) dans la webmention contient un hyperlien vers la target. Dans le cas contraire, le processus s'arrête.

Non mentionné mais implicite (et vaguement mentionné dans la spec pingback) :

  • Le serveur de Aaron affiche l'information concernant la note de Barnaby quelque part sur la note d'Aaron.

Voir la spéc Webmention (note : désuète en date du 2013-10-17, problématiques résolues non renvoyées, échoue à inclure rel=webmention) pour une description complète du protocole.

Voir commentaire : comment accepter un commentaire pour plus de détails sur l'acceptation de commentaires en général et les afficher.

Comment Tester les Webmentions

Envoyer des Webmentions

La beauté des protocoles simples est que vous pouvez faire presque tout cela manuellement et très facilement.

  • Supposons une cible vers laquelle envoyer une webmention, vous devez d'abord découvrir son endpoint webmention :
curl -i -s $target | grep 'rel="webmention"'
    • Note : ceci est uniquement une approximation, les implémentations peuvent utiliser rel="http://webmention.org/" et d'autres peuvent utiliser à la fois : rel="webmention http://webmention.org/" aucune des deux ne sont découvertes par le grep ci-dessus. Quelques-unes peuvent utiliser des guillemets simples (ou pas de guillemets) pour entourer la valeur rel webmention. D'autres encore peuvent uniquement supporter la découverte avec un header HTTP Link (par ex. Taproot). Les implémentations conciliantes peuvent d'abord vérifier les headers HTTP Link de la valeur rel, et si non trouvé parser ensuite la valeur rel sur une élément <link> dans le <head> selon la spécification HTML sur le parsage de valeurs rel.
  • Maintenant pour envoyer la webmention :
curl -i -d "source=$votre_url&target=$target_url" $targets_webmention_endpoint

webmentions en-une-ligne

Ceci enverra la webmention en une unique ligne de commande :

curl -i -d "source=$your_url&target=$target_url" `curl -i -s $target_url | grep 'rel="http://webmention.org/"' | sed 's/rel="webmention"//' | grep -o -E 'https?://[^ ">]+' | sort | uniq`

Voir aussi ce gist pour envoyer manuellement des pingbacks : https://gist.github.com/aaronpk/5744879

Accepter les Webmentions

Actuellement le meilleur moyen de tester la consommation des webmentions est d'implémenter l'envoi, puis de vous envoyer à vous-même les mentions. Une fois que vous êtes prêt à tester l'intégration avec un autre site, demandez à quelqu'un sur IRC de vous envoyer un commentaire.

FAQ

Pourquoi webmention au lieu de pingback

  • Plus simple. En abandonnant XML-RPC, webmention est plus simple que pingback. Ceci veut dire :
    • Moins de travail à implémenter
    • Plus facile à tester
    • Les deux qui combinent la possibilité de permettre des implémentations plus fiables, interopérables, plus rapidement.
  • Ne réutiliser que du HTTP permet de faciliter les tests et l'UI. En n'utilisant que du HTTP, il est possible de construire des formulaires HTML simples qui exercent le protocole, ce qui est un bon principe de design pour les protocoles web en général[1]. Ceci permet un test plus simple/plus facile (avec juste un fichier statique HTML), et la capacité de fournir de simples formulaires de propositions webmention (pas besoin de JS) sur les posts de blog afin que d'autres puissent coller des URLs pour leurs réponses (quelques participants IndieWeb font déjà ça, par ex. les posts de http://adactio.com/).

Que font les implémentations existantes ?

Quels liens devraient recevoir les webmentions

Quels liens dans un post devraient recevoir les webmentions ?

Les webmentions devraient être envoyées à toutes les URLs qu'un post peut être considéré à citer — ceci comprend les

  • URLs in-reply-to
  • URLs rsvp
  • URLs liées dans le contenu, y compris les URLs des personnes citées

Que font les implémentations existantes ?

  • J'envoie des pinbacks (webmentions à venir sous peu) vers l'URL in-reply-to si réglé, et toutes les URLs dans le champ de contenu du post. --Waterpigs.co.uk 09:14, 10 April 2013 (PDT)

Est-ce-que les webmentions devraient être envoyés pour des liens pour des assets statiques

Est-ce-que les webmentions devraient être envoyées pour des liens vers les URLs d'asset statique par ex. des images, de l'audio ?

Que font les implémentations existantes ?

  • Taproot envoie des webmentions à toutes les URLs dans un post sans discrimination par type de lien --Barnaby Walters 09:01, 26 novembre 2013 (PST)

Est-ce que les webmentions devraient être envoyées pour des embarquements

Est-ce que les webmentions devraient être envoyées pour des ressources embarquées dans un post comme les URLs dans les attributs "src" et "data" ?

  • <audio src>
  • <embed src>
  • <iframe src>
  • <img src>
  • <object data>
  • <source src>
  • <video src>
  • ... autres ?

Et que penser de "srcset"? Est-ce que quelqu'un sur l'indieweb s'est même soucié de publier avec srcset ?

Que devrait faire le récipiendaire d'une webmention pour un embarquement avec cette notification ?

Est-ce que les webmentions devraient être envoyées pour des retraits

  • Si le post source est édité pour retirer un lien vers la cible, est-ce qu'un webmention devrait être envoyé à la cible pour l'informer du retrait de la mention ?
    • [kartikprabhu.com] envoie des webmentions aux liens qui sont ôtés pendant la modification de l'article.
  • Existe-t-il des implémentations pour recevoir des webmentions qui font quelque chose avec un tel POST de webmention ?
    • [kartikprabhu.com] efface les réponses-citation existantes de la database, s'il reçoit une mention où la source ne lie plus vers la cible.

Notes d'Implémentation

Ceci sont quelques détails d'implémentations intéressants concernant la réception de webmentions, par ex quand suivre de redirects et quand ne pas le faire.

découverte endpoint

Dans l'étape 4 du résumé du protocole du dessus, au moment d'exécuter la découverte du endpoint webmention, assurez-vous de vérifier à la fois que les webmention et http://webmention.org/ sous forme de valeurs rel qui peuvent être présentes dans un espace séparé de valeurs rel à l'intérieur d'un attribut rel.

vérifier la validité de la cible

Dans l'étape 7 au-dessus, au moment de vérifier le param target à partir du webmention pour la validité, regardez vers quoi il redirige et si c'est un permalien valide sur le serveur. Par ex. si vous posts s'affichent à la fois visiblement les permaliens et les permaliens-raccourcis pour que d'autres puissent les copier/citer/lier, assurez-vous que vous gérez les webmentions qui spécifient une cible qui est un des permaliens-raccourcis-citations (pas juste vos permaliens).

verifer les liens sources à cibler

Dans l'étape 8 au-dessus, au moment de vérifier le param source, retrouvez le en suivant les redirections, et puis au moment de vérifier le HTML résultatnt, cherchez le param target tel que littéralement fourni dans la requête webmention (c'est à dire PAS de redirections à partir de target).

statut code réponse sync/async

Les receveurs de webmention peuvent choisir de vérifier de façon synchrone dans quels cas, lors de la vérification avec succès le client DOIT renvoyer une réponse de succès HTTP 200, ou s'ils doivent le mettre en file d'attente pour traitement a posteriori, auquel cas ils DOIVENT renvoyer un HTTP 202 Accepted.

Implémentations

Implémentations IndieWeb

Les sites/utilisateurs suivants ont implémenté l'envoi et/ou la réception de webmentions, par ordre chronologique :

  • Aaron Parecki en utilisant p3k sur aaronparecki.com en date du 2013-05-26. Détails :
    • Tous les post envoient des webmentions (en date du 2013-05-26 tout d'abord webmention (semi-)automatique envoyée le 2013-03-31) sur le post (de manière asynchrone avec une UI de post, aucun résultat rapporté).
    • Evénements, notes (y compris RSVPs), les réponses acceptent les webmentions (en date du 2013-05-26)
    • Discoverty avec les deux : liens rel="webmention" et rel="http://webmention.org/" dans le head, et HTTP Lien : rel="http://webmention.org/ header
    • Notes (y compris RSVPs), les réponses ont un formulaire de saisie à coller dans votre URL de commentaire pour envoyer proprement une webmention manuelle (en date du 2013-10-12)
  • Ben Werdmuller en utilisant idno sur werd.io en date du 2013-05-31. Détails :
    • Tous (?) les posts envoient des webmentions en date du 2013-05-31 et les acceptent à partir du 2013-06-??
    • Discovery with both: rel="http://webmention.org/" and rel="webmention" links in head, and with HTTP Link: <http://werd.io/webmention/>; rel="webmention"
  • Barnaby en utilisant Taproot sur waterpigs.co.uk en date du 2013-06-11 (selon git). Détails :
    • Toutes les notes et articles acceptent (en date du 2013-06-20) et envoient des webmentions (en date du 2013-06-11) sur le post (l'UI de post renvoie un contenu de réponse au navigateur, puis envoie simultanément les webmentions)
    • les webmentions entrantes pour les notes et articles sont parsées et stockées, affichées pour des notes (commentaire mis à jour en date du 2013-06-23) mais pas encore pour les articles
    • Découverte uniquement avec HTTP Link: <http://waterpigs.co.uk/mentions/webmention/>; rel="http://webmention.org/"



  • Jeremy Keith sur adactio.com en date du 2013-09-15. Détails :
    • Tous les posts de blog acceptent les webmentions
    • Découverte seulement avec : un lien rel="webmention" dans le head
    • Les posts de blog ont un formulaire de saisie à coller dans votre URL de commentaire pour envoi d'une webmention manuelle si besoin.
  • Barry Frost sur barryfrost.com en date du 2013-09-15[2][3]. Details:
    • Tous (?) les posts envoient et acceptent les webmentions
    • Découverte avec un lien rel="webmention" dans le head, et un lien HTTP Link: <http://barryfrost.com/webmention>; rel="webmention" dans le header
    • Les posts ont un hyperlien dans le footer "How to comment on this post" pour des instructions détaillant de poster un h-entry avec h-card et comment envoyer une webmention.
  • Bear sur bear.im en date du 2013-12-01.
    • Tous les posts envoient et acceptent les webmentions
    • Découverte avec les deux : liens rel="webmention" et rel="http://webmention.org/" dans le head, et header HTTP Link: rel="http://webmention.org/
    • les webmentions entrantes sont validées et stockées, mais pas encore ajoutées dans les articles appropriés.
  • Kartik Prabhu sur kartikprabhu.com en date du 2013-12-03.
    • Tous les articles acceptent les webmentions
    • Découverte uniquement avec : link rel="webmention" dans le head
    • Les articles ont un formulaire de saisie pour envoyer une webmention manuelle inspirée par adactio.com
    • Les webmentions sont sauvegardées sous forme de réponses et apparaissent sous l'article avec un fragment et un lien vers l'original.
    • Tous les articles envoient des webmentions automatiquement aux liens au moment de la publication.
    • Durant la modification et la mise à jour, l'article envoie des mentions à tous les liens nouvellement ajoutés et tous les liens retirés.
  • Pelle Wessman utilise webmention.herokuapp.com sur voxpelli.com en date du 2013-12-18. Détails :
    • Tous les billets de blog acceptent les webmentions
    • Découverte seulement avec : link rel="webmention" dans le head
    • Les posts de blog ont un formulaire de saisie pour collage dans votre URL de commentaire pour envoyer à propos une webmention manuelle

En progrès. Les membres de la communauté IndieWeb sont en train de travailler sur le code pour envoyer et/ou recevoir des webmentions:

  • Christian Weiske receiving webmentions on cweiske.de as of 2013-10-22. Détails :
    • Tous les posts acceptent les webmentions en utilisant stapibas
    • Découverte uniquement avec HTTP Link: <http://cweiske.de/stapibas/xmlrpc.php>; rel="webmention"
    • En cours de travail sur l'envoi de webmentions (avec envoi fallback des pingbacks)
      • https://github.com/pear2/Services_Linkback/blob/master/src/PEAR2/Services/Linkback/Client.php#L236
      • Approche : vérifier le feed Atom feed, s'il y a des mises à jours alors procéder à la découverte/envoi pour chaque mise à jour, pour chaque lien dans la mise à jour : faire d'abord une requête HEAD, faire une discovery pour le endpoint webmention, si rien de trouvé, faire une discovery pour le endpoint pingback, si rien trouvé et si la ressource est 'application/xhtml+xml' ou 'text/html', faire une requête GET, faire une discovery pour le endpoint webmention, si rien trouvé, faire une discovery pour le endpoint pingback, envoyer la webmention si un endpoint a été trouvé, autrement envoyer un pingback si un endpoint a été trouvé.

Bibliothèques

Envoi

Pour la découverte du endpoint webmention :

  • link_rel_parser : http_rels($h) & head_http_rels($url) - parseur chaîne header HTTP en PHP pour RFC5988 Link : rels (incluant X-Pingback) & fonction curl vers requête HEAD et parsage tout en un).
  • phpish/link_header - parseur du header Link (RFC 5988) en PHP
  • PEAR: HTTP2 (documentation) - parseur du header Link (RFC 5988) en PHP
  • ronkyuu - librairie client Python et outils ligne de commande

Gestion

Gérer la réception de webmentions :

Pour parser les mentions, ce qui suit peut être pratique :

Logiciel de Publication

Quelques logiciels de publication open source supporte les webmentions.

  • idno envoie des webmentions et accepte les commentaires webmention
  • p3k envoie des webmentions pour tous les posts et accepte les commentaires webmention sur les événements, notes, réponses, RSVPs
  • Taproot

Des plugins existent pour quelques logiciels de publication open source :

Services

Quelques services qu'on peut utiliser pour recevoir et utiliser des webmentions.

webmention.herokuapp.com

webmention.herokuapp.com reçoit les webmentions pour toute page enregistrée et permet les webmentions par javascript.

Bridgy

Article principal : Bridgy-fr

brid.gy est un service qui envoie des webmentions pour des commentaires/réponses, likes, et reposts sur les posts Facebook, Twitter, Google+, et Instagram. Cela utilise la découverte du post original pour trouver les liens cibles pour les webmentions. GitHub repo here.

webmention.io

Article principal : webmention.io

webmention.io est un projet open-source et un service hébergé pour recevoir des webmentions et pingbacks pour le compte de votre site indieweb.

Wish List

  • Un petit fichier, sans dépendances qui peut rapatrier la data de l'indiecommentaire à partir de webmention.io et le purger dans un élément, permettant un support indiecomment en deux étapes :
    • ajouter un <link> à webmention.io
    • inclure ce script et ajouter quelque élément <div data-indiecomments data-url="blah"> où vous voulez qu'ils apparaissent.

Problèmes

  • Ne pas spécifier un format de réponse requis et/ou les structures de formats de réponse est problématique car un client ne peut jamais être sûr de pouvoir lire la réponse.
    • Heureusement, comme le faisait remarquer Aaron Parecki, s'il il y a une erreur, savoir exactement ce qui a provoquée cette webmention n'est pas vraiment très utile si ce n'est de débugger, là où la réponse sera lue par un humain.
    • Un consensus semble se faire par défaut vers un message erreur/succès en plein texte, ou si un header d'acceptation peut alors peut-être le sérier si requis, par ex. HTML ou JSON. [4] Le cas d'usage pour HTML se fait dans l'envoi navigateur --Waterpigs.co.uk 08:58, 22 October 2013 (PDT)
  • Est-que la mise en favoris devrait envoyer une webmention ? Et s'il y a des milliers de mises en favoris ? Comment distinguer les liens normaux des signets ? - http://indiewebcamp.com/irc/2013-06-11#t1370966945
    • Je pense que la "mise en favoris" le devrait oui, tout comme le font les favoris et les likes. - Tantek 14:53, 13 August 2013 (PDT)
  • Asynchronicité : un serveur peut vouloir mettre les webmentions en file d'attente pour le process de retrouver la source et faire ça de manière asynchrone avec la requête. Ce n'est pas toujours pratique ou recommandable de gérer tout ce processus dans le fil véritable HTTP POST. Par conséquent, les récipiendaires de webmentions ne sont pas obligés de renvoyer des erreurs no_link_found. - Tantek 14:53, 13 August 2013 (PDT)
  • Mise à jour : il est acceptable d'envoyer une webmention répétée, par ex. pour la mise à jour ou l'effacement de commentaires. Par conséquent, l'erreur already_registered de doit pas être requise, et ne devrait probablement même pas être une erreur dans le premier cas. - Tantek 14:53, 13 August 2013 (PDT)

Brainstorming

Découverte en PHP

La découverte automatique pourrait être implémentée en PHP en :

  • cherchant un lien header utilisant une librairie de requête HTTP pour recevoir les rels
    • link_rel_parser.php :
      • utiliser head_http_rels($url) pour curler une requête HEAD et à partir de la valeur renvoyée info récupérer HTTP info["status"] et info["rels"] sous un array rels s'il y en a.
      • if you already have the raw HTTP header, use http_rels($h) to get a rels array
    • and then lookup rels["webmention"] for webmention endpoints
  • if no Link: for webmention found then
    • use PHP DOMDocument to search the retrieved document for the first <link rel="webmention"> element (or first that matches selector: head link[rel~=webmention] )
  • end if

Problème Réponse Variable Body

Pour gérer le problème de la réponse variable dans la body :

  • Faire que le body de la réponse soit optionnel
  • Envoyer l'information erreur dans un header réponse, dans un format probablement similaire au statut :
    • par ex. X-Webmention: 16 Source URI Not Found ou X-Webmention-Response: 17 Not Linking
    • Ré-utiliser les codes sémantique + erreur de la spec pingback [5]

rel webmention

  • Peut-être que rel=webmention devrait être ajouté à HTML5 rel registry (supercedes/obsoletes IETF/IANA 'Web Linking').
    • I'll take this up if there is enough consensus that we need it. I prefer the current URL based rel because it can be followed easily to get more info. Www.sandeep.io 06:08, 30 June 2013 (PDT)
      • I'm happy to draft-up a rel-webmention spec and add it to the HTML5 rel registry if we decide we want this. Also ok with just keeping the URL for now. - Tantek 17:46, 30 June 2013 (PDT)
      • rel=webmention is now registered in the HTML5 rel registry, and points to webmention.org as the spec. - Tantek 14:32, 13 August 2013 (PDT)
      • Let's have rel=webmention supersede the .org URL value as rel=webmention is shorter, more readable in rel values / HTTP headers, and follows more standard term based rel value naming conventions. - Tantek 21:40, 17 October 2013 (PDT)

Alternatives

Alternatives à webmention.

verbe LINK

James Snell porte une suggestion d'utiliser le verbe HTTP LINK pour envoyer la notification webmention. Ceci retirerait le besoin de produire d'abord la requête de découverte pour trouver le endpoint webmention, parce que cela pourrait envoyer immédiatement la requête LINK à l'URL elle-même.

Le problème est que cela recevra très probablement bien moins d'adoption d'utiliser le verbe LINK. L'étape de découverte ajoute une opportunité d'ajouter une couche d'indirection, qui nous permet de séparer le serveur qui gère la webmention. Bien que la découverte soit une étape supplémentaire, elle apporte en même temps beaucoup d'avantages. Par exemple, il ne serait pas possible d'avoir un site statique HTML gérer la requête HTTP LINK, tandis qu'il pourrait déléguer à un service de webmention en utilisant la balise <link>. En outre, quelques environnements d'hébergements peuvent ne pas fournir un moyen de gérer la requête LINK là où un POST normal fonctionnerait.

Du fait des avantages et de la flexibilité ajoutés par l'étape de découverte, nous avons besoin de nous accrocher ça et de ne pas utiliser le verbe LINK aussi cool qu'il puisse paraître.

http://aaronparecki.com/replies/2013/08/08/2/webmention

Voir aussi