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 confirmación de eliminación es impo
🔎 Introducción: ¿Por
En el competitivo mundo de YouTube, obte
Construir una excelente relación con su
La mayoría de las aplicaciones web requ
Con muchas personas que eligen iniciar u