上篇文章讲到使用scrapy爬虫轻而易举地爬取到了我们需要的数据内容,并且已经保存在本地文件中。这一篇,我们换一个姿势,开启rails服务端之旅。
安装与初始化
rails环境的安装,称不上特别简单,但也不难。我也是照本宣科的,甩一个教程就好 如何快速正确的安装 Ruby, Rails 运行环境
安装好之后,跟scrapy爬虫一样,我们只需要在命令行用一行代码创建工程。
首先创建一个yx_review_server
目录并进入,
然后
1 | rails new yx_review |
稍候片刻,一个完整的工程拔地而起,巍峨地竖立在终端之巅。
数据导入
首先,跟爬虫一样,我们先建一个model,字段照搬。而在rails中这个任务只需要一行代码就可以完成:
1 | rails g model review title cover_image summary score |
更令人亦可赛艇的地方就是,rails中的model与数据库是无缝连接的,只要配置好数据库设置,model的创建与获取等在底层与数据库交互的细节是完全透明的。
创建好model之后,我们打开目录下的db/seed.rb
文件,将之前的json文件作为数据库初始种子,写入数据库中:
1 | local_path = "/Users/Kino/Development/YouxiaReview/yxReview/items.json" |
为了简单起见,这里的local_path我直接用本地的绝对路径。
接下来,我们在终端输入
1 | rake db:migrate |
分别进行数据库的迁移与种子数据的载入,相当于根据model在本地创建数据库并写入一些初始数据。
如果需要测试数据库是否成功创建并写入数据,可以在终端输入rails console
然后输入Review.all
查看是否打印出对应的数据。
到这一步,前期准备工作就正式完成了。
API接口
所谓工欲善其事必先利其器,在rails中,有个叫grape
的库专门用于API接口的编写REST API,于是我们先装为敬。
打开根目录下的Gemfile文件,并添加一行gem 'grape'
然后终端中输入bundle install
进行安装。
安装完成后,在编写api之前,我们先在config/application.rb
中加入下面两行,以便rails程序能识别并载入我们的api文件夹
1 | config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb') |
然后进入app目录,创建api目录并创建api.rb
如下:
api.rb
编辑内容如下
1 | class API < Grape::API |
这里声明了数据格式为json,并且指定resource为reviews,使用get方法返回数据库中所有的Review.all
对象。
由于目前的数据量非常少,我这里为了简(tou)单(lan)直接返回了所有数据,在一般情况下都是需要排序和分页的,大致是这个样子:
1 | params do |
在这个时候rails的路由还没能识别到api接口,我们需要在根目录下的config/routes.rb
中加入
1 | mount API => '/' |
然后一切准备就绪,我们在终端中输入 rails server
将服务器跑起来。
如无意外,rails将在本地建立一个监听端口3000的服务端,我们在浏览器中输入http://localhost:3000/api/v1/reviews
里程碑
作为一个极简实现,它的本身存在诸多不完善,比如api分版本分结构的需要,比如接口带参数以及验证的需要等等。但是对于一个iOS开发者以及服务端小白来说,这是具有里程碑的意义的,下一篇,回到iOS的主战场,快速构建一个炫酷(并不)的App。
参考Link:
系列链接
从零开始开发一个App(1)- Scrapy爬虫 从零开始开发一个App(2)- 简易REST API服务端 从零开始开发一个App(3)- iOS客户端