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

1 1

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 ⭐️

πŸ‘‹ While you are here

Reinvent your career. Join DEV.

It takes one minute and is worth it for your career.

Get started

Top comments (0)

Cloudinary image

Zoom pan, gen fill, restore, overlay, upscale, crop, resize...

Chain advanced transformations through a set of image and video APIs while optimizing assets by 90%.

Explore

πŸ‘‹ Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay