跳到主要内容

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流

使用分页

  1. 使用 page 和 per_page 参数,见 kaminari 或 pagy 库
  2. 使用 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