Arbeiten mit Web-Feeds: Es ist mehr als RSS

Farai Gandiya - 16. Dezember 2021

Zwischen Google Chrome, das "Seiten folgen" testet, und einer wachsenden Frustration darüber, wie Social-Media-Plattformen die Reichweite von Kreativen zu ihren Fans durch algorithmische Feeds einschränken, gab es ein erneutes Interesse an RSS-Feeds, und sie sind bereit für ein Comeback im Jahr 2022.

Diese Recherche wird durch die Unterstützung von Frontend Masters, dem offiziellen Lernpartner von CSS-Tricks, ermöglicht.

Benötigen Sie Schulungen für die Front-End-Entwicklung?

Frontend Masters ist der beste Ort dafür. Sie haben Kurse zu allen wichtigen Frontend-Technologien. Interessiert daran, Full-Stack zu werden? Hier ist Ihre beste Wahl

Sie haben vielleicht das Flüstern gehört, dass "RSS tot ist", aber die Wahrheit ist, dass sie immer noch weit verbreitet sind, da praktisch jeder Podcast einen nutzt. Vielleicht waren Sie früher ein RSS-Fan und müssen sich wieder damit vertraut machen. Oder vielleicht sind Sie wie Chris hier bei CSS-Tricks und lieben RSS immer noch. Wie auch immer, RSS ist eine Webtechnologie wie jede andere, und es gibt Best Practices dafür, wie man einen Feed erstellt und kuratiert.

Genau das werde ich Ihnen in diesem Artikel erklären. Sprechen wir über die verschiedenen Arten von Feeds, wie man sie implementiert und welche Strategien Sie anwenden können, um das Beste aus Ihren Feed-Inhalten herauszuholen.

RSS vs. Atom vs. JSON

Glauben Sie es oder nicht, RSS ist nur eines von vielen Formaten für syndizierte Web-Feeds. Die gängigsten Formate sind

  1. RSS
  2. Atom
  3. JSON Feed

Ich habe RSS verwendet, um diese Formate zu bezeichnen, da es ein weitaus populäreres Suchwort ist, aber ich werde diese Technologien in diesem Artikel als Web-Feeds bezeichnen, es sei denn, ich beziehe mich auf ein bestimmtes Format.

On Sept 26–Oct 2, 2021, RSS had 37 points, web 6, atom 2 and jsonfeed 0. S
Google Trends für Atom, JSON, RSS und Web-Feeds. (Quelle: Google Web Trends)

Obwohl Atom-, RSS- und JSON-Feeds dasselbe bewirken, gibt es einige Unterschiede zwischen ihnen

  • Atom und RSS basieren auf XML, während ein JSON-Feed auf – nun ja – JSON basiert.
  • Alle diese Formate können in gewisser Weise erweitert werden. In einem JSON-Feed geschieht dies durch Hinzufügen eines Objekts mit einem Schlüssel, der mit einem Unterstrich beginnt, irgendwo im Objekt eines Feeds. Mit Atom und RSS tun Sie dies, indem Sie den Namespace auf dem Stammelement deklarieren. Ein Beispiel hierfür sind Podcast-Feeds, die den iTunes-Podcast-Namespace deklarieren und die Verwendung von <itunes:*>-Tags ermöglichen.
  • JSON Feed ist ein neueres Feed-Format, was bedeutet, dass die Unterstützung dafür möglicherweise nicht so breit gefächert ist wie bei Atom oder RSS. Wenn Sie jedoch einen Podcast haben, ist RSS ein Muss.
  • Während alle Formate eine eindeutige Kennung für jeden Eintrag/Artikel erfordern, geht Atom einen Schritt weiter, da es eine eindeutige Kennung für jeden Feed erfordert.
  • Alle erlauben HTML-Markup, obwohl sie es unterschiedlich handhaben. JSON verwendet den Schlüssel content_html, der JSON-escaped HTML enthält. Atom verwendet das Tag content mit type=html, das XML-escaped HTML enthält. RSS verwendet das Tag <description> (oder die content-Erweiterung), das entweder XML-escaped HTML oder HTML unescaped in einem <![CDATA[]]>-Tag enthält.

Abgesehen von diesen Dingen gibt es nur geringfügige Unterschiede zwischen ihnen. Sie denken vielleicht, dass die Dateigröße ein möglicher Unterschied sein könnte, aber Kompression reduziert sie alle auf wenige Kilobytes pro Stück. Es sei denn, Ihre Anwendung hat einen spezifischen Anwendungsfall, der ein bestimmtes Format erfordert (wie Podcasts), schadet es nicht, mehrere Formate bereitzustellen, aber RSS und Atom haben die meiste Unterstützung.

Was macht einen "guten" Feed aus?

Betrachten wir einige Best Practices für die Erstellung von Feeds. Wie bei den meisten Dingen im Web gibt es Dinge, die wir tun können, um unsere Arbeit zu optimieren und das Beste daraus zu machen.

1. Er ist leicht zu finden

