〇、 需求
听说 rails 5 中有一项新特性是可以使用 Rails 开发只提供 API 的应用,想试试。
一、 获取 rails 5
由于很多项目是基于 rails 其他版本的,为了安全起见,使用 rvm 创建一个 rails 的单独 gemset :
https://my.oschina.net/yudongyang/blog/1549248
试用时主要参考如下两篇文章 :
1、 rails 5 的 guide : https://ruby-china.github.io/rails-guides/api_app.html
2、 Santiago Pastorino 写的 How to Build a Rails 5 API Only and Ember Application :
https://wyeworks.com/blog/2015/6/30/how-to-build-a-rails-5-api-only-and-ember-application/
这篇确实可以!
二、 使用 rails 5 提供 的 --api 创建项目
1、 生成项目
在 raisl new 命令后面加上 --api 表示生 api only 项目
$ rails new my_api --api
2、 bundle install
不解释。
$ cd my_api_pro
$ vim Gemfile
# 将 source 'https://rubygems.org' 替换成 source 'https://ruby.taobao.org'
$ bundle install
3、 跑项目
肯定能 Yay! You’re on Rails! 吧
$ rails s
三、 使用 rails 5 提供的 api only scaffold
1、 运行 generate
$ rails g scaffold user username:string status:integer
invoke active_record
create db/migrate/20171015063045_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
invoke resource_route
route resources :users
invoke scaffold_controller
create app/controllers/users_controller.rb
invoke test_unit
create test/controllers/users_controller_test.rb
可以看到,在 api only 中的 generate 中只生成了 migrate model controller & route ,并没有生成 view 相关的内容。
2、 跑迁移
$ rake db:migrate
3、访问
在浏览器中打开其中一条路由地址 : http://127.0.0.1:3000/users , 注意,看到这一对 [ ] 表示已经成功访问到 api 接口了。
四、 其他生成的接口
1、 查看路由
可以看到,在 api only 中生成的路由只有 index create show update & destroy
$ rake routes
Prefix Verb URI Pattern Controller#Action
users GET /users(.:format) users#index
POST /users(.:format) users#create
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
2、 访问这些接口
(1) Advanced REST client
使用 chrome 的一个插件 Advanced REST client 模拟各种请求,个人常用这个插件进行简单的 rest 调用测试
(2) 调用接口
设置 Content-Type: application/json , 选择 post ,访问 : http://127.0.0.1:3000/users ,即可成功访问 create 路由地址,可以看到结果,其他路由选择对应的 mothod 和路径也能同理访问。
截图麻烦,大概就是这样子:
get http://127.0.0.1:3000/users
[
{
"id": 1,
"username": null,
"status": 1,
"created_at": "2017-10-15T07:28:37.302Z",
"updated_at": "2017-10-15T07:28:37.302Z"
},
{
"id": 2,
"username": "YuDong",
"status": 1,
"created_at": "2017-10-15T07:29:07.841Z",
"updated_at": "2017-10-15T07:29:07.841Z"
}
]
put http://127.0.0.1:3000/users/1
{"username":"admin", "status": 1}
{
"id": 1,
"username": "admin",
"status": 1,
"created_at": "2017-10-15T07:28:37.302Z",
"updated_at": "2017-10-15T07:52:55.613Z"
}
...