博客站点前后端分离已完成

最新进展

API 已经完全独立,Web 后端已经精简掉绝大部分内容(还保留有针对搜索引擎的后端渲染部分以及有关博客设置的数据操作部分)。
下一步计划是重构存储结构和改善 blogger-core 项目的 API 设计,会慢慢来。

注意

  1. 这篇文章将作为底部 API 链接的地址。
  2. 这篇文章需要完善,用来当作 API 说明。

架构分离

需要注意的是,我的博客本就是前后端分离的。此处指的是项目架构上的分离,独立出不同类型的后端服务。

最起初,我的博客项目是由两个部分组成:
一个是 Ruby 写的 Web 应用,主要作为后端页面的 Router 和权限的控制。但是同时也兼顾了所有的数据操作,意思就是前端使用的 API 也是这个后端提供的。
另一个是用 Node 构建的前端项目,我的所有页面其实都是纯静态的,并非后端模板生成的动态内容。两个组合起来构成了我的博客站点。

博客的后端起初是很小的,但是渐渐扩大以后让原本适合做精简 Web 应用的 Stinatrl 也变得膨胀了起来,急需抽离一部分。
而我最初的目的,其实就是想让后端做路由而已,因为全站仅存在两个页面(一个前端、一个后台),所以理论上仅仅需要两个 Router 的正则即可搞定,再加上权限控制和一部分安全过滤(其实至今我的安全策略还未完善)也是极小的。
但是,由于数据层面混进去了,增加了 DB 的 CURD 操作以及 REST API 的开放,导致逐渐膨胀,有点难以维护。
所以,我当初打算写这篇文章,企图重构一下统一的后端。 但是因为考虑到后期迟早要分离的缘故,这篇文章就一直没写,后端的重构也没有继续。为什么我不写呢?因为我现在实在是有点不想动这个后端。所以我终于,在这几天,把 API 抽离出来了,等完成以后再去动那个后端,精简那个后端,才会有心情改善它的设计。

所以我目前的博客是这样组成的: 一个是有点膨胀的 Ruby 后端,兼顾了一部分的数据操作和 API 服务。
另一个是崭新的 Go 语言后端,提供一部分的API 服务,并且它的目的是专门提供 API 的,所以基本上数据操作也会全 包。但是由于分离工作还未完全完成,所以 Ruby 后端还兼顾了一部分。
然后就是一个前端了,和两个提供不同服务的后端组成了现在的博客。

效果

如果你 F12 看请求的话,会发现,博客前台(你们能访问的部分)的所有数据已经是另一个服务处理了: blog-api.bluerain.io

这样做的好处不仅仅是精简了 Web 后端,还稍微细化了整个应用层级的粒度。例如我可以跑很多个 API 服务,但是只跑一个 Web 后端,因为 IO 瓶颈在需要处理数据的 API 服务上,而不是仅仅转发作用页面的 Web 后端。

对于开发而言,API、Web 后端、前端 总算可以完全独立的开发了。对于 API 版本控制也非常有意义,在 API 版本准备升级阶段我可以保留一个旧版标签,构建提供指定版本阶段的 API 服务应用,让不同版本的 API 服务应用同时运行,提供服务。

结合 Go 语言的优势,还可以进行很大程度上其他擅长 Web 的语言做不到(难以做到)的优化。我甚至可以模仿 Nginx,让一个 API 程序在运行时多 fork 几个进程,主从运行,自带轮训负载的能力。作为单文件应用,简直方便极了。

它还可以作为一个博客系统的核心,让开发者用户定制自己的前端和 Web 后台,这个目的可能也是这个项目之后的方向。

目前正在企图分离全部 API ,首先是保持兼容(这样独立开发 API 服务无需动前后端),完成以后改善 API 设计。

最后

仓库地址:https://github.com/Hentioe/blogger-core