Es hilft nichts, einen Feed zu haben, wenn niemand davon weiß. Und eine Möglichkeit, einen Feed auffindbar zu machen, ist die Verlinkung im <head> Ihrer Website. So können Feed-Reader Ihren Inhaltscrawl durchführen und erkennen, wenn eine Website einen Inhaltsfeed anbietet.

Hier ist ein Beispiel, das alle drei Formate im Dokumentenkopf verlinkt

<head>
  <link rel="alternate" type="application/rss+xml" href="https://codelab.farai.xyz/index.rss.xml" title="Farai's Codelab's RSS Feed" />
  <link rel="alternate" type="application/feed+json" href="https://codelab.farai.xyz/index.feed.json" title="Farai's Codelab's JSON Feed" />
  <link rel="alternate" type="application/atom+xml" href="https://codelab.farai.xyz/index.atom.xml" title="Farai's Codelab's ATOM Feed" />
  <!-- etc. -->
</head>

Und ja, es ist in Ordnung, alle drei zu verwenden! Sie können so viele Links angeben, wie Sie möchten, obwohl einige Feed-Reader möglicherweise nur den ersten erkennen. Wichtig ist, dass ein Link rel="alternate" und der MIME-type des Feeds enthält. Es gibt auch die Möglichkeit, einen Titel hinzuzufügen, was nie schadet.

Was können Sie noch tun, um Ihren Feed leicht auffindbar zu machen? Bewerben Sie ihn! Platzieren Sie direkte Links zu den Feeds gut sichtbar auf Ihrer Website, damit die Leute sie kopieren und in ihren Feed-Reader einfügen können.

Das macht CSS Tricks. Dies ist der Link zum RSS-Feed der Website und er ist im Footer der gesamten Website verfügbar. Einige Feed-Reader können diese Links auch erkennen, auch wenn sie sich außerhalb des <head> befinden.

Screenshot of the CSS-Tricks footer showing a column of links with the heading Follow, and links for social networks, including the site's RSS feed. The background is near black, the headings are orange, and the links are light gray.
Oh, Sie möchten den CSS-Tricks RSS-Feed abonnieren? Bitte tun Sie das! Ihr RSS-Feed ist genauso wichtig zu verfolgen wie jedes soziale Netzwerk.

Was die Benennung des Feeds selbst betrifft, so spielt es keine Rolle, solange er auffindbar ist. Hier ist ein guter Überblick darüber, wie verschiedene Websites ihre Feeds benennen, aber ich habe meine feed.json, feed.rss.xml und feed.atom.xml für JSON Feed, Atom und RSS benannt.

2. Er nutzt HTTP aus

Es gibt bestimmte grundlegende Funktionen des Webs, die genutzt werden können, um Ihre Feeds ein wenig besser zu machen.

Komprimieren Sie Ihre Feeds beispielsweise, da dies die Gesamtdateigröße und die Downloadzeit erheblich reduziert. Die meisten Server können dies für Sie übernehmen, indem sie gzip, Brotli oder eine andere Komprimierungsmaschine verwenden.

Ebenso ist es eine gute Idee, entweder ETags oder If-Modified-Since zu unterstützen, da beide es Clients ermöglichen, Feeds zu cachen und den Browser darüber informieren, ob eine neuere Version des Feeds bereit ist, bevor er heruntergeladen wird. Ähnlich wie bei der Komprimierung kann Ihr Server dies ebenfalls übernehmen.

Eine weitere Sache, die Sie tun sollten: Ermöglichen Sie permissives CORS. Andernfalls könnten Clients daran gehindert werden, den Feed abzurufen. Und obwohl Sie die Sicherheitsauswirkungen berücksichtigen sollten, wenn Sie zulassen, dass jede beliebige Website Ihren Feed abruft, ist es höchst unwahrscheinlich, dass dies für die meisten kleinen Websites und Feeds ein großes Problem darstellt. Diese Einzeiler reichen aus, um CORS zu aktivieren

Access-Control-Allow-Origin: *

3. Er zeigt vollständige Inhalte statt Zusammenfassungen an

Dies ist rein eine Frage der Benutzerfreundlichkeit. Sie haben dies vielleicht selbst erlebt, als Sie einen RSS-Feed abonniert haben und nur den ersten Absatz oder eine Zusammenfassung des Beitrags erhalten. Warum? Das traditionelle Denken ist, dass die Bereitstellung nur einer Zusammenfassung die Benutzer ermutigt, auf Ihre Website zu klicken, was zu mehr Besuchen führt. Und mehr Besuche bedeuten mehr Augen, was mehr Einnahmen bedeutet, usw.

Ich empfehle, dies zu vermeiden und stattdessen Ihre Feeds den vollständigen Inhalt jedes Beitrags/Eintrags/Elements senden zu lassen. Viele Benutzer lesen Inhalte lieber in einem Feed-Reader, da dieser Wert auf Lesbarkeit legt.

