#openapi #mocking #mock-server #request-headers

bin+lib openapi-mocker

一个简单的 OpenAPI 3.0 模拟器

4 个版本

0.1.3 2024 年 5 月 2 日
0.1.2 2024 年 5 月 2 日
0.1.1 2024 年 4 月 30 日
0.1.0 2024 年 4 月 29 日

1358Web 编程

Download history 216/week @ 2024-04-24 240/week @ 2024-05-01 2/week @ 2024-05-15 10/week @ 2024-05-22

每月 152 次下载

MIT 许可证

31KB
460

openapi-mocker

从 OpenAPI 3.0 规范创建模拟服务器。

安装

  • 使用 cargo 安装
cargo install openapi-mocker

用法

  1. 创建 OpenAPI 3.0 规范文件。例如,openapi.yaml

    openapi: 3.0.0
    info:
      title: Example API
      version: 1.0.0
    paths:
        /hello:
            get:
                responses:
                    '200':
                        description: OK
                        content:
                            application/json:
                                schema:
                                    type: object
                                    properties:
                                        message:
                                            type: string
                                examples:
                                    default:
                                        value:
                                            message: Hello, world!
                    '400':
                        description: Bad Request
                        content:
                            application/json:
                                schema:
                                    type: object
                                    properties:
                                        message:
                                            type: string
                                examples:
                                    default:
                                        value:
                                            message: Bad request
    
  2. 运行模拟服务器

    openapi-mocker openapi.yaml
    
    • 或者,使用 docker 运行
    docker run \
        -v $(pwd)/tests/testdata/petstore.yaml:/openapi.yaml \
        -p 8080:8080 \
        thisk8brd/openapi-mocker:latest \
        /openapi.yaml
    
  3. 向模拟服务器发送 http 请求

    curl -i https://127.0.0.1:8080/hello
    

    响应应该是: json {"message":"Hello, world!"}

    请求不存在的路由

    curl -i https://127.0.0.1:8080/does-not-exist
    

    响应应该是 404 未找到。

选项

  • --port-p:服务器运行的端口。默认为 8080

执行请求

您可以使用 OpenAPI 规范中定义的自定义示例来测试不同的响应。自定义示例可以以不同的方式定义和请求。

按路径请求

您可以为要匹配的精确路径定义一个示例。示例

openapi: 3.0.0
info:
  title: Example API
  version: 1.0.0
paths:
    /hello/{name}:
        get:
            responses:
                '200':
                    description: OK
                    content:
                        application/json:
                            schema:
                                type: object
                                properties:
                                    message:
                                        type: string
                            examples:
                                default:
                                    value:
                                        message: Hello, world!
                                /hello/jon_snow:
                                    value:
                                        message: You know nothing, Jon Snow!

按精确路径请求示例

curl -i https://127.0.0.1:8080/hello/jon_snow

响应应该是

{"message":"You know nothing, Jon Snow!"}

请求默认示例

curl -i https://127.0.0.1:8080/hello/arya_stark

响应应该是

{"message":"Hello, world!"}

按查询参数请求

您可以为要匹配的查询参数定义一个示例。

示例

openapi: 3.0.0
info:
  title: Example API
  version: 1.0.0
paths:
    /hello:
        get:
            parameters:
                - name: name
                  in: query
                  required: true
                  schema:
                    type: string
            responses:
                '200':
                    description: OK
                    content:
                        application/json:
                            schema:
                                type: object
                                properties:
                                    message:
                                        type: string
                            examples:
                                default:
                                    value:
                                        message: Hello, world!
                                "query:name=sansa":
                                    value:
                                        message: Sansa Stark

按查询参数请求示例

curl -i https://127.0.0.1:8080/hello?name=sansa

响应应该是

{"message": "Sansa Stark"}

不匹配查询参数的请求

curl -i https://127.0.0.1:8080/hello?name=arya

响应应该是

{"message": "Hello, world!"}

按头请求

您可以为要匹配的头定义一个示例。

示例

openapi: 3.0.0
info:
  title: Example API
  version: 1.0.0
paths:
    /hello:
        get:
            parameters:
                - name: name
                  in: header
                  required: true
                  schema:
                    type: string
            responses:
                '200':
                    description: OK
                    content:
                        application/json:
                            schema:
                                type: object
                                properties:
                                    message:
                                        type: string
                            examples:
                                default:
                                    value:
                                        message: Hello, world!
                                "header:x-name=tyrion":
                                    value:
                                        message: Tyrion Lannister

按头请求示例

curl -i https://127.0.0.1:8080/hello -H "x-name: tyrion"

响应应该是

{"message": "Tyrion Lannister"}

不匹配头的请求

curl -i https://127.0.0.1:8080/hello

响应应该是

{"message": "Hello, world!"}

注意:匹配的顺序如下:路径、查询、头。还要注意的是,请求将返回上述顺序中找到的第一个匹配项。如果没有找到匹配项,将返回默认示例。

注意:匹配将应用于 OpenAPI 规范中所有示例和响应。

贡献

欢迎贡献!请参阅贡献指南

许可证

MIT

依赖项

约19-31MB
约556K SLoC