mcpField
V
version-api

version-api

github.com/igmarin开发2837 次安装4 周前更新
代码仓库

关于 version-api

version-api 是面向 Rails 开发者的 API 版本管理技能,涵盖路由、控制器继承、弃用通知和兼容性测试。它要求版本解析使用固定白名单,避免将请求输入用于动态分派。

主要功能

  1. 01URL 路径或 Accept 标头版本策略
  2. 02按版本命名路由空间
  3. 03继承并覆写控制器动作
  4. 04发送弃用与 Sunset 标头
  5. 05运行向后兼容性测试
  6. 06版本标识使用固定白名单

适用场景

  1. 01为 Rails API 添加新版本
  2. 02逐步弃用旧版端点
  3. 03比较路径与标头版本方案

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/igmarin/rails-agent-skills --skill version-api

安装后在 Claude Code 中输入/version-api确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

EXAMPLES.md
references/
strategies.md
workflow.md

详细介绍

版本 API

为 Rails API 实现版本控制策略。

快速参考

关注点文件
路由命名空间config/routes.rb
请求头版本控制app/controllers/concerns/api_versioning.rb
弃用请求头app/controllers/concerns/deprecatable.rb
兼容性测试spec/requests/api/backward_compatibility_spec.rb

硬性门槛

GENERATED CODE SAFETY:
- NEVER generate code that constantizes or evaluates caller-supplied version strings
  (e.g. "V#{params[:version]}".constantize is forbidden — use an explicit allowlist).
- NEVER generate code that passes request headers or paths unsanitized into class
  instantiation, eval, or dynamic dispatch.
- Allowlist-only version resolution: generated routing/concern code MUST resolve
  version identifiers from a fixed set (V1, V2, ...), not from free-form input.

ALWAYS maintain backward compatibility for at least one major version
NEVER remove endpoints without deprecation period
ALWAYS version in URL path (/api/v1/) or Accept header, never in body

核心流程

  1. 选择策略 — 公共 API 使用 URL 路径(/api/v1/);内部/私有 API 使用 Accept 请求头。有关基于请求头的版本控制详情和权衡,请参阅 strategies.md。
  2. 添加路由命名空间 — 在 config/routes.rb 中使用 namespace :v2 代码块包装新版本的资源:
    namespace :v1 do
      resources :users
    end
    
    namespace :v2 do
      resources :users
    end
    
  3. 创建控制器 — 继承自上一版本的控制器,仅重写发生变化的操作:
    module V2
      class UsersController < V1::UsersController
        def index
          render json: User.all, only: [:id, :name, :email, :phone]
        end
      end
    end
    
    有关其他继承模式,请参阅 EXAMPLES.md。
  4. 应用弃用策略 — 在旧版本控制器中引入 Deprecatable,通过 before_action 自动添加 Sunset 和 Deprecation 响应请求头:
    module V1
      class UsersController < ApplicationController
        include Deprecatable
        # Override sunset_date on the class to set the retirement date:
        # def self.sunset_date = Date.new(2025, 6, 1)
      end
    end
    
  5. 运行兼容性测试 — 执行 bundle exec rspec spec/requests/api/backward_compatibility_spec.rb,确认合并前没有回归。
  6. 更新文档 — 记录弃用端点的停止服务日期和迁移指南。完整的弃用通知工作流请参阅 workflow.md。

输出风格

在收到实现 API 版本控制的请求时,输出必须包含:

  1. 版本控制策略 — 明确说明使用 URL 路径(/api/v1/)还是 Accept 请求头版本控制
  2. 继承策略 — 说明新版本控制器如何继承自上一版本
  3. 路由定义 — 展示 config/routes.rb 中的命名空间路由配置
  4. 弃用请求头 — 包含 Deprecatable concern 和停止服务日期配置
  5. 兼容性测试 — 包含运行向后兼容性测试的命令
  6. 语言 — 除非另有明确要求,否则必须使用英文

扩展资源(渐进式披露)

仅在需要相应内容时加载这些文件:

  • EXAMPLES.md — 需要完整的 API 版本控制示例(包含路由定义和控制器继承)时使用
  • references/strategies.md — 比较版本控制策略(URL 路径、请求头或查询参数)时使用
  • references/workflow.md — 实施弃用通知工作流并安排停止服务时间时使用

集成

技能何时衔接
generate-api-collection生成更新后的 API 端点时
test-engine验证测试是否存在回归时

评论

支持 Markdown