点击上方关注“汪宇杰博客”
上篇《博客系统知多少:揭秘哪些不为人知的学问(二)》介绍了博客的基本功能设计要点,本篇介绍博客的协议或标准。
1.“博客”的前世今生
2.我的博客故事
3.谁是博客的受众?
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. 博客协议或标准
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. 设计博客系统有那些知识点
6.1 时区真的全用UTC?
6.2 HTML还是Markdown
6.3 MVC还是SPA
6.4 安全
7. 结束语
5.1丨RSS
RSS(Really Simple Syndication)是一种基于XML的标准,广泛应用于包含博客在内的内容类网站,由Dave Winer于1999年发明,少年计算机天才Aaron Swartz参与定义规范,可惜后者于2013年1月自s,年仅26岁。
RSS亦是博客系统中最有标志性特性之一,其在博客中的应用广泛度作为了事实上的标准,无RSS的博客系统就像看到不带摄像头的手机同样有趣。
RSS文件的扩展名可一般是 .rss 或 .xml,亦能够不定义拓展名(如Moonglade的RSS)。内容为近期发布的博客文案的XML描述,包含标题、时间、作者、归类、摘要(亦能够是全文)等信息。
(图:Moonglade的RSS源)
RSS是写给设备看的,可用于网站之间同步内容,例如当年人人网(前校内网)可经过RSS导入博客文案为日记。而针对普通用户,则需要RSS阅读器应用来订阅博客。一般这般的阅读器里不止订阅一个作者的博客,而是该用户关心的所有博客。阅读器一般亦是跨平台、跨设备的,用户能够在电脑、平板、手机,乃至树莓派上订阅RSS源。
(图:2012年我在初代iPad上经过RSS订阅自己博客)
(图:最新版Microsoft 365 Outlook 中RSS订阅我的博客)
部分浏览器(如初期的火狐)亦能够自动识别一个博客的RSS位置,并在浏览器中订阅。其自动发掘原理是查询网页head中有无这么一个东西:
<link rel="alternate" type="application/rss+xml" title="Edi Wang" href="/rss" />
然则RSS有个缺点,它并不可够由服务器主动向客户端推送,而需要靠客户端自动去服务器拉取。而过去10年中,随着移动端的兴起,信息推送服务弥补了RSS的不足,各大平台亦几乎都推出了自己的手机APP,因此呢RSS已然被许多网站淘汰。但并不寓意着RSS没用了,迄今仍有海量网站仍然供给RSS订阅。例如微软Channel 9电视台的RSS: https://channel9.msdn.com/Feeds/RSS/,国内的博客园的RSS:http://feed.cnblogs.com/blog/sitehome/rss,有意思的是博客园网站的logo其实便是个RSS图标。
针对构建博客系统而言,你一般不会再专门做个手机App,用户亦不会为每一个博客都单独下载一个App,并且博客系统与其他博客、网站之间依然需要同步,不可能为每一个合作伙伴都研发一套同步协议,大众依然都用已然是公认标准的RSS,因此呢RSS在2020年依然是博客系统推送文案的最佳途径。
参考:https://en.wikipedia.org/wiki/RSS
5.2丨ATOM
ATOM和RSS的功效几乎同样,但ATOM的显现是为了弥补RSS的有些设计缺陷。例如针对文案发布日期,ATOM采用RFC 3339的时间戳,而RSS采用的是RFC 822标准。ATOM亦能够标识文案的语言、准许payload中显现RSS不准许的XHTML、XML和Base64编码内容等。
许多博客系统(包含我的Moonglade)同期供给RSS及ATOM源。
参考链接:https://en.wikipedia.org/wiki/Atom_(Web_standard)
5.3丨OPML
“OPML(概述处理器标记语言)是用于轮廓的XML格式(定义为“一棵树,其中每一个节点包括一组拥有字符串值的命名属性” )。它最初由UserLand在其Radio UserLand制品中做为大纲应用程序的本机文件格式研发,此后已被用于其他用途,最平常的是在Web Feed聚合器之间交换Web Feed列表。
OPML规范将大纲定义为任意元素的层次结构,有序列表。该规范相当开放,因此呢适用于多种类型的列表数据。
Mozilla Thunderbird 和许多其他RSS阅读器网站和应用程序都支持以OPML格式导入和导出RSS feed列表。”
参考:https://en.wikipedia.org/wiki/OPML
通俗易懂的说,OPML针对博客来讲,便是告诉阅读器,这个博客一共有那些订阅源以及她们各自的订阅位置,一般便是每一个文案归类是一个订阅源,所有文案又是一个订阅源。
(图:Moonglade的OPML)
5.4丨APML
APML即Attention Profiling Mark-up Language,它比OPML更鲜为人知。APML日前在互联网上已然非常少见了,比WP还惨。做为博客行业的历史遗迹之一,抱着情怀简短介绍一下。
与OPML类似,它亦是一种XML格式的声明文件,用来描述个人感兴趣的事物或专题,并分享给其他读者或博主,以帮忙阅读器或博客系统本身针对用户感兴趣的内容供给服务或更有针对性的宣传。
参考链接:https://en.wikipedia.org/wiki/Attention_Profiling_Mark-up_Language
WordPress能够经过插件实现APML,BlogEngine则自带APML,我的Moonglade不支持APML。
5.5丨 FOAF
FOAF即Friend of a Friend,亦是个写给设备看的文件,描述了一个人类的社交关系,一般在博客中能够用FOAF暗示博主和其他博客之间的 “友情链接” ,只不外这个友情链接是写给设备看的。好让设备明白,谁才是你的基友,从而给读者举荐基友博客里的内容。
WordPress能够经过插件实现FOAF,BlogEngine自带FOAF,我的Moonglade不支持FOAF。FOAF和APML的状况差不多,已快绝迹。
参考链接:https://en.wikipedia.org/wiki/FOAF_(ontology)
5.6丨 BlogML
BlogML是一套跨博客系统的数据标准,凡是实现了BlogML的博客系统,就算语言、平台不同样,亦都能够互相导入、导出文案等数据。就好比HTML5是个标准,Edge、Chrome、Firefox是浏览器,只要针对HTML5写的网页都能跨这些浏览器运行。
BlogML亦诞生于.NET社区之中,随后发展成为了标准。除了本身便是.NET的BlogEngine等系统以外,PHP写的WordPress都支持BlogML。当年支持BlogML的还有Windows Live Spaces,Subtext,DasBlog等。我的Moonglade不支持BlogML。
当前BlogML的标准schema是2.0,更新于2006年11月25日。看起来这个标准亦已然……
参考:https://en.wikipedia.org/wiki/BlogML
5.7丨Open Search
倘若博客实现了Open Search规范,那样博客的搜索功能就能够自动整合到用户的浏览器里,从而便于用户直接在浏览器位置栏运用你博客的搜索服务做为搜索引擎(就像必应、谷歌那样)。
实现Open Search只需两部,首要在网页的head里加入指向opensearch定义文件的link
<link type="application/opensearchdescription+xml" rel="search" title="Edi Wang" href="/opensearch" />
而后输出opensearch文件就可
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>Edi Wang</ShortName>
<Description>Latest posts from Edi Wang</Description>
<Image height="16" width="16" type="image/vnd.microsoft.icon">https://edi.wang/favicon.ico</Image>
<Url type="text/html" template="https://edi.wang/search/{searchTerms}"/>
</OpenSearchDescription>
文件描述了博客的名叫作、简介、图标以及搜索内容的URL pattern。浏览器一旦识别这个文件,会自动将你的博客注册到搜索引擎列表里去。而后读者就能够直接在浏览器位置栏里搜索关键词,并表示博客自己的搜索结果页面。
(图:在位置栏中搜索我博客的内容)
(图:搜索结果页面)
Open Search的详细规范和标准可参考:https://en.wikipedia.org/wiki/OpenSearch
5.8丨Pingback
Pingback用于博客系统之间通讯,一旦自己的文案被他人引用就会收到pingback请求,而自己引用了他人的文案就会向对方博客发送一个pingback请求,因此呢完成一次Pingback需要己方和对方的博客一起支持pingback协议。因为是标准协议,因此pingback并不需求双方的博客运用同一款博客制品,例如我用.NET Core写的Moonglade能够完美和PHP写的WordPress互相ping。Pingback亦并不限制网站类型必定得是博客,任何CMS或内容网站想要支持Pingback都没问题。
Pingback的技术原理亦不繁杂。
发送Pingback请求:
得到自己文案的URL A、对面被引用文案的URL B,请求B,瞧瞧它有无pingback终端,倘若有,构建一个HTTP Request,内容是一段XML:
<methodCall>
<methodName>pingback.ping</methodName>
<param>
<param><value><string>A</string></value></param>
<param><value><string>B</string></value></param>
</param>
</methodCall>
这般B所在的网站就晓得A文案引用了B文案,处理pingback后,会给A所在的网站一个成功与否的响应。
(图:Moonglade的pingback终端)
接受Pingback请求:
自己的文案URL A被他人文案B引用,并收到了一个pingback XML。首要自己要验证别人的pingback请求长得是不是奇怪,以保准安全性,例如有无正常的methodName、有无合法的双方URL、URL是不是能正常拜访、是不是有奇怪的URL(例如localhost或有潜在攻击行径的特殊构造)。保准pingback请求没问题后,请求B的页面,抓取B网页的title内容、B的IP位置,记录到自己的数据库中,并和A文案相关。
收到的Pingback一般以系统身份自动在文案下加评论,但这个设计不是规范之一,你能够自由发挥,例如Moonglade把pingback集中起来在后台给博客管理员查看。
(图:Moonglade后台管理中查看那些网站引用了自己博客的文案)
参考:https://en.wikipedia.org/wiki/Pingback
5.9丨Trackback
Trackback允许一个网站将更新通告给另一个网站。这是网站作者在有人链接到其文档之一时请求通告的四种类型的链接办法之一。这使作者能够跟踪谁链接到她们的文案。
参考:https://en.wikipedia.org/wiki/Trackback
尽管功能和Pingback类似,但Trackback一般需要手工发送,并需要给对方供给一篇文案的摘要。而Pingback的过程是又双方博客系统一起完成的全自动操作。
5.10丨MetaWeblog
MetaWeblog是一套基于XML-RPC 的Web Service,这套API定义了几个标准接口,用于文案、归类、标签等博客常规内容的CRUD。只要实现了这些接口的博客系统,就可以让博主不消经过浏览器登录博客后台写文案,而运用计算机上安装的客户端去写博客。主流的客户端包含 Windows Live Writer、Microsoft Word。在客户端里能够完整的编辑文案、插进照片、设置归类,乃至能够将博客的主题同步到客户端中。
可能它看起来亦像是过时的博客协议之一,但直到2020年的今天,最新版的Microsoft 365套件依然完整支持实现了MetaWeblog API的博客系统。
(图:Microsoft Word的博客支持)
类似MetaWeblog的博客API还有Blogger API, Atom Publishing Protocol, Micropub。
参考:https://en.wikipedia.org/wiki/MetaWeblog
我的博客在2012年曾经996 007完整实现了MetaWeblog + RSD,但如今30岁了,在.NET Core里暂时不打算实现这个了,毕竟有多少人还在用Live Writer和Word写博客(哭。
5.11丨RSD
Really Simple Discovery(RSD)是XML格式和一种发布约定,用于使博客或其他Web软件公开的服务可由客户端软件发掘。这是一种将设置编辑/博客软件所需的信息减少到三个众所周知的元素的办法:用户名,秘码和主页URL。任何其他关键设置都应该在与网站关联的RSD文件中定义,或能够运用供给的信息来发掘。
为了运用RSD,网站的所有者在首页的head里安置了一个链接标记,用于指示RSD文件的位置。MediaWiki运用的一个示例是:
<link rel="EditURI" type="application/rsd+xml" href="https://en.wikipedia.org/w/api.php?action=rsd" />
而后用RSD文件去暗示各样API的接口
<?xml version="1.0"?>
<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd">
<service>
<apis>
<api name="MediaWiki" preferred="true" apiLink="http://en.wikipedia.org/w/api.php" blogID="">
<settings>
<docs xml:space="preserve">http://mediawiki.org/wiki/API</docs>
<setting name="OAuth" xml:space="preserve">false</setting>
</settings>
</api>
</apis>
<engineName xml:space="preserve">MediaWiki</engineName>
<engineLink xml:space="preserve">http://www.mediawiki.org/</engineLink>
</service>
</rsd>
参考:https://en.wikipedia.org/wiki/Really_Simple_Discovery
RSD亦几乎和上面的MetaWeblog接口一块运用。这般Windows Live Writer、Microsoft Word等工具才能够自动发掘博客的MetaWeblog服务,而不需要手工去输URL。
5.12 阅读器视图
大部分浏览器和客户端都有阅读器视图,能够让读者在与博客网站页面风格完全不同样的视图中阅读文案。例如,我博客某篇文案的正常页面长这般:
(图:Moonglade非阅读器视图文案页)
浏览器识别到我的博客支持阅读器视图,就会亮起沉浸式阅读按钮
(图:Microsoft Edge 浏览器沉浸式阅读按钮)
进入沉浸式阅读界面后,浏览器会自动提取文案的内容,识别文案的标题、章节、照片,去掉导航栏、侧边栏等与文案无关的元素,并可让用户掌控文本体积、背景色,乃至朗读文案内容。
(图:Moonglade 的文案进入沉浸式阅读界面)
不仅我的博客有阅读器视图,设计良好的博客、资讯内容站都有,例如Azure的:
(图:Azure 官方博客阅读器视图)
另一,支持阅读器视图的网站,seo必定不会差。因此呢设计博客系统时,请思虑支持阅读器视图。
下篇将重点介绍
【设计博客系统有那些知识点】
欢迎关注
汪宇杰博客
.NET | Azure | 微软MVP
长按二维码获取我的最新技术分享
爱好本篇内容请点个在看
|