Making Sense of Feed Formats
For years now I've had a
/feed.xml path for anyone that wanted to get updates on my website. However, the general term for these feeds is "RSS", even when it's not really RSS. In my case, I was using Atom. I looked at both specs and chose Atom since it seemed simpler to understand. That's when I built a simple plugin to generate Atom feeds on Middleman.
After a while, I saw the need for a JSON feed format. Originally I made my own at
/feed.json, since I only intended for me to use it and none of the existing formats seems to be standard.
Now I have two feeds, both generated by my own code. Every few months, I'd usually notice a bug with the Atom feed. Maybe it was the formatting of the post, a regression from changing frameworks or just overlooking a detail in the specification. There came a point where I decided it was becoming too fiddly and started looking into something that can do it all for me.
That's when I found jpmonette/feed. You give it all of the data it needs and it'll generate RSS, Atom and JSON Feed format feeds for you. Unlike a lot of generators, it's popular enough to be reliable. It solves all three of my problems:
- Maintaining a custom JSON feed format.
- Maintaining a custom Atom feed generator.
- Having to use "RSS" when I actually mean Atom because it's the more popular term.
So I switched over. However, I didn't add actual RSS format feeds until later when I was doing a server upgrade. I noticed Nginx's default mime-types use
.rss file extensions to correctly assign the
Content-Type for both formats. Sure I could override this behaviour but that's just more configuration to maintain. So I decided to split
/feed.rss. For existing subscribers, I set up a permanent redirect for
/feed.xml pointing to
/feed.atom. It's a bit of configuration, but hopefully feed readers can treat permanent redirects as a sign to permanently update their feed URLs, then I can remove it. They probably don't, much like bookmarks don't... Oh well. At least everything makes sense now.
Thanks for reading.