用途:当用户需要一份 OpenAPI 规范而代码库中尚无现成规范时,本技能通过静态分析提供方代码库,生成一份 OpenAPI 3.x YAML 规范。生成结果可能不完整(无法解析的 schema 会生成桩),但始终是合法 OAS,可立即用于路径覆盖测试。
前置条件:PATH 中需有 ripwire;若缺失,参考 pact-coverage/references/install-ripwire.md。
使用方式(按步骤):
- 识别框架。运行 ripwire <provider-root> --for="HTTP route definitions and request handlers" 定向,再结合配置文件(Gemfile 含 sinatra/rails、package.json 含 express/fastify/koa/hapi、pyproject.toml/requirements.txt 含 flask/fastapi)推断;仍不明确时询问用户。
- 提取路由。按框架使用对应正则,例如 Rails:ripwire <root> --regex="resources|get '|post '|put '|patch '|delete '|namespace";Sinatra 用 get '/post ' 等;Express/Fastify/Koa 用 --regex='.get(|.post(|.put(|.patch(|.delete(|.route(';Flask 用 @app.route|@blueprint.|@bp.;FastAPI 用 @router.|@app.get 等。注意 --grep= 为字面匹配,含 | 的备选需用 --regex=。可回退到 ripwire <root> --for="HTTP route handler path method registration"。
- 建立路由清单:记录路径模板(具体值归一化为 {param})、HTTP 方法、处理函数符号;同方法+路径去重,保留首个处理函数。
- 逐路由提取 schema:--expand 处理函数符号,查找请求体字段、响应体字段、状态码(默认 GET 200、POST 201、DELETE/PUT/PATCH 无体时 204);推断失败时输出空 schema 桩并标记 x-schema-source: stub,不跳过路由。
- 组装 OAS 3.x 文档:openapi "3.0.3",info 含 title、version "0.0.0-generated" 与说明;paths 内写 summary、parameters(路径参数 in: path 必填)、requestBody、responses;推断字段标 x-schema-source: inferred,仅在处理函数缺字段无法工作处使用 required。
- 写入并报告:默认保存至 <provider-root>/openapi-generated.yaml 或用户指定位置,打印路由数、推断/桩数量与状态码统计,并提醒用户该规范仅为起点,桩 schema 与缺失必填字段会造成覆盖检查假缺口,生产 BDCT 前需人工审核补全。
限制:结果可能不完整;Rails 路由为间接生成、嵌套路由会扩展路径、中间件与 concern 可能追加路由、版本前缀需保留;ripwire 返回 over_ceiling=1 时应缩小根路径到控制器/路由目录重跑。资料未提供收费、价格、平台等信息。