midorikocak / nano
Nano is a very very tiny php app that allows you to create very fast rest interfaces.
Requires
- php: ~7.4
- ext-json: *
Requires (Dev)
- guzzlehttp/guzzle: ^6.5
- opsway/psr12-strict-coding-standard: ^0.3.0
- phpunit/phpunit: >=8.0
- squizlabs/php_codesniffer: ^3.5
- symfony/process: ^5.0
This package is auto-updated.
Last update: 2024-10-18 06:26:43 UTC
README
Nano
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.
Requirements
Strictly requires PHP 7.4.
Install
Via Composer
$ composer require midorikocak/nano
Usage
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 resources
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); });
Basic Auth
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.
Testing
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()); }
Motivation
Mostly educational purposes.
Change log
Please see CHANGELOG for more information on what has changed recently.
Testing
$ composer test
Contributing
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
Security
If you discover any security related issues, please email mtkocak@gmail.com instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.