satahippy/fake-api-server

伪造您的API。主要用于前端开发。

v0.1.1 2015-09-06 21:44 UTC

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 ClientDoctrine 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状态,那么这可能会成为一个大问题。