DEV Community

Cover image for Step-by-Step Guide to Integrating Third-Party APIs in Laravel Applications
MD ARIFUL HAQUE
MD ARIFUL HAQUE

Posted on

Step-by-Step Guide to Integrating Third-Party APIs in Laravel Applications

Topics : Laravel, APIs, ThirdPartyIntegration, web development PHP LaravelTips APIsInLaravel

Integrating third-party APIs into Laravel can enhance your application by leveraging external services, such as payments, data retrieval, and more. Here's a step-by-step guide with examples to integrate a third-party API effectively.

Prerequisites:

  • A working Laravel installation.
  • A third-party API (we'll use a weather API as an example).

Step 1: Set Up Your API Key and Environment Variables

First, register for the third-party API and get your API key. Store sensitive information like API keys in Laravel's .env file.

  1. Get the API Key: Sign up for a third-party API (e.g., OpenWeatherMap) and retrieve your API key.
  2. Add to .env:
   WEATHER_API_KEY=your_api_key_here
   WEATHER_API_URL=https://api.openweathermap.org/data/2.5/weather
Enter fullscreen mode Exit fullscreen mode

Step 2: Install Guzzle (HTTP Client)

Laravel uses Guzzle, a PHP HTTP client, to make HTTP requests. If Guzzle is not already installed in your Laravel project, install it:

composer require guzzlehttp/guzzle
Enter fullscreen mode Exit fullscreen mode

Step 3: Create a Service Class for API Requests

To keep your code organized, create a service class to handle the API integration logic.

  1. Create a New Service Class:

Run the following command to create a service class:

   php artisan make:service WeatherService
Enter fullscreen mode Exit fullscreen mode
  1. Implement the Service Class:

In app/Services/WeatherService.php, write a function to fetch data from the weather API.

   <?php

   namespace App\Services;

   use GuzzleHttp\Client;

   class WeatherService
   {
       protected $client;

       public function __construct(Client $client)
       {
           $this->client = $client;
       }

       public function getWeather($city)
       {
           $url = env('WEATHER_API_URL');
           $apiKey = env('WEATHER_API_KEY');

           $response = $this->client->get($url, [
               'query' => [
                   'q' => $city,
                   'appid' => $apiKey,
                   'units' => 'metric'  // or 'imperial' for Fahrenheit
               ]
           ]);

           return json_decode($response->getBody(), true);
       }
   }
Enter fullscreen mode Exit fullscreen mode

Step 4: Bind the Service in a Service Provider

To make WeatherService accessible in your application, bind it in a service provider.

  1. Create a New Service Provider:
   php artisan make:provider ApiServiceProvider
Enter fullscreen mode Exit fullscreen mode
  1. Register the Service in ApiServiceProvider.php:

In app/Providers/ApiServiceProvider.php, add:

   <?php

   namespace App\Providers;

   use Illuminate\Support\ServiceProvider;
   use GuzzleHttp\Client;
   use App\Services\WeatherService;

   class ApiServiceProvider extends ServiceProvider
   {
       public function register()
       {
           $this->app->singleton(WeatherService::class, function () {
               return new WeatherService(new Client());
           });
       }

       public function boot()
       {
           //
       }
   }
Enter fullscreen mode Exit fullscreen mode
  1. Register the Service Provider:

In config/app.php, add App\Providers\ApiServiceProvider::class to the providers array.

Step 5: Create a Controller for API Interaction

To handle API requests and responses, create a controller to interact with the WeatherService.

  1. Generate a Controller:
   php artisan make:controller WeatherController
Enter fullscreen mode Exit fullscreen mode
  1. Use the Service in the Controller:

In app/Http/Controllers/WeatherController.php, add:

   <?php

   namespace App\Http\Controllers;

   use App\Services\WeatherService;
   use Illuminate\Http\Request;

   class WeatherController extends Controller
   {
       protected $weatherService;

       public function __construct(WeatherService $weatherService)
       {
           $this->weatherService = $weatherService;
       }

       public function show($city)
       {
           $weatherData = $this->weatherService->getWeather($city);

           return view('weather.show', ['weather' => $weatherData]);
       }
   }
Enter fullscreen mode Exit fullscreen mode

Step 6: Define Routes

Add routes to make API requests based on city name.

  1. Update routes/web.php:
   use App\Http\Controllers\WeatherController;

   Route::get('/weather/{city}', [WeatherController::class, 'show']);
Enter fullscreen mode Exit fullscreen mode

Step 7: Create a View to Display the Weather Data

Create a view to display the weather information fetched from the API.

  1. Create the View:

In resources/views/weather/show.blade.php, add:

   <!DOCTYPE html>
   <html lang="en">
   <head>
       <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <title>Weather Information</title>
   </head>
   <body>
       <h1>Weather in {{ $weather['name'] }}</h1>
       <p>Temperature: {{ $weather['main']['temp'] }}°C</p>
       <p>Condition: {{ $weather['weather'][0]['description'] }}</p>
       <p>Humidity: {{ $weather['main']['humidity'] }}%</p>
   </body>
   </html>
Enter fullscreen mode Exit fullscreen mode

Step 8: Test the Integration

Start the Laravel development server:

php artisan serve
Enter fullscreen mode Exit fullscreen mode

Visit http://localhost:8000/weather/{city}, replacing {city} with the name of the city you want to check (e.g., London).


Summary

You’ve now integrated a third-party API into a Laravel application by following these steps:

  1. Set up API keys in the environment file.
  2. Install and configure the HTTP client.
  3. Create a service to handle API requests.
  4. Bind the service in a service provider.
  5. Create a controller to use the service.
  6. Define routes.
  7. Build a view to display the data.
  8. Test your integration.

This setup keeps your code modular and secure, following Laravel best practices. This approach can be extended for any third-party API you wish to integrate!

Connect with me:@ LinkedIn and checkout my Portfolio.

Please give my GitHub Projects a star ⭐️

Top comments (0)