Wenn Sie sich Sorgen machen, dass jemand Ihren Inhalt unredlich abschöpft und auf seiner eigenen Website anzeigt, weil Sie den vollständigen Inhalt bereitstellen, lassen Sie mich Ihnen versichern: Es ist nicht schwieriger, eine Webseite zu einem syndizierten Feed zu machen.

Und wenn Sie ein Verleger sind, der auf Display-Anzeigen angewiesen ist, und sich Sorgen über die Auswirkungen machen, die die Übermittlung vollständiger Inhalte auf Ihre Einnahmen haben könnte: Sie können immer noch statische Anzeigen direkt in Ihren Feed-Inhalt einfügen. Außerdem können einige Reader die Webseite, die mit einem Feed-Eintrag verbunden ist, parsen, sodass sie auch im Reader gelesen werden kann.

Dark UI with blue links and light gray text showing an article from a blog.
N/N Group-Artikel, gerendert im NetNewsWire-Reader

Aber lassen Sie uns nicht dogmatisch sein, denn es gibt Situationen, in denen Zusammenfassungen sinnvoll sind. Eine davon ist, wenn ein Feed viele lange Einträge enthält. Eine andere ist, wenn Sie reichhaltige Inhalte haben, die nur auf eine bestimmte Weise betrachtet werden können (denken Sie an Show Notes für einen Podcast). Machen Sie in diesem Fall eine gute Zusammenfassung. Ein Beispiel ist RSS von Nielsen Norman Group, das eine Zusammenfassung und einen Auszug bis zum ersten <h2>-Tag enthält.

Wenn ich jemals beschließen sollte, nur Zusammenfassungen in meinem Feed anzuzeigen, würde ich sicherstellen, dass ich zusätzlich zur Zusammenfassung ein Bild, eine Übersicht über die wichtigsten Punkte des Inhalts und einen Link zur kanonischen Version hinzufüge. Es ist zwar etwas Arbeit, gibt dem Leser aber eine Vorstellung davon, was ihn erwartet, im Gegensatz zu einigen Feeds, die ich gesehen habe und die den Inhalt nur auf die ersten paar Wörter verkürzen.

Showing a post title in white with the published date and time below it in light gray. Below that is an image of a tired looking man with dark slicked back hair holding a 10 of diamonds card. Below that is the first sentence of a post that breaks mid-sentence.
Ja? Möchten Sie den Satz beenden?

4. Er ist zum *Lesen* konzipiert

Berücksichtigen Sie bei der Erstellung von Inhalten, wie diese außerhalb des Kontexts eines Webbrowsers, an Orten, an denen JavaScript und CSS eingeschränkt sind, angezeigt werden könnten. Sara Soueidan hat eine Reihe von Tipps und Ideen, die es wert sind, angesehen zu werden. Die Hauptidee: bieten Sie eine gute Fallback-Erfahrung für Ihre Inhalte.

Dies ist hauptsächlich ein Problem bei eingebetteten Elementen. Während einige Einbettungen Fallback-Inhalte in ihrer Markup enthalten (wie die eingebetteten Tweets von Twitter und die eingebetteten Pens von CodePen), tun dies andere möglicherweise nicht. Bestimmte Einbettungen (einschließlich Videos, die auf Vimeo veröffentlicht wurden) können nur auf bestimmten Domains eingebettet werden, was bedeutet, dass sie in einem Feed-Reader nicht angezeigt werden. Sie müssen also eine Möglichkeit bieten, sie anzuzeigen, z. B. ein Bild oder einen Link zu einer Webseite.

Derselbe Artikel, der sowohl in Microsoft Outlook (links) als auch in NetNewsWire (rechts) gerendert wird. Der Artikel enthält drei Einbettungen, eine von Twitter, eine von YouTube und die dritte von TinkerCad), bei denen jede eine Form von Fallback-Inhalt für eine bessere Leseerfahrung enthält.

Es gibt viele Möglichkeiten, Fallbacks zu implementieren. Die Einbettung von Twitter fällt auf ein <blockquote> zurück – was angesichts der Tatsache, dass ein Tweet einer Art Zitat ähnelt, absolut sinnvoll ist – und einen Link zum Tweet selbst, der es einigen Clients, die keine Einbettungen unterstützen, wie Outlook, ermöglicht, die Inhalte effektiv auf eine Weise zu rendern, die für den Benutzer weiterhin zugänglich ist.

Obwohl NetNewsWire gut mit Einbettungen umgeht, verhindert YouTube manchmal, dass Videos wie hier abgespielt werden. Stattdessen fällt die Einbettung auf einen Link zurück, der den Benutzer zum Ansehen auf der YouTube-Website weiterleitet. Outlook unterstützt keine YouTube-Einbettungen (oder überhaupt Einbettungen), aber ein beschreibender Link zum Video auf YouTube ist immer noch verfügbar.

Die Moral von der Geschichte: Kennen Sie Ihre Leser und wie sie Inhalte rendern, damit Sie die bestmögliche Fallback-Erfahrung bieten können.

Vorsicht vor relativen URLs

