Inicio / Cómo crear un servicio personalizado para consumir APIs externas en Laravel
En muchas aplicaciones web, especialmente en Laravel, es común que necesitemos conectarnos a servicios de terceros, como pasarelas de pago, plataformas de mensajería o servicios de envío. Para mantener nuestro código limpio y escalable, lo mejor es encapsular esa lógica en servicios personalizados.
Supongamos que queremos conectarnos a una API externa para obtener información de productos. Usaremos el cliente HTTP de Laravel (Http::
), que está basado en Guzzle.
Usa Artisan para crearlo:
php artisan make:service ProductApiService
Luego edita el archivo generado (si no existe, créalo en app/Services
):
// app/Services/ProductApiService.php
namespace App\Services;
use Illuminate\Support\Facades\Http;
class ProductApiService
{
protected $baseUrl;
public function __construct()
{
$this->baseUrl = config('services.product_api.url');
}
public function getAllProducts()
{
$response = Http::get($this->baseUrl . '/products');
return $response->json();
}
public function getProductById($id)
{
$response = Http::get($this->baseUrl . "/products/{$id}");
return $response->json();
}
}
# .env
PRODUCT_API_URL=https://fakestoreapi.com
'product_api' => [
'url' => env('PRODUCT_API_URL'),
],
// app/Http/Controllers/ProductController.php
use App\Services\ProductApiService;
class ProductController extends Controller
{
public function index(ProductApiService $service)
{
$products = $service->getAllProducts();
return view('products.index', compact('products'));
}
}
Para evitar fallos inesperados, maneja excepciones y errores:
public function getAllProducts()
{
try {
$response = Http::timeout(5)->get($this->baseUrl . '/products');
return $response->successful() ? $response->json() : [];
} catch (\Exception $e) {
\Log::error('API Error: ' . $e->getMessage());
return [];
}
}
Centralizar la lógica de integración en servicios es una de las mejores prácticas en Laravel. Te permite mantener el código organizado, testeable y flexible para futuros cambios o mejoras.
¿Ya usas servicios en tu aplicación? ¡Déjame saber en los comentarios cómo lo implementaste!
La velocidad de la página es una medida
Construir una excelente relación con su
Cuando se trata de generar rentabilidad,
Telegram tiene el potencial de ser un gr
Ya sea que tenga un guardarropa desborda
Cuando se trata de la web, los avances t