在 Laravel 项目中连接 API,通常涉及以下几个步骤:
Laravel 默认没有内置 HTTP 客户端,但你可以使用 Guzzle HTTP 客户端来简化 HTTP 请求。首先,通过 Composer 安装 Guzzle:
composer require guzzlehttp/guzzle
为了保持代码的整洁和可维护性,建议创建一个服务类来处理所有的 API 请求。
php artisan make:service ApiService
<?php
namespace App\Services;
use GuzzleHttp\Client;
class ApiService
{
protected $client;
public function __construct()
{
$this->client = new Client([
'base_uri' => 'https://api.example.com/v1/', // 替换为你的 API 基础 URL
'timeout' => 2.0,
]);
}
public function get($endpoint, array $params = [])
{
return $this->client->request('GET', $endpoint, [
'query' => $params,
]);
}
public function post($endpoint, array $data = [])
{
return $this->client->request('POST', $endpoint, [
'json' => $data,
]);
}
// 其他 HTTP 方法(如 PUT, DELETE)可以根据需要添加
}
php artisan make:controller ApiController
<?php
namespace App\Http\Controllers;
use App\Services\ApiService;
class ApiController extends Controller
{
protected $apiService;
public function __construct(ApiService $apiService)
{
$this->apiService = $apiService;
}
public function index()
{
$response = $this->apiService->get('items');
$data = json_decode($response->getBody(), true);
return view('api.index', compact('data'));
}
public function store(Request $request)
{
$response = $this->apiService->post('items', $request->all());
$data = json_decode($response->getBody(), true);
return redirect()->route('api.index')->with('success', 'Item created successfully!');
}
}
在 routes/web.php
或 routes/api.php
中配置相应的路由:
use App\Http\Controllers\ApiController;
Route::get('/api/items', [ApiController::class, 'index'])->name('api.index');
Route::post('/api/items', [ApiController::class, 'store'])->name('api.store');
为了更好地处理 API 请求中的异常,可以在服务类中添加异常处理逻辑。
public function get($endpoint, array $params = [])
{
try {
$response = $this->client->request('GET', $endpoint, [
'query' => $params,
]);
return json_decode($response->getBody(), true);
} catch (\Exception $e) {
// 处理异常,例如记录日志或抛出自定义异常
throw new \Exception('API request failed: ' . $e->getMessage());
}
}
从 Laravel 7 开始,你可以使用 Laravel 自带的 HTTP 客户端,它基于 Guzzle 构建,但提供了更简洁的 API。
Laravel HTTP 客户端已经包含在 Laravel 框架中,无需额外安装。
use Illuminate\Support\Facades\Http;
$response = Http::get('https://api.example.com/v1/items');
$data = $response->json();
通过以上步骤,你可以在 Laravel 项目中轻松连接和使用外部 API。记得根据实际需求调整代码和配置。
领取专属 10元无门槛券
手把手带您无忧上云