satahippy / fake-api-server
伪造您的API。主要用于前端开发。
Requires
- php: >=5.5.0
- doctrine/cache: ~1.0
- guzzlehttp/guzzle: ~6.0
- league/flysystem: ~1.0
- nikic/fast-route: ~0.4
- psr/http-message: ~1.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-28 17:49:19 UTC
README
使用方法
您所需的一切是 ... 数据提供者!它根据请求提供数据
数据提供者
每个数据提供者都实现了接口 Sata\FakeServerApi\DataProvider\IDataProvider
。目前只有一个方法 data
,它接收 Psr\Http\Message\ServerRequestInterface
并返回一些数据
RouterDataProvider
这是一个组合数据提供者。它通过 nikic/FastRoute 获取路由和数据提供者。因此,每个路由都必须满足要求。
示例
$provider = new RouterDataProvider([ // limit and offset parameters only make sense '/local/articles[/]' => new PathDataProvider($filesystem, ['limit', 'offset']), // all other local data get from local data folder '/local/{trail:.*}' => new PathDataProvider($filesystem), // all r get from reddit (try request /r/PHP/hot.json) // requested every time cause of VoidCache '/r/{stub:.*}.json' => new ProxyDataProvider($redditGuzzle, $voidCache), // all r get from reddit (try request /get?your=paramter) '/get{stub:.*}' => new ProxyDataProvider($httpbinGuzzle, $cache), // all r get from reddit (try request /post?your=paramter with POST) '/post{stub:.*}' => new ProxyDataProvider($httpbinGuzzle, $cache) ]); $data = $provider->data($request);
功能
当请求满足路由后,一个带有匹配参数的新请求实例(传递给目标数据提供者)。
FileDataProvider
仅返回指定文件的内容。
示例
$provider = new FileDataProvider($filesystem, 'path/to/the/file.json'); $data = $provider->data($request);
功能
它接收一个 League\Flysystem\Filesystem
实例。关于 Flysystem,请在此处了解更多信息 - thephpleague/flysystem。
PathDataProvider
类似于 FileDataProvider
,它返回文件内容,但有一些额外的行为。
首先,它将一些文件夹(通过 Flysystem)挂载到请求(或反之亦然)。它还可以处理重要的参数。
示例
例如,如果您有一个帖子API,您可以将 data/posts/
文件夹挂载到所有 /posts
请求。当然,您的API有分页逻辑。例如,/posts?page=1
,/posts?page=2
。
因此,您的请求被映射到文件
/posts
->data/posts/default.json
/posts?page=1
->data/posts/page_1.json
/posts?page=2
->data/posts/page_2.json
/posts?some=parameter
->data/posts/default.json
默认情况下,如果文件未找到,则挂载默认文件。
$filesystem = new Filesystem(new Local(__DIR__ . '/data')); $provider = new PathDataProvider($filesystem, ['page']); $data = $provider->data($request);
ProxyDataProvider
主要这个数据提供者用于慢速连接。
它接收 Guzzle Client 和 Doctrine Cache 的实例
因此,每个请求都会代理到远程服务器并保存到缓存中。
示例
$cache = new FilesystemCache(__DIR__ . '/cache'); $voidCache = new VoidCache(); $filesystem = new Filesystem(new Local(__DIR__ . '/data')); $redditGuzzle = new GuzzleHttp\Client(['base_uri' => 'https://www.reddit.com']); $httpbinGuzzle = new GuzzleHttp\Client(['base_uri' => 'http://httpbin.org']); // request everytime cause of VoidCache $redditProvider = new ProxyDataProvider($redditGuzzle, $voidCache); // request only once an save to the FilesystemCache $httpbinProvider = new ProxyDataProvider($httpbinGuzzle, $cache);
限制
与其他响应/请求参数配合使用时效果不佳。如果您的应用程序依赖于HTTP状态,那么这可能会成为一个大问题。