backend2-plus/connect-rest-api-bundle
A Symfony bundle for connecting to REST APIs with basic authentication support. This bundle provides a simple way to send HTTP requests with Basic Authentication.
composer require backend2-plus/connect-rest-api-bundle
The bundle is automatically registered in your Symfony application. If you need manual registration, add it to config/bundles.php:
<?php
return [
// ... other bundles
Backend2Plus\ConnectRestApiBundle\ConnectRestApiBundle::class => ['all' => true],
];
Add the following to your .env file:
# REST API credentials
CONNECT_REST_API_USERNAME=your_username
CONNECT_REST_API_PASSWORD=your_password
The bundle automatically loads configuration from config/packages/connect_rest_api.yaml:
connect_rest_api:
username: '%env(CONNECT_REST_API_USERNAME)%'
password: '%env(CONNECT_REST_API_PASSWORD)%'
<?php
namespace App\Controller;
use Backend2Plus\ConnectRestApiBundle\Service\ConnectRestApiService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ApiController extends AbstractController
{
public function __construct(
private ConnectRestApiService $connectRestApiService
) {}
#[Route('/api/test', name: 'api_test')]
public function test(): Response
{
try {
// GET request
$response = $this->connectRestApiService->connector(
'GET',
'https://api.example.com/users'
);
$data = json_decode($response->getContent(), true);
return $this->json($data);
} catch (\Exception $e) {
return $this->json(['error' => $e->getMessage()], 500);
}
}
}
// POST request with JSON data
$response = $this->connectRestApiService->connector(
'POST',
'https://api.example.com/users',
[
'name' => 'John Doe',
'email' => 'john@example.com'
]
);
// PUT request for update
$response = $this->connectRestApiService->connector(
'PUT',
'https://api.example.com/users/123',
[
'name' => 'Jane Doe',
'email' => 'jane@example.com'
]
);
// DELETE request
$response = $this->connectRestApiService->connector(
'DELETE',
'https://api.example.com/users/123'
);
The service also provides convenience methods for common HTTP operations:
// GET request
$response = $this->connectRestApiService->get('https://api.example.com/users');
// POST request
$response = $this->connectRestApiService->post('https://api.example.com/users', [
'name' => 'John Doe',
'email' => 'john@example.com'
]);
// PUT request
$response = $this->connectRestApiService->put('https://api.example.com/users/123', [
'name' => 'Jane Doe'
]);
// DELETE request
$response = $this->connectRestApiService->delete('https://api.example.com/users/123');
// PATCH request
$response = $this->connectRestApiService->patch('https://api.example.com/users/123', [
'email' => 'newemail@example.com'
]);
You can pass additional options to customize the HTTP request:
$response = $this->connectRestApiService->connector('GET', 'https://api.example.com/users', null, [
'timeout' => 60,
'headers' => [
'X-Custom-Header' => 'custom-value',
'Accept' => 'application/xml'
]
]);
connector(string $method, string $url, ?array $data = null, array $options = [])Main method for sending HTTP requests.
Parameters:
$method - HTTP method (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS)$url - URL endpoint$data - optional data to send (for POST, PUT, PATCH methods)$options - additional options for the HTTP requestReturn value:
ResponseInterface - Symfony HTTP Client response objectget(string $url, array $options = []) - GET requestpost(string $url, array $data, array $options = []) - POST requestput(string $url, array $data, array $options = []) - PUT requestdelete(string $url, array $options = []) - DELETE requestpatch(string $url, array $data, array $options = []) - PATCH requestThe bundle uses Symfony HTTP Client which automatically handles HTTP errors. It's recommended to use try-catch blocks:
try {
$response = $this->connectRestApiService->connector('GET', 'https://api.example.com/endpoint');
if ($response->getStatusCode() === 200) {
$data = json_decode($response->getContent(), true);
// process data
}
} catch (\Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface $e) {
// Network error
$this->logger->error('Network error: ' . $e->getMessage());
} catch (\Symfony\Contracts\HttpClient\Exception\HttpExceptionInterface $e) {
// HTTP error (4xx, 5xx)
$this->logger->error('HTTP error: ' . $e->getMessage());
} catch (\InvalidArgumentException $e) {
// Invalid parameters
$this->logger->error('Invalid parameters: ' . $e->getMessage());
}
MIT License - see LICENSE file for details.
For questions and support, please open an issue on GitHub or contact us at sasam09@gmail.com.
How can I help you explore Laravel packages today?