Ein großes Problem bei Feeds ist die Auflösung relativer URLs für Bilder und Links. Die Auflösung basierend auf dem kanonischen Link des Feeds mag funktionieren, aber was passiert, wenn sich dieser Link in einem Unterverzeichnis befindet? Die XML-Formate könnten das Attribut xml:base verwenden, das die Basis-URL für die Auflösung relativer URLs definiert, aber das wird nur von Atom unterstützt und von den meisten Readern ignoriert und als veraltet betrachtet.

Die robusteste Lösung ist die Verwendung absoluter URLs für jede href und src im Inhalt eines Eintrags. Das bedeutet, dass das Markup etwa so aussieht

<p>Read <a href="https://css-tricks.de/archives/">all our articles</a>.</p>

…und weder das hier

<p>Read <a href="/archives/">all our articles</a>.</p>

…noch das

<p>Read <a href="archives/">all our articles</a>.</p>

Dies ist schwer automatisch zu machen, insbesondere bei statisch generierten Websites. Ein Ansatz ist, relative URLs nach der Kompilierung des Feeds in einer Build-Pipeline in absolute URLs umzuwandeln. Ein anderer Ansatz ist, die Art und Weise zu manipulieren, wie Markdown-Links und Bilder von Ihrem Static Site Generator gerendert werden, sodass die URLs absolut sind. Ich hoffe, dass mehr Static Site Generatoren die zweite Option zulassen, aber vorerst ist Hugo der einzige Static Site Generator, der dies durch Markdown-Render-Hooks unterstützt.

Aber warten Sie, es gibt eine Ausnahme von dieser Regel. Und das sind Fußnoten. Einige Reader können Fußnoten erkennen und sie verarbeiten. Hier ist etwas HTML, das in jedem Feed-Reader funktionieren sollte, der relative Sprunglinks unterstützt

<p>They’d managed to place 27.9MB of images onto the Critical Path. 
Almost 30MB of previously non-render blocking assets had just been 
turned into blocking ones on purpose with no escape hatch. Start 
render time was as high as 27.1s over a cable connection<sup id="fnref:1">
  <a href="#fn:1" class="footnote">1</a></sup>.</p>

<div class="footnotes">
  <ol>
    <li id="fn:1">
     <p>5Mb up, 1Mb down, 28ms RTT. <a href="#fnref:1" class="reversefootnote">↩</a></p>
    </li>
  </ol>
</div>

Umgang mit Anzeigen in Feeds

Sie werden unwahrscheinlich JavaScript-Unterstützung in einem RSS-Reader erhalten, und das bedeutet keine Anzeigen, die mit einem Anzeigenserver verbunden sind. Mit anderen Worten, Anzeigen müssen Teil Ihres Inhalts sein, anstatt dynamisch eingefügt zu werden.

Showing an advertisement for anima that displays a brightly colored image, text below the image that says our sponsor, followed by the post title in blue, a blurb from the article content, them a blue learn more link.
Der Codrops-Newsletter ist ein Beispiel, das dies gut macht. Der Newsletter enthält ein gesponsertes Bild und Text und gibt klar an, dass der Inhalt gesponsert ist.

PSA: Nicht alle Inhalte müssen in einen Feed aufgenommen werden

Ich habe Feeds gesehen, in denen jedes veröffentlichte Inhaltspaket enthalten und bis zum allerersten Eintrag im Feed verfügbar ist. Ich sehe auch viele Feeds von Verlegern, die Dutzende von Einträgen pro Tag posten. In beiden Fällen empfehle ich, sowohl die Menge der aus vergangenen Archiven verfügbaren Inhalte zu begrenzen als auch mehrere Feeds anstelle eines einzelnen in Betracht zu ziehen.

Perfektes Beispiel. Schauen Sie sich den Feed von MacRumors.com an, da er äußerst aktiv ist und täglich Dutzende neuer Artikel veröffentlicht werden. Können Sie sich vorstellen, in diesem Feed zu einem Artikel von, sagen wir, vor 10 Jahren zurückzukehren? Wahrscheinlich nicht. Es sei denn, der Feed ist für einen Podcast, bei dem das Speichern jeder Episode sinnvoll ist, versuchen Sie, die Anzahl der im Feed gespeicherten Einträge zu begrenzen, da Benutzer wahrscheinlich mehr an neueren Inhalten interessiert sind. Dies reduziert die Bandbreite und die Aktualisierungszeiten, was besonders wichtig ist, da Benutzer viele Feeds aktualisieren müssen.

Ich bin versucht zu sagen, dass 10-15 Beiträge genug sind, um zu speichern und anzuzeigen, aber wie bei vielen Dingen "kommt es darauf an". Während die Speicherung von einigen wenigen für eine Website, die mehrmals im Monat neue Inhalte veröffentlicht, sinnvoll ist, können andere Websites, die viel häufiger posten, dies an einem Tag überschreiten. Die ideale Anzahl von Beiträgen hängt also wirklich von der Art der von Ihnen veröffentlichten Inhalte ab (sind sie zeitkritisch oder immergrün?) und sowohl vom Volumen als auch von der Häufigkeit Ihrer Veröffentlichungen (sind es viele über den Tag verteilt oder wenige pro Monat?).

