upscale/http-server-mock

响应已识别请求的静态正文和头部的HTTP服务器

5.0.1 2020-12-09 04:11 UTC

This package is auto-updated.

Last update: 2024-09-18 07:03:54 UTC


README

本项目实现了一个HTTP服务器,该服务器响应已识别的请求,返回静态正文和头部。请求的任何部分,包括头部,都可以配置以影响返回的响应。请求与响应之间的映射在JSON配置文件中声明。

虽然是一个通用服务器,但该项目特别适用于REST API。它可以在几分钟内启动一个完全可操作的模拟API服务器,用于原型设计。

功能

  • 通过方法、URL、头部、正文匹配请求
  • 使用静态头部和正文响应
  • 请求/响应正文在外部文件中
  • JSON配置文件

安装

通过Composer将项目安装到您选择的目录

composer create-project --no-dev upscale/http-server-mock /tmp/http-server-mock

使用方法

启动服务器最简单的方法是通过PHP的内置Web服务器

php -S 127.0.0.1:8080 /tmp/http-server-mock/server.php

在浏览器中打开 http://127.0.0.1:8080 以确认服务器正在运行。

或者,使用已安装Apache 2.x和mod_rewrite的HTTP服务器。该项目已预配置,可以部署在任何Document Root下以开始服务传入请求。

配置

配置定义了通过其属性匹配响应到请求的规则,格式为JSON。

服务器在以下位置查找配置文件

  1. 环境变量中的文件名 HTTP_SERVER_MOCK_CONFIG_FILE
  2. 项目根目录中的文件 config.json
  3. 提供的文件 config.json.dist

格式

JSON配置文件具有以下格式

[
    {
        "request": {
            "method": "POST",
            "path": "/blog/posts",
            "params": {},
            "headers": {"Accept": "application/json", "Content-Type": "application/json"},
            "cookies": {},
            "body": "{\"title\":\"Hello World!\",\"body\":\"This is my first post!\"}"
        },
        "response": {
            "status": 201,
            "reason": "Created",
            "headers": {"Content-Type": "application/json"},
            "body": "{\"id\":\"1\",\"title\":\"Hello World!\",\"body\":\"This is my first post!\"}"
        }
    }
]

大多数属性都是标量。属性 paramsheaderscookies 是键值对。

几乎所有属性都是可选的,可以省略以不参与匹配。

外部源

在上面的配置示例中,请求和响应正文都嵌入到配置文件中。虽然在某些情况下很有用,但它可能会使文件膨胀并创建额外的格式化挑战,例如转义。

配置支持对外部源的引用,例如

{
    "body": "file://%base_dir%/data/blog/posts/1/response.json"
}

占位符 %base_dir% 表示服务器安装目录的绝对路径。

请求格式

服务器在匹配请求时考虑请求正文的格式。可读性强的格式允许在语法上有一定程度的自由度,以提高内容可读性。大多数格式通常允许空格和缩进的变化。无论使用哪种语法变化,请求正文都会成功匹配。

格式由请求头 Content-Type 自动确定。常见的MIME类型到支持的格式的映射在 mime-types.php 中声明。如果自动检测不足,可以在配置中强制执行格式。

强制执行正文格式的配置语法

{
    "request": {
        "format": "json"
    }
}

支持格式:binarytextxmlhtmljson

默认情况下假设格式 binary

响应延迟

真实服务器计算响应所需时间因请求而异,差异很大。出于测试目的,可能需要模拟重型操作的实时响应时间。

该配置允许指定固定的响应延迟,例如

{
    "response": {
        "delay": 2000
    }
}

延迟持续时间以毫秒为单位(1秒=1000毫秒)。

算法

对于每个传入请求,服务器从配置文件中读取规则并评估它们。规则将按照声明的顺序逐个与请求进行评估,直到找到第一个匹配项。一旦成功匹配,将返回匹配规则的响应,并且后续处理停止。

规则评估是通过检查传入请求是否具有声明的请求属性来完成的。为了匹配,请求需要包含所有声明的属性的匹配值。对于键值属性,需要所有声明的对都存在。允许存在配置中未提到的附加数据。

注意:具有特定属性的规则需要位于具有相同属性子集的通用规则之前。否则,通用规则将在特定规则评估之前匹配,从而有效地抑制后者。

贡献

欢迎提交包含修复和改进的拉取请求!

许可证

版权所有 © Upscale Software。保留所有权利。

许可协议:Apache License, Version 2.0,详情请见此处