PHP code example of fishyboat21 / simple-api

1. Go to this page and download the library: Download fishyboat21/simple-api library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

fishyboat21 / simple-api example snippets




ishyboat21\SimpleApi\Endpoint;
use Fishyboat21\SimpleApi\Http\Request;
use Fishyboat21\SimpleApi\Http\Response;

$api = new Endpoint();

$api->get(function (Request $request): Response {
    return Response::ok(['status' => 'healthy']);
});

$api->run();


// public/api/products.php
int;
use Fishyboat21\SimpleApi\Http\Request;
use Fishyboat21\SimpleApi\Http\Response;

$api = new Endpoint();

$api->get(function (Request $request): Response {
    return Response::ok([
        'products' => [/* ... */],
    ]);
});

$api->run();


// public/api/users.php
dpoint;
use Fishyboat21\SimpleApi\Http\Request;
use Fishyboat21\SimpleApi\Http\Response;

$api = new Endpoint();

$api->get(function (Request $request): Response {
    return Response::ok(['users' => [/* all users */]]);
});

$api->post(function (Request $request): Response {
    $name = $request->body('name');
    // ... create user ...
    return Response::created(['id' => 1], 'User created');
});

$api->run();

$api->get(function (Request $request): Response {
    // Query string: /api/search.php?q=hello&page=2
    $query  = $request->query('q');          // 'hello'
    $page   = $request->query('page', '1');  // '2' (with default)
    $all    = $request->queryParams();       // ['q' => 'hello', 'page' => '2']

    // JSON body (parsed lazily on first access)
    $name   = $request->body('name');        // single field
    $all    = $request->bodyData();          // entire parsed body as array
    $raw    = $request->rawBody();           // raw unparsed body string

    // Headers (case-insensitive)
    $auth   = $request->header('Authorization');
    $type   = $request->header('Content-Type');

    // Request metadata
    $method = $request->method();            // 'GET', 'POST', etc.
    $uri    = $request->uri();               // '/api/search.php?q=hello'
    $path   = $request->path();              // '/api/search.php'

    return Response::ok(/* ... */);
});

// 200 OK with data
Response::ok(['user' => $user]);

// 200 OK with custom message
Response::ok(['user' => $user], 'User retrieved');

// 201 Created
Response::created(['id' => 42], 'User created');

// 204 No Content (no body)
Response::noContent();

// 404 Not Found
Response::notFound('User not found');

// Custom error status
Response::error(422, 'Validation failed');

// Custom response with headers
Response::ok(['data' => $value])
    ->setHeader('X-Custom', 'value')
    ->setHeader('Cache-Control', 'no-cache');


// public/api/health.php
fig\CorsConfig;
use Fishyboat21\SimpleApi\Endpoint;
use Fishyboat21\SimpleApi\Http\Request;
use Fishyboat21\SimpleApi\Http\Response;

$cors = new CorsConfig(
    allowedOrigins: ['https://myapp.com', 'https://admin.myapp.com'],
    allowedMethods: ['GET', 'POST', 'PUT', 'DELETE'],
    allowedHeaders: ['Content-Type', 'Authorization'],
    allowCredentials: true,
    maxAge: 3600,
);

$api = new Endpoint(corsConfig: $cors);

$api->get(function (Request $request): Response {
    return Response::ok(['status' => 'healthy']);
});

$api->run();

$api = new Endpoint();
$api->setLogger($myPsr3Logger);  // any object with an error() method

use Fishyboat21\SimpleApi\Exception\HttpException;
use Fishyboat21\SimpleApi\Exception\NotFoundException;

$api->get(function (Request $request): Response {
    $user = $this->findUser($request->query('id'));
    if ($user === null) {
        throw new NotFoundException('User not found');
    }
    return Response::ok($user);
});

class UnprocessableEntityException extends HttpException
{
    public function __construct(string $message = 'Unprocessable Entity')
    {
        parent::__construct($message, 422);
    }
    public function getStatusCode(): int { return 422; }
}


Fishyboat21\SimpleApi\Endpoint;
use Fishyboat21\SimpleApi\Exception\NotFoundException;
use Fishyboat21\SimpleApi\Http\Request;
use Fishyboat21\SimpleApi\Http\Response;

$api = new Endpoint();

$api->get(function (Request $request): Response {
    $taskId = (int) $request->query('id');

    $task = findTask($taskId);  // your data access
    if ($task === null) {
        throw new NotFoundException("Task {$taskId} not found");
    }

    return Response::ok($task);
});

$api->put(function (Request $request): Response {
    $taskId = (int) $request->query('id');
    $title  = $request->body('title');
    $done   = $request->body('done', false);

    $task = updateTask($taskId, $title, $done);
    return Response::ok($task, 'Task updated');
});

$api->delete(function (Request $request): Response {
    $taskId = (int) $request->query('id');
    removeTask($taskId);
    return Response::noContent();
});

$api->run();