API Development
Orkestra follows PSR-15 for HTTP message handling and provides abstract controllers for building APIs.
Abstract Controllers
Orkestra provides abstract controllers that extend PSR-15's request handler interface:
use Orkestra\Services\Http\Controllers\AbstractController;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
class ApiController extends AbstractController
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
// Handle the request
return $this->response;
}
}
Request Handling
class UserController extends AbstractController
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
// Get request data
$data = $request->getParsedBody();
// Get query parameters
$query = $request->getQueryParams();
// Get headers
$headers = $request->getHeaders();
// Get request method
$method = $request->getMethod();
return $this->response;
}
}
Response Handling
class UserController extends AbstractController
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
$data = [
'users' => [
['id' => 1, 'name' => 'John'],
['id' => 2, 'name' => 'Jane']
]
];
// Set response body
$this->response->getBody()->write(json_encode($data));
// Set response headers
$this->response = $this->response
->withHeader('Content-Type', 'application/json')
->withStatus(200);
return $this->response;
}
}
Route Definitions
Routes are defined in your configuration files:
// config/routes.php
return [
'GET /api/users' => [UserController::class, 'handle'],
'POST /api/users' => [UserController::class, 'handle'],
];
Entity Parameters
You can use entities as route parameters:
use Orkestra\Services\Http\Attributes\Entity;
class UserController extends AbstractController
{
#[Entity(User::class)]
public function handle(ServerRequestInterface $request): ResponseInterface
{
$user = $request->getAttribute('user');
return $this->response;
}
}
Best Practices
- Follow PSR-15 standards
- Use dependency injection
- Keep controllers focused
- Validate input data
- Use proper HTTP status codes
- Handle errors gracefully
- Document your API endpoints
- Use consistent response formats
Related Topics
- Controllers - Learn about controllers
- Routing - Define API routes