Aber worauf ich wirklich hinauswill, ist, dass Sie vermeiden wollen, Benutzer zu überwältigen, indem Sie sie mit einem Stapel von Artikeln eindecken, durch die sie sich kämpfen müssen. Ein paar Möglichkeiten, dies zu vermeiden, sind

  • Anzeigen von Zusammenfassungen anstelle vollständiger Inhalte (siehe, eine weitere Ausnahme von einer früheren Regel!), und
  • Filtern von Inhalten, sodass Benutzer aus mehreren Feeds für bestimmte Inhaltsarten wählen können. Mit anderen Worten, wenn Sie jeden einzelnen Beitrag (oder eine vollständige Zeitleiste zu einem bestimmten Thema) bereitstellen möchten, sollten Sie einen dedizierten Feed für dieses Thema/diese Kategorie/diesen Tag/was auch immer erstellen.

Der Grund, warum ich so pingelig auf die Größe eines Feeds bin, ist, dass – wie bei Bildern, Skripten und anderen Assets – die Anzahl und Größe von Feeds die Leistung eines Feed-Readers beeinflusst. Je mehr Feeds ein Benutzer abonniert und je mehr Einträge aus diesen Feeds abgerufen werden müssen, desto länger dauert das Aktualisieren und Anzeigen dieser Inhalte.

Feeds verschieben

So wie Websites ihre Domänen ändern können, müssen Sie möglicherweise einen Feed von seiner aktuellen Adresse verschieben. Das ist nicht besonders schwierig, aber es gibt wichtige Dinge zu beachten, bevor Sie einen Umzug vornehmen.

Zum Beispiel ist es eine gute Idee sicherzustellen, dass die Einträge Ihres Feeds eine globale eindeutige Kennung (GUID) haben. Dies entspricht dem guid in RSS und dem id in Atom und JSON. Die GUID verhindert, dass Feed-Reader doppelte Einträge abrufen. Dies ist umso wichtiger (und herausfordernder), wenn Sie mit einer statischen Website arbeiten.

Obwohl es verlockend sein mag, den Permalink des Eintrags als Kennung zu verwenden, denken Sie daran, dass sich diese ändern können. Um eine GUID zu erstellen, empfehle ich, eine Tag URI zu verwenden. Eine Tag URI besteht aus

  • einer Autorität (d. h. der Domain der Website)
  • einem Datum (das einen Zeitpunkt angibt, zu dem die Tagging-Entität die mit dem Feed verbundene Autoritätsbezeichnung kontrollierte)
  • die spezifische URL zum Abrufen
  • ein Fragment (das eine Unterressource oder ein Zeitstempel sein kann)
tag:<authority>,<YYYY-MM-DD>:<specific>#<fragment>

Der <spezifische>-Teil könnte so etwas wie der relative Teil der URL Ihrer Website-Homepage sein (d. h. /), und das Fragment kann der veröffentlichte Zeitstempel des Inhalts sein. Zum Beispiel könnte ein Beitrag hier auf CSS Tricks eine Tag URI haben, die so aussieht

tag:css-tricks.com,2021-16-11:/#1637082038781

Auf diese Weise stellt das Autoritätsdatum sicher, dass die Domain selbst dann nicht verloren geht, wenn sie den Besitzer wechselt. Außerdem kann sie in einem Static Site Generator verwaltet werden, da Sie Domainänderungen im Laufe der Zeit verfolgen können.

Der wichtigste Grund, warum ich das Tag URI-Schema empfehle, ist, dass Atom die id eines Feeds im URL-Format erfordert. Auch wenn RSS und JSON nicht dieselbe Einschränkung haben, funktioniert das Tag URI-Schema auch für sie, was bedeutet, dass wir volle Unterstützung haben.

Und mit einer robusten ID kann ein Feed sicher verschoben werden, ohne dass Feed-Reader doppelte Einträge abrufen. Um den Feed selbst zu verschieben, richten Sie eine 301-Weiterleitung zur neuen Adresse ein und fertig.

Sie könnten auf eine Technik namens XML-Weiterleitung stoßen, bei der eine Datei mit dem neuen Speicherort des Feeds am alten Speicherort platziert wird. So gut das auch für Zeiten funktionieren würde, in denen Sie keine HTTP-Codes manipulieren können, konnte ich keine Feed-Reader finden, die dies implementieren.

Validierung eines Feeds

Feeds müssen, genau wie HTML, gültig sein, um richtig zu funktionieren. Der Vorteil eines validierten Feeds ist, dass Sie wissen, dass Ihr Code fehlerfrei ist und die Einträge ordnungsgemäß von Ihrer Website zu den Feed-Readern fließen.

