Salmon (protocole)

Le Protocole Salmon est un protocole d'échange de messages par HTTP conçu pour décentraliser les commentaires et les annotations sur les fils d'actualité comme les articles de blog.

Il permet qu'un seul fil de discussion soit établi entre la source de l'article et n'importe quel lecteur de flux ou "agrégateur", qui s'abonne au contenu. Dit simplement, si un article apparaît sur 3 sites : A (la source), B et C (agrégateurs), les membres des 3 sites peuvent voir et contribuer à un même fil de conversation, indépendamment du site qu'ils utilisent.

Exemple

La source de contenu doit fournir un endpoint (ou point de terminaison) - une URL dans les métadonnées d'un flux RSS/Atom, qui sera pris en compte par le site agrégateur. Si un membre de l'agrégateur fait un commentaire, l'agrégateur va construire un commentaire destiné à la source.

<?xml version='1.0' encoding='UTF-8'?>
<entry xmlns='http://www.w3.org/2005/Atom'>
  <id>tag:example.com,2009:cmt-0.44775718</id>
  <author><name>[email protected]</name><uri>[email protected]</uri></author>
  <thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0'
    ref='tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954'>
    tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954
  </thr:in-reply-to>
  <content>Salmon swim upstream!</content>
  <title>Salmon swim upstream!</title>
  <updated>2009-12-18T20:04:03Z</updated>
</entry>

Le commentaire sera encodé en base64, signé numériquement, placés dans une enveloppe et posté à l'origine par le point de terminaison.

POST /salmon-endpoint HTTP/1.1
Host: example.org
Content-Type: application/atom+xml

<?xml version='1.0' encoding='UTF-8'?>
<me:env xmlns:me="http://salmon-protocol.org/ns/magic-env">
    <me:data type='application/atom+xml'>
    PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxlbnRyeSB4bWxucz0naHR0
    cDovL3d3dy53My5vcmcvMjAwNS9BdG9tJz4NCiAgPGlkPnRhZzpleGFtcGxlLmNvbSwyMDA5OmNt
    dC0wLjQ0Nzc1NzE4PC9pZD4NCiAgPGF1dGhvcj48bmFtZT50ZXN0QGV4YW1wbGUuY29tPC9uYW1l
    Pjx1cmk+Ym9iQGV4YW1wbGUuY29tPC91cmk+PC9hdXRob3I+DQogIDx0aHI6aW4tcmVwbHktdG8g
    eG1sbnM6dGhyPSdodHRwOi8vcHVybC5vcmcvc3luZGljYXRpb24vdGhyZWFkLzEuMCcNCiAgICBy
    ZWY9J3RhZzpibG9nZ2VyLmNvbSwxOTk5OmJsb2ctODkzNTkxMzc0MzEzMzEyNzM3LnBvc3QtMzg2
    MTY2MzI1ODUzODg1Nzk1NCc+DQogICAgdGFnOmJsb2dnZXIuY29tLDE5OTk6YmxvZy04OTM1OTEz
    NzQzMTMzMTI3MzcucG9zdC0zODYxNjYzMjU4NTM4ODU3OTU0DQogIDwvdGhyOmluLXJlcGx5LXRv
    Pg0KICA8Y29udGVudD5TYWxtb24gc3dpbSB1cHN0cmVhbSE8L2NvbnRlbnQ+DQogIDx0aXRsZT5T
    YWxtb24gc3dpbSB1cHN0cmVhbSE8L3RpdGxlPg0KICA8dXBkYXRlZD4yMDA5LTEyLTE4VDIwOjA0
    OjAzWjwvdXBkYXRlZD4NCjwvZW50cnk+
    </me:data>
    <me:encoding>base64url</me:encoding>
    <me:alg>RSA-SHA256</me:alg>
    <me:sig>
    EvGSD2vi8qYcveHnb-rrlok07qnCXjn8YSeCDDXlbhILSabgvNsPpbe76up8w63i2f
    WHvLKJzeGLKfyHg8ZomQ
    </me:sig>
</me:env>

Le commentaire est mis alors à disposition par la source de contenu pour les sites agrégateurs, qui n'auront qu'à actualiser leurs données sur la conversation. Le protocole fournit la sécurité, de sorte que chaque agrégateur et chaque membre est identifié de manière unique afin que la source puisse utiliser des mesures d'interdiction ou de filtrage pour les sites malicieux, ou bien pour les membres si souhaité.

Applications

Les réseaux sociaux fédérés tels que GNU Social et Diaspora utilisent Salmon tel que défini dans la spécification OStatus pour coordonner les discussions entre les membres appartenant à différents serveurs. Un membre d'un serveur peut publier un article qui est diffusé à d'autres utilisateurs sur le réseau via Salmon, qui à leur tour peuvent commenter de façon similaire.

Voir aussi




Liens externes

  • Saumon Protocole (en) - La page d'accueil et d'information technique sur le protocole