Request and Response Handling

Learn how to handle HTTP requests and responses in Sockeon.

Request Handling

Basic Request Data

class RequestController extends SocketController
{
    #[HttpRoute('GET', '/api/request-info')]
    public function requestInfo(Request $request): Response
    {
        return Response::json([
            'method' => $request->getMethod(),
            'path' => $request->getPath(),
            'ip_address' => $request->getIpAddress(),
            'user_agent' => $request->getHeader('User-Agent')
        ]);
    }
    
    #[HttpRoute('GET', '/api/query')]
    public function queryParameters(Request $request): Response
    {
        $page = $request->getQuery('page', 1);
        $limit = $request->getQuery('limit', 10);
        $search = $request->getQuery('search', '');
        
        return Response::json([
            'page' => (int)$page,
            'limit' => (int)$limit,
            'search' => $search
        ]);
    }
}

POST Data with Validation

class PostDataController extends SocketController
{
    #[HttpRoute('POST', '/api/users')]
    public function createUser(Request $request): Response
    {
        // Validate and get sanitized data
        $data = $request->validated([
            'name' => 'required|string|max:100',
            'email' => 'required|email',
            'age' => 'integer|min:18|max:120',
            'bio' => 'string|max:1000'
        ]);
        
        // Data is automatically sanitized and validated
        $user = [
            'id' => 1,
            'name' => $data['name'],      // Trimmed string
            'email' => $data['email'],    // Lowercase email
            'age' => $data['age'],        // Integer
            'bio' => $data['bio']         // Trimmed string
        ];
        
        return Response::json($user, 201);
    }
    
    #[HttpRoute('POST', '/api/users/legacy')]
    public function createUserLegacy(Request $request): Response
    {
        $data = $request->all();
        
        // Manual validation (not recommended)
        if (empty($data['name']) || empty($data['email'])) {
            return Response::json(['error' => 'Name and email are required'], 400);
        }
        
        // Create user logic here
        $user = ['id' => 1, 'name' => $data['name'], 'email' => $data['email']];
        
        return Response::json($user, 201);
    }
}

Response Handling

JSON Responses

class ResponseController extends SocketController
{
    #[HttpRoute('GET', '/api/data')]
    public function getData(Request $request): Response
    {
        return Response::json([
            'success' => true,
            'data' => ['id' => 1, 'name' => 'Example']
        ]);
    }
    
    #[HttpRoute('POST', '/api/create')]
    public function createData(Request $request): Response
    {
        return Response::json(['message' => 'Created'], 201);
    }
    
    #[HttpRoute('GET', '/api/error')]
    public function errorExample(Request $request): Response
    {
        return Response::json(['error' => 'Not found'], 404);
    }
}

Response Status Codes

class StatusController extends SocketController
{
    #[HttpRoute('GET', '/api/success')]
    public function success(Request $request): Response
    {
        return Response::ok(['data' => 'Success']);
    }
    
    #[HttpRoute('POST', '/api/create')]
    public function created(Request $request): Response
    {
        return Response::created(['id' => 1]);
    }
    
    #[HttpRoute('GET', '/api/not-found')]
    public function notFound(Request $request): Response
    {
        return Response::notFound('Resource not found');
    }
    
    #[HttpRoute('POST', '/api/bad-request')]
    public function badRequest(Request $request): Response
    {
        return Response::badRequest('Invalid data');
    }
}

Validation Error Handling

For comprehensive validation and sanitization, see the Data Validation documentation.

class ValidationController extends SocketController
{
    #[HttpRoute('POST', '/api/users')]
    public function createUser(Request $request): Response
    {
        try {
            $data = $request->validated([
                'name' => 'required|string|max:100',
                'email' => 'required|email',
                'age' => 'integer|min:18|max:120'
            ]);
            
            // Process validated data...
            return Response::json(['success' => true, 'data' => $data], 201);
            
        } catch (ValidationException $e) {
            return Response::json([
                'message' => 'Validation failed',
                'errors' => $e->getErrors()
            ], 422);
        }
    }
}