导语
在我们生活的年代,博客并不稀奇,甚至可以说是随处可见。从最早的搜狐、新浪博客,再到每个人都曾记录青春的 QQ 空间,再到现在的 Vlog 与 Plog,似乎拥有一个自己的博客并不是什么难事。然而想要自己从零开始搭建一个出色的博客系统,则并非那么简单。可能有些懂技术的小伙伴会说,看上去只是简单的对文章 CRUD 就行了,也没有那么复杂啊。然而,真的是这样吗,这背后可能隐藏着更多玄机等待着我们去挖掘。掐指一算,我建设自己的博客已有 11 年,也见过许多程序员自己编写博客系统,但真正按规范和标准设计的功能完备的博客少之又少。本文我将分享自己在博客系统设计中积累的经验,介绍一些鲜为人知的博客技术,帮助想要搭建博客的小伙伴们进一步了解如何设计一个优秀的博客系统。
目录
由于文章篇幅较长,本文将分为 4 篇推送,目录如下:
- “博客”的前世今生
- 我的博客故事
- 谁是博客的受众?
- 博客基本功能设计要点
- 4.1 文章(Post)
- 4.2 评论(Comment)
- 4.3 分类(Category)
- 4.4 标签(Tag)
- 4.5 归档(Archive)
- 4.6 页面(Page)
- 4.7 订阅
- 4.8 版本控制
- 4.9 主题及个性化
- 4.10 用户及权限
- 4.11 插件
- 4.12 图片及附件的处理
- 4.13 脏词过滤及评论审查
- 4.14 静态化
- 4.15 通知系统
- 博客协议或标准
- 5.1 RSS
- 5.2 ATOM
- 5.3 OPML
- 5.4 APML
- 5.5 FOAF
- 5.6 BlogML
- 5.7 Open Search
- 5.8 Pingback
- 5.9 Trackback
- 5.10 MetaWeblog
- 5.11 RSD
- 5.12 阅读器视图
- 设计博客系统有哪些知识点
- 6.1 时区真的全用 UTC?
- 6.2 HTML 还是 Markdown
- 6.3 MVC 还是 SPA
- 6.4 安全
- 结束语
“博客”的前世今生
博客一开始不叫 Blog,而叫 Weblog,可能让很多人诧异的是,它并不诞生于 Web 2.0 时代,而是早在 1997 年已经问世。博客从最早的单用户(单独作者),逐渐发展为多用户(一个团队),即博客平台。而 Web 2.0 时代赋予了博客社交属性,可以让读者进行评论、订阅(RSS/ATOM),博客作者之间可以互相抱团(FOAF)、引用文章(Pingback),才让博客逐渐热门了起来。
博客系统也是各有千秋,PHP 有 WordPress,.NET 有 BlogEngine。而最终,WordPress 几乎成为了事实上的博客系统的标准,它同时具备一些 CMS 的功能,微软官方 .NET 团队的博客也是采用 WordPress 搭建。
阅读博客的用户除了使用浏览器,还会使用 RSS/Atom 阅读器。在 iPad 刚出来的年代,阅读器应用曾经风靡一时。订阅的博客一旦有新文章,阅读器就会自动收入,读者无需每天人肉检查是否有新文章发布。Microsoft 365 的 Outlook 至今保留着 RSS 阅读器的功能。
博客至今依然是表达自我、传播信息并与社区互动的最佳途径之一,就算微博(microblogging)出现,也没能使博客变得不再流行。所以说,博客之于互联网,就如同电子邮件一样,“姜还是老的辣”,博客作为一种文化载体,历久弥新,持久散发着光芒。
我的博客故事
我的博客项目最早可追溯到 2003 年,那时候我正在上初中,课余时间自学了 ASP 及 Access,构建了我的第一个个人网站,主题居然是黑客技术(年少无知,以为非常酷炫)。除了原创及转载技术文章,也提供常用软件工具下载等服务,有时候还假装大学生帮人完成 ASP 的毕业设计(毕竟说自己是初中生没人会相信)以换取 Q 币、QQ 秀等(太有年代感…)。这个系统一直维护到 2007 年我上高二,它长这样:
高考之后,我终于有大量的时间学习自己想了解的技术,且不用担心被家长埋怨不好好学习。那会我自学了 ASP.NET(VB),构建了我的第二代个人网站,主题不再是黑客技术,而是常规的计算机技术分享,主打原创技术文章(日志),同时也开发了相册、播客等 SNS 功能,并于 2009 年上线,它长这样,一直维护到 2011 年。
2012 年毕业以后,我当了一名工程师(程序猿),没有精力维护软件下载、相册和播客等栏目,于是决定只做技术文章,大刀阔斧地改版了我的网站,博客的雏形就出来了。为了构建博客,我参考了同样是 .NET 的 BlogEngine 项目。其实国内某著名的 .NET 博客平台,最早就使用了 BlogEngine 项目,甚至它当年还有个中文版,叫博易。不过与其直接魔改他人的项目,我选择看懂代码以后,自己用不同的方式去实现。本文之后要介绍的许多内容也来源于这段时间的学习。
毕业 7 年后,发现各项技术发展迅猛,.NET 技术与其他主流技术的竞争非常激烈,而长期在外企的我主要运用的还是 .NET 的技术。此时我下定决心,在业余时间里,用 .NET Core 重写我的博客系统,命名为 Moonglade,并开源到 GitHub(https://github.com/EdiWang/Moonglade)目前博客地址是 https://edi.wang。内容面向国外社区,部署在微软 Azure 的海外服务器上(国内访问可能较慢)。
刨除初中时代牛刀小试的 ASP 不说,从 2009 年到 2020 年这 11 年间,我的博客代码横跨十几年 .NET 发展历程,从 ASP.NET WebForm 2.0 VB.NET + Access 到现在的 ASP.NET MVC Core, C# 8 及 Azure SQL Database,也整合了 Azure App Service、Azure DNS、Azure DevOps、Azure Active Directory、Azure Blob、Azure AD、Azure CDN 和 Application Insights 等技术。
谁是博客的受众?
在谈设计博客之前,我们首先要明确,你的读者从何而来?搞清楚这一点后,才能够联想出用户将如何使用你的产品。这也正是本文所要介绍的博客的设计方法和要点。
开发和运营博客 11 年的经验积累和数据统计告诉我,对于一个常规技术博客,95%以上的流量来自于搜索引擎,并且多数情况下读者只查看这一篇他们所需要的文章,固定读者或订阅用户占总流量的比例相当少
。这是由于技术博客分享的内容多数为解决一个具体的技术问题。而技术人员遇到技术问题的第一反应就是去搜索引擎查找有没有人曾经遇到过并已经解决,有可能复制粘贴文章里的代码去解决自己项目里的问题后,就忘记了博主的存在。只有真正觉得博主的文章有一定水平,才会开始浏览博客里的其他内容。
不难发现,我们的用户入口几乎就是搜索引擎,所以一个优秀的博客系统,并不是只做好文字功夫,需要大量考虑SEO及其他针对机器和系统之间交互的博客协议,时刻考虑SEO也是贯穿本文的重点
。
本文并不教大家代码的设计、技术实现,而是教大家博客系统的设计思路和要点。至于技术方面,大名鼎鼎的 WordPress、前辈们的 BlogEngine.NET,以及我的 Moonglade,目前都已开源的,可供大家随时研究。
下篇我将介绍【博客基本功能设计要点】
敬请关注