1. Go to this page and download the library: Download schentrup-software/php-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/ */
schentrup-software / php-api example snippets
// index.php
;
use PhpApi\Model\RouterOptions;
use PhpApi\Model\SwaggerOptions;
$router = new Router(
new RouterOptions(
namespace: 'YourApp\\Routes',
directory: __DIR__ . '/src/Routes',
),
new SwaggerOptions(
title: "Your API Documentation",
apiVersion: "1.0.0",
)
);
$router->route()->send();
// src/Routes/Get.php
namespace YourApp\Routes;
use PhpApi\Model\Response\AbstractJsonResponse;
use PhpApi\Swagger\Attribute\SwaggerTag;
use PhpApi\Swagger\Attribute\SwaggerDescription;
#[SwaggerTag(name: 'Hello', description: 'Hello world example')]
class Get
{
#[SwaggerDescription('Returns a hello world message')]
public function execute(): HelloResponse
{
return new HelloResponse();
}
}
class HelloResponse extends AbstractJsonResponse
{
public const ResponseCode = 200;
public function __construct(
public string $message = 'Hello, World!',
public string $timestamp = '',
) {
$this->timestamp = date('Y-m-d H:i:s');
}
}
class GetUsers extends AbstractRequest
{
public function __construct(
#[QueryParam]
public int $page = 1,
#[QueryParam]
public int $limit = 10
) {
}
}
class CreateUserRequest extends AbstractRequest
{
public function __construct(
#[JsonRequestParam]
public string $name,
) {
}
}
#[JsonRequestParam]
class CreateUserRequest extends AbstractRequest
{
public function __construct(
public string $name,
) {
}
}
class AuthenticatedRequest extends AbstractRequest
{
public function __construct(
#[HeaderRequestParam(name: 'Authorization')]
public string $token
) {
}
}
class SessionRequest extends AbstractRequest
{
public function __construct(
#[CookieRequestParam(name: 'session_id')]
public ?string $sessionId = null
) {
}
}
class AuthenticationMiddleware implements IRequestMiddleware
{
public function handleRequest(AbstractRequest $request): AbstractRequest
{
if ($request instanceof AuthenticatedRequest) {
// Validate token
if (!$this->validateToken($request->token)) {
throw new Exception('Invalid token');
}
}
return $request;
}
private function validateToken(string $token): bool
{
// Token validation logic
return true;
}
}
class TimestampMiddleware implements IResponseMiddleware
{
public function handleResponse(AbstractResponse $response): AbstractResponse
{
if (property_exists($response, 'timestamp') && !isset($response->timestamp)) {
$response->timestamp = time();
}
return $response;
}
}
$router = new Router($options);
$router->addMiddleware(new AuthenticationMiddleware());
$router->addMiddleware(new TimestampMiddleware());
// Custom 404 page
$router->handleNotFound('/error/404');
// Custom 404 response
$response = new Response();
$response->setCode(404);
$response->setContent('{"error": "Resource not found"}');
$router->handleNotFound($response);
// Custom handler with closure
$router->handleNotFound(function(Request $req) {
$response = new Response();
$response->setCode(404);
$response->setContent("Could not find: " . $req->url->path);
return $response;
});
#[SwaggerTag(name: 'Users', description: 'User management endpoints')]
class PostUser
{
#[SwaggerSummary('Create a new user')]
#[SwaggerDescription('Creates a new user with the provided information')]
public function execute(CreateUserRequest $request): UserResponse
{
// Implementation
}
}
// Maps to /users/{id}
class GetUsersId
{
public function execute($_, int $id): UserResponse
{
return new UserResponse($id);
}
}
composer
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.