Der Feed-Validierungsdienst des W3C ist eine Option für RSS- und Atom-Feeds. Sie geben die URL des Feeds an oder fügen den eigentlichen Code des Feeds ein, und Sie erhalten einen vollständigen Bericht, der zeigt, ob Sie alle Best Practices einhalten. Sie werden wahrscheinlich Warnungen erhalten. Das passiert. Die meisten Warnungen sind nur ein Hinweis und haben möglicherweise keine Auswirkungen auf den Feed.

Dennoch gibt es zwei Dinge, die immer angegangen werden sollten, wenn ein Feed validiert wird

  • item sollte ein guid-Element enthalten: Die eindeutige Kennung, wie wir gesehen haben, verhindert, dass ein Feed-Reader denselben Eintrag zweimal anzeigt, wenn ein Feed verschoben wird.
  • element sollte absolute URL-Referenzen enthalten — diese sind für Reader schwer aufzulösen, vermeiden Sie daher nach Möglichkeit relative URLs.

Was ist mit JSON? Um einen JSON-Feed zu validieren, versuchen Sie entweder, validator.jsonfeed.org zu verwenden oder gegen das JSON Feed Schema mit einem beliebigen JSON-Schema-Validator zu prüfen.

Zugriff auf einen Feed verwalten oder einschränken

Sie wissen, wie Sie einen kostenpflichtigen Podcast abonnieren können und erhalten Zugang zu einer speziellen Feed-URL, die alle "Premium"-Inhalte enthält, auf die Sie mit Ihrem Abonnement zugreifen? Nun, das liegt daran, dass wir kontrollieren können, wer Zugriff auf einen bestimmten Feed hat, während andere von den Inhalten ausgeschlossen werden.

Es gibt zwei Techniken zur Verwaltung des Zugriffs auf einen Feed

  • HTTP-Basisauthentifizierung erfordert einen Benutzernamen und ein Passwort, die entweder vom Benutzer eingegeben werden oder in der Feed-URL selbst enthalten sind, z. B. https://username:[email protected].
  • Bereitstellung eines Tokens als Abfrageparameter, z. B. http://domain.com/path?token=xyz

Solange die URL HTTPS ist, haben sie die gleiche Sicherheit, da die URL-Pfade und Passwörter verschlüsselt sind. Die Handhabung der Authentifizierung auf dem Server ist ein ganz anderes Thema, obwohl es hier auf CSS-Tricks einige Artikel darüber gibt.

Treten Sie dem RSS-Club bei!

OK, die erste Regel des RSS-Clubs ist

Sprich nicht darüber. Lass die Leute es finden. Mach es lohnenswert.

Aber ich werde darüber sprechen, weil Feeds, die Teil des RSS-Clubs sind, hervorragende Beispiele für maßgeschneiderte Feeds sind. Das liegt daran, dass die Feed-Einträge nur in diesen Feeds verfügbar sind. Mit anderen Worten, die Blogbeiträge werden veröffentlicht, aber nie auf der eigentlichen Website angezeigt – sie sind nur per Feed zugänglich.

Dave Rupert hat den Club vor einigen Jahren gegründet und es ist eine großartige Möglichkeit, RSS zu einem erstklassigen Bürger für den Konsum von Inhalten innerhalb einer kleinen Community zu machen.

Die Teilnahme am Club bedeutet, einen dedizierten Feed für Beiträge zu haben, die nur in diesem Feed verfügbar sind. In WordPress könnten Sie zum Beispiel eine neue Kategorie "RSS Club" erstellen und diese aus der Hauptbeitragsabfrage herausfiltern. Auf diese Weise können Sie entweder einen Feed nur für diese Kategorie bereitstellen oder den vollständigen Feed, der weiterhin Beiträge in dieser Kategorie enthält.

(Entschuldigung, dass ich das Geheimnis verraten habe, Dave!)

Web-Feeds jenseits von Inhalten

RSS kann für mehr als nur Blogbeiträge oder Artikel verwendet werden. Zum Beispiel hat GitHub Atom-Feeds für Issues, Commits, Pull Requests und Releases.

Sie können auch verwendet werden, um Updates bereitzustellen. Angenommen, Sie möchten einen Feed, der Sie benachrichtigt, wenn es Änderungen an Ihrer Website gibt. Das ist eine großartige Idee, oder? Es ist immer schön zu wissen, was passiert, besonders wenn mehr als ein Koch in der Küche steht.

Sie könnten ein System entwickeln, das Ihren Feed regelmäßig auf Änderungen abfragt und dann einen neuen Feed-Eintrag auslöst, aber das erfordert viele Ressourcen. Eine andere Idee ist die Implementierung von Webhooks, die Ihnen sagen, wo Sie nach Änderungen suchen sollen. Aber die Verwaltung und das Versenden von Benachrichtigungen kann mühsam sein, besonders wenn Sie nur Inhalte überwachen möchten.

