Rails API模式
Ralis MVC风格
- controllers 控制器 —— 将用户界面和数据模型关联起来,接受操作,更新数据模型
- models 数据模型 ——主动记录模式 “ActiveRecord”类
- views 视图 —— “HTML / XML / JavaScript”模板
初始化项目
- 更换镜像源[选]
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
bundle config mirror.https://rubygems.org https://gems.ruby-china.com
- install Rails
gem install rails -v 7.0.2.3
# Arch Linux的包管理
pacman -S postgresql-libs
- Rails initialization
rails new --api --database=postgresql --skip-test mangosteen-1
- 启动服务器
没有配置服务器启动不成功
code mangosteen-1
bundle exec rails server
# or
bin/ralis server
使用gem插件
使用GemFile
分页插件:kaminari
以及pagy
微博feed流
使用分页
- 使用 page 和 per_page 参数,见 kaminari 或 pagy 库
- 使用 start_id 和 limit 参数,需要 id 是自增数字
RESTful API风格
- Roy 2000年博士论文提到术语
- Roy 曾参与撰写 HTTP 规格文档
设计理念
- 已资源为中心(例如:名词一般作为”资源“)
- 充分利用HTTP现有功能:状态码、头部字段
- 参考:Github API 符合REST架构风格
请求风格
JSON
- POST / DELETE / PATCH
POST /api/v1/items
Content-Type : application/json
{"amount":99, "kind":"income"}
{"resource": {...}} or {"errors": "{...}"}
URL
POST /api/v1/items
Content-Type: application/x-www-form-urlencoded
amount=99&kind=income
HTTP状态码设计原则
- 看见路径就知道请求什么东西
- 看见动词就知道是什么操作
- 看见状态码就知道结果是什么
常用的状态码
状态 | 状态 |
---|---|
200 - 成功 | 201 - 创建成功 |
400 - 其他错误 | 401 - 未登录 |
402 - 需付费 | 403 - 没有权限 |
404 - 未找到 | 412 - 不满足前提条件 |
422 - 无法处理,参数有问题 | 429 - 请求太频繁 |
命令创建控制器与数据模型
# g = generate
bin/rails g model ValidationCode email:string kind:integer used_at:datetime
bin/rails g controller api::v1::validation_codes create