首页 > 解决方案 > 将压缩的 JSON 发布到 Laravel API 端点

问题描述

我使用 Apache Benchmark 进行了一些基本测试,看起来使用DeflateStream该类将 500 条记录从 C# 发布到 PHP 会导致处理速度提高约 3 倍,并将带宽从 140k 减少到 10k,每个帖子仅额外增加 2% 的 CPU。

我现在正在尝试更新我现有的 API 端点,以便如果旧连接器仍然发送未压缩的数据,它不会中断,但发送压缩数据的更新连接器将自动解压缩。虽然我有一个纯 PHP 的概念证明,但我不确定如何将它与Request类混合使用。这是我的 API 的启动方式:

public function BasicApi(Request $request)
{
    $messages = [
    ];

    $validator = Validator::make($request->all(), [
        'data' => 'required|array',
    ], $messages);
    if ($validator->fails()) {
        throw new UpdateResourceFailedException('Could not sync.', $validator->errors());
    }

    $reference_id = collect($request->input('data'))->pluck('reference_id');
    ........  more stuff  ........

}

使用直接的 PHP,我能够找到一种方法来过滤传入的代码是否被压缩:

$incomingData = gzinflate(file_get_contents('php://input')); 
if (file_get_contents('php://input') != $incomingData && $incomingData !== FALSE) {
     $incomingData = gzinflate(file_get_contents('php://input'));
}
echo $source;

我应该怎么做才能发送我的 Laravel API 压缩数据?如果我让 Apache 自动解压缩它,那么请求就会像这样转义:

"{\"data\":[{\"reference_id\":\"75080\"...

如果我不让它自动执行,那么我不确定如何将传入的内容注入到Request对象中。

标签: php.netlaravelcompression

解决方案


推荐阅读