我需要在我的網站前端使用一個 api,但我不想將該 api 的密鑰公開給我的前端用戶,所以我決定制作一個代理。然而,我認為我不一定以最干凈、直接、類似 Laravel 或 Guzzle 的方式完成它。我將展示我的作品:
在 web.php 中,我添加了一個如下所示的路由:Route::post('/address-api/{path?}', 'Controller@addressApi')->where('path', '.*');這樣,之后的整個路徑/address-api都會傳遞給我的控制器,因此我可以假設任何 post 請求都代理到該 api。
然后在Controller.php我做了這個:
public function addressApi($path, Request $request)
{
if (!Str::startsWith($path, '/')) $path = '/' . $path; // make sure it starts with /
$url = 'https://api.craftyclicks.co.uk/address/1.1' . $path;
$postData = $request->all();
$postData['key'] = env('CRAFTYCLICKS_KEY');
$client = new Client();
$response = $client->request('POST', $url, [
'json' => $postData
]);
return response()->json(json_decode($response->getBody(), true));
}
因此,無論他們發布到我的 api 的任何 json,我都會發布到 CraftyClicks api,但我將我們的密鑰添加到 json。上面的代碼正在運行,但它似乎不是正確的方法。
我不確定的是 json_decoding body 并回傳它,return response()->json(json_decode($response->getBody(), true));. 我覺得這有什么……骯臟的。我覺得必須有一種更簡潔的方法來準確地回傳實際的 API 回應。
起初我正在做return $response->getBody();,但我不喜歡那樣,因為Content-type: application/json當我這樣做時,回應中沒有標頭。Guzzle 是否提供了一種開箱即用的方法,可以完全按原樣回傳回應、標頭和所有內容?
uj5u.com熱心網友回復:
讓 Laravel 有輸出;這更干凈。
return response($response->getBody())
->withHeaders($response->getHeaders());
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/349320.html
