RPC下Request请求参数转换

深蓝

我在使用 RPC远程调用 插件,远程获取信息。
当我从其他服务器请求rpc到达后,我获取到的参数是一个数组,如下代码。
我现在需要将这个$args转换成Request类型才能请求getProject,我需要如何转换一下,或者其他方法才能请求?

namespace service;
class User
{
    public function get($args)
    {
        // 我需要将这个$args转换成Request类型才能请求getProject,我需要如何转换一下,或者其他方法才能请求?
        $result = (new ProjectController)->getProject($args ???);
        return response_rpc_json(0, '获取成功', $args);
    }
}

这是我已经写好一个api接口,可以正常运行,但同时我希望RPC接口也能直接调用,不要改动这个方法。

class ProjectController
{
    /**
     * 提供搜索选项
     * @param Request $request
     * @return Response
     * @throws BadRequestHttpException
     */
    public function getProject(Request $request): Response
    {
        return show('Success');
    }

}
209 1 0
1个回答

深蓝

可以改动getProject的$request类型,解决问题,但是这样会为后面埋下很多坑。有没有大佬能指点一二。

  • tanhongbin 2024-07-29

    把业务放在service 层 接口 和 rpc 只处理接受参数 和 返回 等信息,这样就共用的 现在只能这么做 rpc 和 框架的Request 两码事

  • 深蓝 2024-07-29

    我模拟了一个Request请求,然后传递过去,勉强可以解决问题。

    private function generateRequest($data, $uri): Request
        {
            $this->checkSecretKey($data);
            $headers = [
                'Host' => '127.0.0.1:8080',
                'Content-Type' => 'application/x-www-form-urlencoded',
            ];
            // 构建请求头
            $headerBuffer = '';
            foreach ($headers as $key => $value) {
                $headerBuffer .= "$key: $value\r\n";
            }
    
            // 构建请求体
            $bodyString = http_build_query($data);
    
            // 构建完整的请求缓冲区
            $buffer = "POST $uri HTTP/1.1\r\n" .
                $headerBuffer . "\r\n" .
                $bodyString;
    
            // 创建 Request 对象
            return new Request($buffer);
        }
  • tanhongbin 2024-07-29

    你这种 可以看一下 webman底层源码 他是怎么写的 你就怎么写 不过不建议 rpc就是简单服务器端 高性能互相通信的,他不是处理表单的

  • 深蓝 2024-07-29

    因为我的接口已经写好了,我想直接使用原来的api,如果重新适配一个service层的话,工程太大了。业务,能跑起来就行,其他的暂时不重要。

×
🔝