2017 © Pedro Peláez
 

library request-migrations

HTTP Request Migrations

image

tomschlick/request-migrations

HTTP Request Migrations

  • Tuesday, February 6, 2018
  • by tomschlick
  • Repository
  • 4 Watchers
  • 130 Stars
  • 2,226 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 9 Forks
  • 5 Open issues
  • 9 Versions
  • 19 % Grown

The README.md

HTTP Request Migrations

Latest Version on Packagist Build Status Total Downloads StyleCI, (*1)

This package is based on the API versioning scheme used at Stripe. Users pass a version header and you automatically migrate the request & response data to match the current version of your code., (*2)

Installation

You can install the package via composer:, (*3)

Installation via Composer

composer require tomschlick/request-migrations

Service Provider & Facade

This package supports Laravel 5.5 autoloading so the service provider and facade will be loaded automatically., (*4)

If you are using an earlier version of Laravel or have autoloading disabled you need to add the service provider and facade to config/app.php., (*5)

'providers' => [
    \TomSchlick\RequestMigrations\RequestMigrationsServiceProvider.php,
]

```php 'aliases' => [ 'RequestMigrations' => \TomSchlick\RequestMigrations\Facades\RequestMigrations::class, ], (*6)


### Middleware Add the middleware to your Http Kernel `app/Http/Kernel.php`. ```php protected $middleware = [ \TomSchlick\RequestMigrations\RequestMigrationsMiddleware::class, ];

Configuration

Run the following Artisan command to publish the package configuration to config/request-migrations.php., (*7)

php artisan vendor:publish --provider="TomSchlick\RequestMigrations\RequestMigrationsServiceProvider"

Usage

Creating a Migration

You can generate a new request migration using the Artisan CLI., (*8)

php artisan make:request-migration ExampleMigration

The command will generate a request migration and publish it to App/Http/Migrations/*., (*9)

It will generate a migration, you can modify it like this:, (*10)

class GroupNameMigration extends RequestMigration
{
    /**
     * Migrate the request for the application to "read".
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return \Illuminate\Http\Request
     */
    public function migrateRequest(Request $request) : Request
    {
        return $request;
    }

    /**
     * Migrate the response to display to the client.
     *
     * @param \Symfony\Component\HttpFoundation\Response $response
     *
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function migrateResponse(Response $response) : Response
    {
        $content = json_decode($response->getContent(), true);

        $content['firstname'] = array_get($content, 'name.firstname');
        $content['lastname'] = array_get($content, 'name.lastname');
        unset($content['name']);

        return $response->setContent(json_encode($content));
    }

    /**
     * Define which named paths should this migration modify.
     *
     * @return array
     */
    public function paths() : array
    {
        return [
            'users/show',
        ];
    }
}

Override the Versions

use TomSchlick\RequestMigrations\Facades\RequestMigrations;

// set both response & request versions
RequestMigrations::setVersion('2017-01-01')

// set the request version
RequestMigrations::setRequestVersion('2017-01-01')

// set the response version
RequestMigrations::setResponseVersion('2017-01-01')

This can be useful if you are pinning the version to a user., (*11)

RequestMigrations::setVersion(auth()->user()->api_version);

Changelog

Please see CHANGELOG for more information what has changed recently., (*12)

Testing

composer test

Contributing

Please see CONTRIBUTING for details., (*13)

Security

If you discover any security related issues, please email tom@schlick.email instead of using the issue tracker., (*14)

License

The MIT License (MIT). Please see License File for more information., (*15)

The Versions

23/08 2017
23/08 2017
23/08 2017
18/08 2017