CONTRIBUTORS WELCOME
Nano is a very very tiny php library that allows you to create very fast rest APIs.
Think it's like Slim but Nano is only ~6.4 Kilobytes.
Strictly requires PHP 7.4.
Via Composer
$ composer require midorikocak/nano
Simply instantiate and include in your app.
require __DIR__ . '/vendor/autoload.php';
use midorikocak\nano\Api;
$api = new Api();
I know. It's not static.
Defining rest routes and using wildcards are easy.
$message = 'Welcome to Nano';
$api->get('/', function () use ($message) {
echo json_encode(['message' => $message]);
http_response_code(200);
});
$api->post('/', function () use ($message) {
$input = (array)json_decode(file_get_contents('php://input'), true, 512, JSON_THROW_ON_ERROR);
echo json_encode($input);
http_response_code(201);
});
$api->get('/echo/{$message}', function ($message) {
echo json_encode(['message' => $message]);
http_response_code(200);
});
It's possible hide your routes behind an authentication layer. Currently it expects basic auth, more methods to come soon.
$authFunction = function ($username, $password) {
return ($username == 'username' && $password == 'password');
};
$api->auth(function () use (&$api) {
$api->get('/entries/{id}', function ($id) {
echo json_encode(['id' => $id]);
http_response_code(201);
});
$api->post('/entries/{id}', function ($id) {
echo json_encode(['id' => $id]);
http_response_code(201);
});
$api->put('/entries/{id}', function ($id) {
echo json_encode(['id' => $id]);
http_response_code(204);
});
$api->delete('/entries/{id}', function ($id) {
http_response_code(204);
});
}, $authFunction);
Hence the basic auth is not encrypted, using https is strictly advised.
You can test your live API using Guzzle/Client
<?php
declare(strict_types=1);
namespace midorikocak\nano;
use GuzzleHttp\Client;
use PHPUnit\Framework\TestCase;
class IntegrationTest extends TestCase
{
public function testGet(): void
{
$client = new Client(
[
'base_uri' => $this->baseUri,
'http_errors' => false,
],
);
$response = $client->request('GET', '/echo/hello');
$this->assertEquals(200, $response->getStatusCode());
$this->assertStringContainsString('hello', (string)$response->getBody());
}
Mostly educational purposes.
Please see CHANGELOG for more information on what has changed recently.
$ composer test
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.