Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      Sunshine And March Vibes (2025 Wallpapers Edition)

      May 31, 2025

      The Case For Minimal WordPress Setups: A Contrarian View On Theme Frameworks

      May 31, 2025

      How To Fix Largest Contentful Paint Issues With Subpart Analysis

      May 31, 2025

      How To Prevent WordPress SQL Injection Attacks

      May 31, 2025

      Windows 11 version 25H2: Everything you need to know about Microsoft’s next OS release

      May 31, 2025

      Elden Ring Nightreign already has a duos Seamless Co-op mod from the creator of the beloved original, and it’ll be “expanded on in the future”

      May 31, 2025

      I love Elden Ring Nightreign’s weirdest boss — he bargains with you, heals you, and throws tantrums if you ruin his meditation

      May 31, 2025

      How to install SteamOS on ROG Ally and Legion Go Windows gaming handhelds

      May 31, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      Oracle Fusion new Product Management Landing Page and AI (25B)

      May 31, 2025
      Recent

      Oracle Fusion new Product Management Landing Page and AI (25B)

      May 31, 2025

      Filament Is Now Running Natively on Mobile

      May 31, 2025

      How Remix is shaking things up

      May 30, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      Windows 11 version 25H2: Everything you need to know about Microsoft’s next OS release

      May 31, 2025
      Recent

      Windows 11 version 25H2: Everything you need to know about Microsoft’s next OS release

      May 31, 2025

      Elden Ring Nightreign already has a duos Seamless Co-op mod from the creator of the beloved original, and it’ll be “expanded on in the future”

      May 31, 2025

      I love Elden Ring Nightreign’s weirdest boss — he bargains with you, heals you, and throws tantrums if you ruin his meditation

      May 31, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»Development»API Versioning in Laravel 11

    API Versioning in Laravel 11

    July 27, 2024

    With the release of Laravel 11, the application skeleton was slimmed down to remove extra files that aren’t required on every project. Part of that change removed all service providers from the application source code except the AppServiceProvider.

    Another part of the updated application skeleton is removing API routes in the default installation. Suppose you plan on adding an API to your application or exclusively writing an API with Laravel. In that case, you can set up the api middleware group and routes with an Artisan command:

    php artisan install:api

    The install:api sets up the api.php route file (and configures it), a database migration for personal access tokens, and a sanctum configuration file. If you don’t need to version your API, that’s all you need to do.

    Versioning Your API in Separate Files

    A common approach to writing versioned APIs in Laravel is separating routes into different files. Doing so simplifies the overhead of reasoning about a specific API version and keeps things tidy. In Laravel 10 or earlier, a common approach is adding additional route files for each API version to the RouteServiceProvider:

    $this->routes(function () {
    Route::middleware(‘api’)
    ->prefix(‘api’)
    ->group(base_path(‘routes/api.php’));

    Route::middleware(‘api’)
    ->prefix(‘api/v1’)
    ->group(base_path(‘routes/api_v1.php’));

    Route::middleware(‘api’)
    ->prefix(‘api/v2’)
    ->group(base_path(‘routes/api_v2.php’));

    Route::middleware(‘web’)
    ->group(base_path(‘routes/web.php’));
    });

    In the above example, the routes/api.php typically offers a /user endpoint for Laravel sanctum, and the remainder of API routes are tucked in the appropriate version.

    Versioning Your API in Laravel 11

    With route bootstrapping moving out of the RouteServiceProvider and into bootstrap/app.php, here are a few ways you can version your API.

    First, let’s generate a few files to demonstrate setting up routing:

    touch routes/api_v1.php
    touch routes/api_v2.php

    php artisan make:controller –api Api/V1/PostsController
    php artisan make:controller –api Api/V2/PostsController

    Use whatever file name convention and location that suits you.

    Next, open the routes/api.php file and add the following lines to the bottom of the file:

    Route::prefix(‘v1’)->group(base_path(‘routes/api_v1.php’));
    Route::prefix(‘v2’)->group(base_path(‘routes/api_v2.php’));

    The above code being in api.php means that we are already working within the api route prefix and using the api middleware group.

    Next, let’s add the example routes for each respective API version so we can visualize the route list for each version.

    Here’s the api_v1.php file:

    <?php

    use AppHttpControllersApiV1PostsController;

    Route::apiResource(‘posts’, PostsController::class);

    And the api_v2.php file:

    <?php

    use AppHttpControllersApiV2PostsController;

    Route::apiResource(‘posts’, PostsController::class);

    With our route files defined, running route:list, we can see versioned routes!

    Pro tip: you can isolate versioned routes using the –path flag, making it easy to focus on a specific API version:

    php artisan route:list –path=api/v1
    php artisan route:list –path=api/v2

    Check out how tidy it looks if you just output routes for api/v2:

    Defining Versioned Routes in the App Bootstrap File

    Another approach I’ve seen is defining additional API routes in the bootstrap/app.php file using the then: argument, which accepts a Closure:

    return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
    web: __DIR__.’/../routes/web.php’,
    api: __DIR__.’/../routes/api.php’,
    commands: __DIR__.’/../routes/console.php’,
    health: ‘/up’,
    then: function () {
    Route::middleware(‘api’)
    ->prefix(‘api/v1’)
    ->group(base_path(‘routes/api/api_v1.php’));

    Route::middleware(‘api’)
    ->prefix(‘api/v2’)
    ->group(base_path(‘routes/api/api_v2.php’));
    }
    )
    // …
    ;

    I prefer adding additional route files directly to routes/api.php, but this is another approach that would work. When defining routes in the bootstrap file, these groups aren’t configured to use the api middleware group. Make sure to include the api middleware group with these routes!

    The post API Versioning in Laravel 11 appeared first on Laravel News.

    Join the Laravel Newsletter to get all the latest Laravel articles like this directly in your inbox.

    Source: Read More 

    Hostinger
    Facebook Twitter Reddit Email Copy Link
    Previous ArticleVS Code Snippets for Livewire and Alpine.js
    Next Article A Resize Plugin for Alpine.js

    Related Posts

    Artificial Intelligence

    Markus Buehler receives 2025 Washington Award

    May 31, 2025
    Artificial Intelligence

    LWiAI Podcast #201 – GPT 4.5, Sonnet 3.7, Grok 3, Phi 4

    May 31, 2025
    Leave A Reply Cancel Reply

    Continue Reading

    How we’re designing Hellotime for simplicity and speed

    Development

    NVIDIA’s drivers are causing big problems for DOOM: The Dark Ages, but some fixes are available

    News & Updates

    Researchers at Stanford Introduce Contrastive Preference Learning (CPL): A Novel Machine Learning Framework for RLHF Using the Regret Preference Model

    Development

    Open source observability for AWS Inferentia nodes within Amazon EKS clusters

    Development

    Highlights

    Text Expander

    May 30, 2025

    Post Content Source: Read More 

    Why AWS S3 Buckets Are the New Target for Ransomware Campaigns

    January 23, 2025

    Free IRS Direct File service for taxpayers to end, according to reports

    April 17, 2025

    Why create a playable version of Tetris within a PDF? ‘Why not?’

    January 14, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.