Setup

Install core

composer require apitte/core
1

Register DI extension

extensions:
    api: Apitte\Core\DI\ApiExtension

api:
    debug: %debugMode%
    catchException: true # Sets if exception should be catched and transformed into response or rethrown to output (debug only)
1
2
3
4
5
6

Create entry point

// www/index.php

use Apitte\Core\Application\IApplication;
use App\Bootstrap;

require __DIR__ . '/../vendor/autoload.php';

Bootstrap::boot()
	->createContainer()
	->getByType(IApplication::class)
	->run();
1
2
3
4
5
6
7
8
9
10
11

Usage in combination with nette application

// www/index.php

use Apitte\Core\Application\IApplication as ApiApplication;
use App\Bootstrap;
use Nette\Application\Application as UIApplication;

require __DIR__ . '/../vendor/autoload.php';

$isApi = substr($_SERVER['REQUEST_URI'], 0, 4) === '/api';
$container = Bootstrap::boot()->createContainer();

if ($isApi) {
    $container->getByType(ApiApplication::class)->run();
} else {
    $container->getByType(UIApplication::class)->run();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Add some plugins

Decorators

Transform all requests and responses with single class.

See decorators chapter for more info.

Mapping

Validate request parameters, map request body to entity and entity to response body.

See mapping chapter for more info.

Middlewares

PSR-7 middlewares integration

Based on contributte/middlewares, integrated by apitte/middlewares.

See apitte/middlewares docs for more info.

Negotiation

Transforms data into format requested in Accept header and in url suffix (/api/v1/users.xml)

See apitte/negotiation docs for more info.

Debug

Debug api easily with negotiation extension and display Tracy debug bar along with dumped response data.

See apitte/debug docs for more info.

Schema

Core plugin (enabled by default) which manage building and validation of whole api schema.

See schema chapter for more info.

OpenApi

OpenApi integration with Swagger UI support.

See apitte/openapi docs for more info.

Console

Console commands for your api.

Based on symfony/console

See apitte/console docs for more info.

Presenter

Route into your api through a single nette route and presenter.

See apitte/presenter docs for more info.

Implementing own plugins

api:
    plugins:
        App\Api\Plugin\YourAmazingPlugin:
1
2
3
namespace App\Api\Plugin;

use Apitte\Core\DI\Plugin\Plugin;

class YourAmazingPlugin extends Plugin
{
	
	public static function getName() : string
	{
		return 'pluginName';
    }

    // Add new services, override existing or whatever you want
    // Take a look at existing plugins for inspiration

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16