maciejbuchert / nano
Nano是一个非常非常小巧的PHP应用程序,允许您创建非常快速的REST接口。
1.4.2
2024-08-20 13:00 UTC
Requires
- php: ~8.2
- ext-json: *
- monolog/monolog: ^3.7
Requires (Dev)
- guzzlehttp/guzzle: ^6.5
- opsway/psr12-strict-coding-standard: ^0.5.0
- phpunit/phpunit: >=8.0
- squizlabs/php_codesniffer: ^3.5
- symfony/process: ^5.0
This package is auto-updated.
Last update: 2024-09-20 13:23:19 UTC
README
Nano
欢迎贡献者
Nano是一个非常非常小巧的PHP库,允许您创建非常快速的REST API。
想想看,它就像Slim,但Nano只有~6.4千字节。
要求
严格需要PHP 7.4。
安装
通过Composer
$ composer require midorikocak/nano
使用
简单地实例化并在您的应用程序中包含。
require __DIR__ . '/vendor/autoload.php'; use maciejbuchert\nano\Api; $api = new Api();
我知道。它不是静态的。
定义REST资源
定义REST路由和使用通配符都很简单。
$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); });
基本认证
可以在认证层后面隐藏您的路由。目前它期望基本认证,更多方法即将推出。
$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);
因此,基本认证是不加密的,强烈建议使用HTTPS。
日志记录
可以使用Monolog请求和响应。
use Monolog\Logger; use Monolog\Handler\StreamHandler; use Monolog\Level; $logger = new Logger('nano'); $logger->pushHandler(new StreamHandler('nano.log', Level::DEBUG)); $api->setLogger($logger);
设置日志记录器后,所有请求和响应都将记录到nano.log文件中。
测试
您可以使用Guzzle/Client
测试您的实时API。
<?php declare(strict_types=1); namespace maciejbuchert\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()); }
动机
主要是教育目的。
变更日志
有关最近更改的更多信息,请参阅变更日志。
测试
$ composer test
贡献
安全
如果您发现任何安全问题,请通过电子邮件mtkocak@gmail.com而不是使用问题跟踪器。
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。