如何向外部API传递多个ID数组并获取全部请求对应的返回结果
问题原因及修复方案
核心问题点
- 你把视图返回语句
return view()写在了foreach循环内部,程序执行完第一次ID请求后就直接返回结果终止运行,自然只能拿到第一个ID的响应 $jsonData变量每次循环都会被新的响应覆盖,没有存储所有ID的返回结果- 你的请求地址多写了一层
http://,http://http://127.0.0.1:8000属于无效地址,会导致请求失败
修复后代码
public function DeviceStatus(Request $request) { $queryinput = $request->deviceNumber; $idsArray = explode(" ", $queryinput); // 初始化存储所有结果的数组 $jsonData = []; foreach ($idsArray as $key => $id) { try { // 修复重复的http://前缀 $response = Http::get('http://127.0.0.1:8000/extapi/v12/DeviceData/ByDeviceDataSerial/'.$id); // 把当前ID的结果追加到数组里,用ID作为键方便后续取值 $jsonData[$id] = $response->json(); } catch (\Exception $exception) { return back()->withError($exception->getMessage()); } } // 循环结束所有请求完成后再返回视图 return view('tracedevice.ectsdevicestatus', compact('jsonData')); }
优化建议
如果接口支持批量传ID,建议调整为一次请求传递所有ID,减少HTTP请求开销提升性能。如果ID数量较多,也可以用Laravel HTTP客户端的并发请求特性优化,写法如下:
$promises = []; foreach ($idsArray as $id) { $promises[$id] = Http::async()->get('http://127.0.0.1:8000/extapi/v12/DeviceData/ByDeviceDataSerial/'.$id); } $responses = Illuminate\Support\Facades\Http::pool($promises); $jsonData = []; foreach ($responses as $id => $response) { $jsonData[$id] = $response->json(); }
多个请求并行发送可以大幅缩短总请求耗时。
内容的提问来源于stack exchange,提问作者Melx
相关产品推荐
相关产品推荐

