BlogReaper的第一版本的开发基本上已经完成,这里记录一下前端开发的技术
项目简介
BlogReaper
中文名为博客收割机,其实质上是一个高级的在线RSS阅读器,通过添加自己感兴趣的RSS源,可以正在这里分类浏览感兴趣的信息,第一时间阅读感兴趣的信息,而不需要到各个网站分别浏览。
需求
在开发一个项目之前,必须要先确认需求,明确开发方向。
基本功能
首先,来确认一下BlogReaper
需要的基本功能,也就是第一个版本必须要有的功能:
- 首页展示热门博客/新闻信息流
- 浏览用户关注的博客信息流
- 用户管理自己的阅读源
- 添加热门阅读源
- 添加自定义博客源(RSS和Atom(Hexo)格式)
- 对阅读源进行分类
进阶功能
这次项目的第一个版本的开发周期比较短,一些设想的功能只能留给下一个版本实现:
- 标记已读/未读信息
- 收藏指定信息到指定的收藏夹
- 稍后阅读功能
- 支持添加自定义链接
- 开发Chrome插件
- 提供简单列表、详细列表、卡片等阅读视图
- 列表进行简单筛选(按时间/热度/综合排序、只显示未读)
- 在阅读源中进行搜索
- 分类搜索、时间筛选
- 社交社区化功能(暂时搁置,社区化功能和微博知乎那些大同小异,如果单纯工具化就不需要以下功能)
- 对于某些博客/新闻文章的评论(类似于微博转发的形式)
- 可以对评论进行回复
- 展示用户关注的阅读源以及分类信息流(可以选择公开或者私有)
- 用户关注系统
- 用户关注的用户评论信息流
- 站内私信功能
- 对于某些博客/新闻文章的评论(类似于微博转发的形式)
技术栈
基本框架:
Vue 2
UI组件库:
iview 3
网络库:
Vue Apollo 3
用户授权系统:
Violet 2
Vue
之前已经开发过很多基于Vue
的网站了,比如XMOJ
,Violet 2
,Coffee
以及正在开发中的Violet 3
。这次依旧是使用Vue
作为前端开发的基本框架,如果有机会的话其实还是想用一下React
或者Angular
的,但是由于时间仓促,只能用比较熟悉的Vue
了
项目结构
1 | . |
项目模块
这是一个很平常的Vue项目,其项目结构和一般的Vue项目也是大同小异。在各个视图当中,把一些可以复用或者功能相对独立的组件从视图中抽离开来,成为组件。
根据需求,将其分为两个基本的页面,分别实现不同的功能
- 首页
- 展示热门阅读内容列表
- 显示阅读源
- 显示时间
- 显示标题
- 显示内容简介
- 显示图片
- 展示热门阅读源列表
- 展示热门阅读内容列表
- 个人页
- 添加阅读源
- 展示稍后阅读内容列表
- 展示订阅源列表
- 展示订阅源内容列表
- 展示分类
- 管理订阅源
GraphQL
和之前的一些项目不同的是,这次的项目使用了Vue Apollo
取代了之前的axios
,使用了GarphQL
作为前端和后端之间通信的规范。
后端使用了graphql-playground
直接把API和数据结构用页面展示了出来
并且还可以在页面上直接测试API,极大地方便了前端的开发
Apollo
在Vue
里面,则使用了vue-apollo
作为发起GraphQL
请求的库。
为了开发的方便,把API部分封装到一个对象里面
1 | const userService = require('./modules/user.js') |
下面是一个获取文章信息的API
1 | // user.js |
所有的API请求都通过wrapper
这个函数,对API请求进行统一的管理
调用方法:
1 | await this.$service.feed.getByPublicId.call(this, { |
把this
和参数以及成功或者失败的回调传递,然后就可以对这个API进行请求并且在回调函数中处理结果。
使用GraphQL
,可以更加灵活地向后端请求资源。获取需要的数据字段,或者对数据做简单的筛选,都可以通过改变请求的结构体实现,而后端不需要改动任何的代码。
1 | // 根据关键字搜索Feeds |
以上的两个不同功能的请求都是基于下面这一个API
可以看到,对于同一个资源的请求,可以使用不同的筛选条件id
或keyword
前者对于每个文章只获取title
和url
,后者则获取整个文章的具体信息,获取不同的结构的信息。
用户授权系统
最后提一下这里用到的用户授权系统
这次项目依旧使用了Violet 2
作为用户系统,Violet
是我们团队2017年1月开始开发的一个基于Oauth2
用户中央授权系统,使用一个账号,可以登陆我们团队开发的多个项目(XMOJ(已废弃),Coffee内容管理系统,IceCream博客系统,Bug大逃杀类网络游戏
),现在又加多了一个BlogReaper
。
Violet
登陆模式类似于QQ登陆,只需要跳转到Violet
页面登陆,然后根据返回的授权码,BlogReaper
就可以获取用户的基本信息。对于用户的邮箱认证、密码、头像、基本信息的管理也可以完全托管于Violet
本次基于的2.0
版本是于2017年底完成的,如今Violet
进入了3.0
的迭代进程,3.0
将对开发者更加友好,并且提供更安全和方便的认证方式。