Ich denke, es lohnt sich, sich WebSub anzusehen. Sie als Publisher informieren einen Hub darüber, dass die Website geändert wurde, und der Hub benachrichtigt jedes System, das die Web-Feeds der Website abonniert hat. Sie können Ihren Feed auf einem bestehenden Hub veröffentlichen – wie Googles PubSubHubbub Hub – und dann den Hub in Ihren Feeds angeben. YouTube hat dies implementiert.

WebSub-Flussdiagramm, Julien Genestoux
Copyright © 2018 World Wide Web Consortium, (MIT, ERCIM, Keio, Beihang).

Beispiele!

Was wäre ein Tutorial wie dieses ohne ein paar gute Beispiele? Schauen wir uns drei reale Beispiele an.

1. RSS-Podcast

Wussten Sie, dass CSS-Tricks einen Podcast für eine laufende Serie über Web-Geschichte hat? Nun, das tut er. Und ja, Sie können ihn über RSS abonnieren.

Podcasts müssen RSS mit den Erweiterungen xmlns:content und xmlns:itunes verwenden, die benötigt werden, um Metadaten über den Podcast und seine Episoden bereitzustellen. Die Audiodatei für jede Episode ist in einer „Enclosure“ zusammen mit ihrem MIME-Typ und ihrer Größe angegeben. RSS ist auf eine Enclosure beschränkt, aber sowohl Atom als auch JSON unterstützen mehrere Enclosures.

Hier ist der Feed. Beachten Sie die iTunes-spezifischen Tags sowie andere Informationen, die zusätzlichen Kontext bieten.

<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
  <channel>
    <atom:link href="https://adactio.s3.amazonaws.com/audio/narration/web_history/podcast.xml" rel="self" type="application/rss+xml" />
    <title>Web History</title>
    <link>https://css-tricks.de/category/history/</link>
    <language>en</language>
    <copyright>2020</copyright>
    <description>Written by Jay Hoffmann and narrated by Jeremy Keith.</description>
    <image>
      <url>https://adactio.s3.amazonaws.com/audio/narration/web_history/WebHistoryPodcast.jpg</url>
      <title>Web History</title>
      <link>https://css-tricks.de/category/history/</link>
    </image>
    <itunes:author>Jay Hoffman</itunes:author>
    <itunes:summary>The history of the web.</itunes:summary>
    <itunes:explicit>no</itunes:explicit>
    <itunes:type>episodic</itunes:type>
    <itunes:owner>
      <itunes:name>Jeremy Keith</itunes:name>
      <itunes:email>[email protected]</itunes:email>
    </itunes:owner>
    <itunes:image href="https://adactio.s3.amazonaws.com/audio/narration/web_history/WebHistoryPodcast.jpg"/>
    <itunes:category text="Technology"></itunes:category>
    <item>
      <title>Chapter 10: Browser Wars</title>
      <description>In June of 1995, representatives from Microsoft arrived at the Netscape offices. The stated goal was to find ways to work together—Netscape as the single dominant force in the browser market and Microsoft as a tech giant just beginning to consider the implications of the Internet. Both groups, however, were suspicious of ulterior motives.</description>
      <pubDate>Mon, 8 Nov 2021 12:00:00 -0000</pubDate>
      <link>https://css-tricks.de/chapter-10-browser-wars/</link>
      <itunes:title>Chapter 10: Browser Wars</itunes:title>
      <itunes:episode>10</itunes:episode>
      <itunes:episodeType>full</itunes:episodeType>
      <itunes:author>Jay Hoffman</itunes:author>
      <itunes:summary>In June of 1995, representatives from Microsoft arrived at the Netscape offices. The stated goal was to find ways to work together—Netscape as the single dominant force in the browser market and Microsoft as a tech giant just beginning to consider the implications of the Internet. Both groups, however, were suspicious of ulterior motives.</itunes:summary>
      <content:encoded>
        <![CDATA[
          <p>In June of 1995, representatives from Microsoft arrived at the Netscape offices. The stated goal was to find ways to work together—Netscape as the single dominant force in the browser market and Microsoft as a tech giant just beginning to consider the implications of the Internet. Both groups, however, were suspicious of ulterior motives.</p>
        ]]>
      </content:encoded>
      <itunes:duration>00:40:40</itunes:duration>
      <guid>https://adactio.s3.amazonaws.com/audio/narration/web_history/Chapter_10_Browser_Wars.mp3</guid>
      <enclosure url="https://adactio.s3.amazonaws.com/audio/narration/web_history/Chapter_10_Browser_Wars.mp3" length="19608877" type="audio/mpeg"/>
    </item>
</channel>
</rss>

2. RSS für Beiträge

Schauen wir uns noch einmal CSS-Tricks an, diesmal als Beispiel dafür, wie ein ziemlich standardmäßiger RSS-Feed von Blog-Posts aussieht.

