Nano是一个非常非常小巧的PHP应用程序,允许您创建非常快速的REST接口。

1.4.2 2024-08-20 13:00 UTC

This package is auto-updated.

Last update: 2024-09-20 13:23:19 UTC


README

nano API

Nano

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

欢迎贡献者

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)。有关更多信息,请参阅许可文件