我在使用 RPC遠(yuǎn)程調(diào)用 插件,遠(yuǎn)程獲取信息。
當(dāng)我從其他服務(wù)器請求rpc到達(dá)后,我獲取到的參數(shù)是一個數(shù)組,如下代碼。
我現(xiàn)在需要將這個$args轉(zhuǎn)換成Request類型才能請求getProject,我需要如何轉(zhuǎn)換一下,或者其他方法才能請求?
namespace service;
class User
{
public function get($args)
{
// 我需要將這個$args轉(zhuǎn)換成Request類型才能請求getProject,我需要如何轉(zhuǎn)換一下,或者其他方法才能請求?
$result = (new ProjectController)->getProject($args ???);
return response_rpc_json(0, '獲取成功', $args);
}
}
這是我已經(jīng)寫好一個api接口,可以正常運行,但同時我希望RPC接口也能直接調(diào)用,不要改動這個方法。
class ProjectController
{
/**
* 提供搜索選項
* @param Request $request
* @return Response
* @throws BadRequestHttpException
*/
public function getProject(Request $request): Response
{
return show('Success');
}
}
可以改動getProject的$request類型,解決問題,但是這樣會為后面埋下很多坑。有沒有大佬能指點一二。
把業(yè)務(wù)放在service 層 接口 和 rpc 只處理接受參數(shù) 和 返回 等信息,這樣就共用的 現(xiàn)在只能這么做 rpc 和 框架的Request 兩碼事
我模擬了一個Request請求,然后傳遞過去,勉強可以解決問題。
private function generateRequest($data, $uri): Request
{
$this->checkSecretKey($data);
$headers = [
'Host' => '127.0.0.1:8080',
'Content-Type' => 'application/x-www-form-urlencoded',
];
// 構(gòu)建請求頭
$headerBuffer = '';
foreach ($headers as $key => $value) {
$headerBuffer .= "$key: $value\r\n";
}
// 構(gòu)建請求體
$bodyString = http_build_query($data);
// 構(gòu)建完整的請求緩沖區(qū)
$buffer = "POST $uri HTTP/1.1\r\n" .
$headerBuffer . "\r\n" .
$bodyString;
// 創(chuàng)建 Request 對象
return new Request($buffer);
}
因為我的接口已經(jīng)寫好了,我想直接使用原來的api,如果重新適配一個service層的話,工程太大了。業(yè)務(wù),能跑起來就行,其他的暫時不重要。