Ruby on Rails 接口文档编写指南与实用方法
时间:2026-08-15 | 作者:电竞小硕 | 阅读:0TDD 测试驱动开发:借助rspec_api_document来推进开发,一边把接口功能打磨完整,一边顺手把接口文档自动产出。这样一来,开发和文档维护这两件事也就自然合到了一起。
验证码接口示例
下面以验证码接口为例,说明基本实现方式。
- modal
class ValidationCode < ApplicationRecord
end
- router
Rails.application.routes.draw do
resources :validation_codes, only: [:create]
end
- controller
class ValidationCodesController < ApplicationController
def create
code = SecureRandom.random_number.to_s[2..7]
validation_code = ValidationCode.new email: params[:email], kind: 'sign_in', code: code
if validation_code.sa ve
head 200
else
render json: {errors: validation_code.errors}
end
end
end
rspec_api_documentation
安装
gem 'rspec_api_documentation'
bundle install
创建文件
mkdir spec/acceptance
code spec/acceptance/validation_codes_spec.rb
编写测试
require 'rails_helper'
require 'rspec_api_documentation/dsl'
resource "验证码" do
post "/validation_codes" do
example "请求发送验证码" do
do_request
expect(status).to eq 200
end
end
end
验证并生成文档
请求成功就会生成api文档
bin/rake docs:generate
查看文档:
d doc/api
npx http-server .
完善生成验证码接口
问题1: 测试请求验证码没有传入email参数,返回200
- modal 限制email为必填
class ValidationCode < ApplicationRecord
# email必填
validates :email, presence: true
end
- controller 请求失败返回400
- bin/rake docs:generate
问题2: 文档只能显示正确的请求
获取验证码如果未传email(必填参数),将使用示例参数。
# spec/acceptance/validation_codes_spec.rb
parameter :email, type: :string
let(:email) { 'apple@x.com' }
请求和响应的body为json格式
因为 rspec_api_documentation 官方包本身存在一个 bug。
- 将使用其它开发者提供的rspec_api_documentation保存在本地
git clone https://github.com/FrankFang/hTAhuOU4I2QH /vendor/rspec_api_documentation
rm ./vendor/rspec_api_documentation; cp -r /tmp/x/vendor/rspec_api_documentation ./vendor/
- 修改路径并重新安装
# Gemfile
gem 'rspec_api_documentation', path: './vendor/rspec_api_documentation'
bundle install
- 配置参数
- Configuration options
# spec/spec_helper.rb
require 'rspec_api_documentation'
RspecApiDocumentation.configure do |config|
config.request_body_formatter = :json
end
config.before(:each) do |spec|
if spec.metadata[:type].equal :acceptance
header 'Accept', 'application/json'
header 'Content-Type', 'application/json'
end
end
code不能作为响应字段显示在文档上
# controllers/api/v1/validation_codes_controller.rb
class Api::V1::ValidationCodesController < ApplicationController
def create
code = SecureRandom.random_number.to_s[2..7]
validation_code = ValidationCode.new email: params[:email], kind: 'sign_in', code: code
if validation_code.sa ve
render status: 200
else
render json: {errors: validation_code.errors}, status: 400
end
end
end
# spec/acceptance/validation_codes_spec.rb
require 'rails_helper'
require 'rspec_api_documentation/dsl'
resource "验证码" do
post "/api/v1/validation_codes" do
parameter :email, type: :stri
let(:email) { 'apple@x.com' }
example "请求发送验证码" do
do_request
expect(status).to eq 200
expect(response_body).to eq ' '
end
end
end
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
