noherczeg / RestExt

A PHP REST Extension for the Laravel Framework
MIT License
3 stars 0 forks source link

RestExt

A PHP REST Extension for the Laravel Framework.

THIS IS AN ALPHA SOFTWARE.

With this package you can easily create a REST API which:

Installation:

This package is based on composer, so if you have it installed you're pretty much halfway done already.

Composer:

Download and install composer from http://getcomposer.org/download/

Add this to your project root's composer.json file:

{
    "require": {
        "noherczeg/restext": "dev-master"
    }
}

If you're done, just run a php composer install, and the package is ready to be used!

Registering the package with Laravel 4 as a service:

Put the following in your app/config/app.php file under providers array:

'Noherczeg\RestExt\RestExtServiceProvider',

Adding the aliases of the facades is done in the same file under aliases:

'RestExt'         => 'Noherczeg\RestExt\Facades\RestExt',
'RestLinker'      => 'Noherczeg\RestExt\Facades\RestLinker',
'RestResponse'    => 'Noherczeg\RestExt\Facades\RestResponse',

Overriding the default configurations is done in a published config file. You can create it by typing:

$ php artisan config:publish noherczeg/restext

Optionally I have provided a default schema for a database Log table which can be migrated and used for database logging.

$ php artisan migrate --package=noherczeg/restext

General Information:

This Package is not a simple Package with a Service, but a collection of tools which may help the develpoment of RESTful web applications with the Laravel Framework. Currently it's coupled to it, so it can't be used on it's own, but some of it's components can be replaced via implementing the provided interfaces or extending some classses.

Entities/Models

It's advised to implement Noherczeg\RestExt\Entities\ResourceEntity in your models or you may extend a premade Entity as well which already implements the interface above: Noherczeg\RestExt\Entities\ResourceEloquentEntity.

A ResourceEntity implementation adds the ability for your Models to:

Repositories

It's a good practice to use repositories in you app, sice that way you can abstract away the dependency from any store, or database implementation.

Just like above there is an interface in the package which comes to your aid: Noherczeg\RestExt\Repository\CRUDRepository, and a sample implementation which can be extended: Noherczeg\RestExt\Repository\RestExtRepository.

Implementing or extending CRUDRepository gives you your basic CRUD operations with pagination support as well.

Services

The next level of abstraction is the service level. Currently there is no interface for services since not everyone uses them, so it won't be included.

Extra features

As stated above this package contains tools other then data manipulation as well. These tools can be found in the extra folder of the package.

The general assumption is that you copy them into your app/ directory.

errors.php (link)

The package is currently built with a mindset that follows the convention of catching exceptions and events outside of controllers, so in this file, you may find examples of some general error handler, like:

Usage: Add require app_path().'/errors.php'; to the end of app/start/global.php

filters.php (link)

In this file I have provided a few extra examples besides the default ones that could help in building a REST API.

Usage: Add require app_path().'/filters.php'; to the end of app/start/global.php

logs.php (link)

This is an example listener which logs everything into the database.

Usage: Add require app_path().'/logs.php'; to the end of app/start/global.php

RootController.php (link)

This can be placed to anywhere where your controllers are and used as an entry point to your REST API. Since Level3 of the Richardson Maturity Model requires HATEOAS support this is crucial for your app.

In the example there are a few features which show other package functionallity like link building, and the use of the Authorization interface.

This controller only generates links, but since a Resources can have contents as well, if you'd like to you can provide other data as well.

routes.php (link)

Versioned routes with basic authentication. Uses the RootController example from above :)

Guides

Since complete usage examples are quite big ones depending on how much I would like to show, these guides are available separately in the following links:

Dev's note:

If there is anything wrong with the package or any of it's contents, please let me know via pull requests or issues. I'm tracking this repo, and will do it forever, so you can reach me :)