Der Code für diesen speziellen RSS-Feed ist etwas ausführlicher als bei einem typischen Feed, was an den mehreren Erweiterungen liegt, die dem <rss>-Tag hinzugefügt wurden. Einige davon sind nicht erreichbar, aber es gibt einige, die andere Dinge behandeln, wie z. B. xmlns:wfw für Kommentare, xmlns:dc für zusätzliche Metadaten und xmlns:sy für Informationen zur Aktualisierungshäufigkeit des Feeds.

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
  <channel>
    <title>CSS-Tricks</title>
    <atom:link href="https://css-tricks.de/feed/" rel="self" type="application/rss+xml" />
    <link>https://css-tricks.de</link>
    <description>Tips, Tricks, and Techniques on using Cascading Style Sheets.</description>
    <lastBuildDate>Fri, 19 Nov 2021 15:13:49 +0000</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>
  hourly  </sy:updatePeriod>
    <sy:updateFrequency>
  1 </sy:updateFrequency>
    <generator>https://wordpress.org/?v=5.8.2</generator>
    <image>
      <url>https://i1.wp.com/css-tricks.com/wp-content/uploads/2021/07/star.png?fit=32%2C32&ssl=1</url>
      <title>CSS-Tricks</title>
      <link>https://css-tricks.de</link>
      <width>32</width>
      <height>32</height>
    </image>
    <site xmlns="com-wordpress:feed-additions:1">45537868</site>
    <item>
      <title>Parallax Powered by CSS Custom Properties</title>
      <link>https://css-tricks.de/parallax-powered-by-css-custom-properties/</link>
      <comments>https://css-tricks.de/parallax-powered-by-css-custom-properties/#respond</comments>
      <dc:creator>
        <![CDATA[Jhey Tompkins]]>
      </dc:creator>
      <pubDate>Fri, 19 Nov 2021 15:13:46 +0000</pubDate>
      <category>
        <![CDATA[Article]]>
      </category>
      <category>
        <![CDATA[animation]]>
      </category>
      <category>
        <![CDATA[custom properties]]>
      </category>
      <category>
        <![CDATA[GSAP]]>
      </category>
      <guid isPermaLink="false">https://css-tricks.de/?p=357192</guid>
      <description>
        <![CDATA[
]]>
      </content:encoded>
      <wfw:commentRss>https://css-tricks.de/parallax-powered-by-css-custom-properties/feed/</wfw:commentRss>
      <slash:comments>0</slash:comments>

      <post-id xmlns="com-wordpress:feed-additions:1">357192</post-id>
    </item>
  </channel>
</rss>

3. JSON-Feed

Das ist eigentlich mein persönlicher Feed und ich verwende JSON dafür. Er ist ziemlich spartanisch und weniger überladen als die anderen Beispiele, da es, soweit ich weiß, keine JSON-Erweiterungen wie die RSS-Erweiterungen gibt, die wir in Beispiel 2 gesehen haben.

Ich finde, dass JSON viel einfacher zu lesen ist und alles, was benötigt wird, ist ein Objekt mit den Feed-Daten, anstatt die gesamte Vorlage zu schreiben.

{
  "author": {
    "name": "Farai Gandiya"
  },
  "feed_url": "https://codelab.farai.xyz/feed.json",
  "home_page_url": "https://codelab.farai.xyz/",
  "icon": "https://codelab.farai.xyz/fcl-logo.png",
  "items": [
    {
      "content_html": "...",
      "date_modified": "2021-11-13T05:26:07+02:00",
      "date_published": "2021-11-13T05:26:07+02:00",
      "id": "https://codelab.farai.xyz/1636773967",
      "summary": "...",
      "title": "Don't be afraid of the Big Long Page by Amy Hupe, content designer.",
      "url": "https://codelab.farai.xyz/links/long-content-ok/"
    }
  ]
}

Web-Feed-Implementierungen auf CMS und statischen Website-Generatoren

Viele CMS und statische Website-Generatoren unterstützen Web-Feeds, obwohl es normalerweise RSS ist, da es die breiteste Unterstützung hat. Hier sind einige CMS, die Web-Feeds unterstützen.

Und hier sind einige Ressourcen zum Hinzufügen von Web-Feeds (wieder meist RSS) zu verschiedenen statischen Website-Generatoren.

Zusammenfassung

Und da haben Sie es! Dies ist meiner Meinung nach fast alles, was Sie bei der Implementierung eines Web-Feeds berücksichtigen müssen. Wir haben drei verschiedene Formate (RSS, Atom, JSON) betrachtet, Best Practices für die Erstellung eines benutzerfreundlichen Feed-Leseerlebnisses behandelt, das Validieren eines Feeds durchlaufen, die Möglichkeit der Authentifizierung von Feeds abgedeckt, drei reale Beispiele von Feeds in freier Wildbahn angesehen und einige Implementierungen für verschiedene Technologien bereitgestellt.

(Oh, und da war diese Sache, dass die erste Regel der Sache ist, nicht über die Sache zu reden.)

Ich hoffe, diese Richtlinien befähigen Sie, robuste Web-Feeds zu erstellen. Wenn Sie Fragen zur Implementierung eines Web-Feeds haben oder einfach nur Ihren RSS-Feed teilen möchten, hinterlassen Sie bitte einen Kommentar!