HTTP 요청(Request)과 응답(Response)
Slim Framework의 핵심은 PSR-7 HTTP 메시지 인터페이스를 준수한다는 점입니다. 클라이언트가 보내는 모든 데이터(Request)와 서버가 반환하는 데이터(Response)는 이 표준 객체들을 통해 일관성 있게 처리됩니다.
1. Request(요청) 객체 다루기
클라이언트가 전송한 쿼리 스트링, 폼 데이터, JSON Body 등을 읽는 방법입니다.
| 메서드 |
설명 |
| $request->getQueryParams() |
URL 쿼리 스트링(?key=val)을 배열로 반환 |
| $request->getParsedBody() |
POST로 전송된 JSON 바디나 폼 데이터를 배열/객체로 자동 파싱 |
| $request->getHeaderLine('Authorization') |
특정 HTTP 헤더 값을 문자열로 반환 |
2. Response(응답) 객체 다루기
서버가 클라이언트에게 응답할 데이터를 조립합니다. API 환경에서는 보통 배열을 JSON 문자열로 변환(json_encode)하여 Body에 기록합니다.
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
$app->post('/api/users', function (Request $request, Response $response) {
// 1. 요청 데이터 파싱 (JSON 또는 Form Data)
$data = $request->getParsedBody();
// 2. 응답 페이로드 생성
$payload = json_encode([
'status' => 'success',
'message' => "{$data['name']}님이 등록되었습니다."
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
// 3. 바디에 기록하고 헤더 및 상태코드 설정
$response->getBody()->write($payload);
return $response
->withHeader('Content-Type', 'application/json')
->withStatus(201);
});
?>
POST localhost:8080/api/users
Request Body: { "name": "김개발" }
Status: 201 Created
{
"status": "success",
"message": "김개발님이 등록되었습니다."
}
💡 PSR-7 객체는 Immutable(불변)입니다!
withStatus()나 withHeader() 메서드를 호출하면 원본 객체가 변경되는 것이 아니라 새로운 속성이 적용된 새 복사본이 반환됩니다. 체이닝(Chaining)을 통해 변경된 객체를 반드시 return 해야 정상적으로 작동합니다.
API 응답 확인
위의 코드 블록에서 클라이언트가 서버로 POST 데이터를 전송하고, 서버가 파싱 후 JSON 응답(201 Created)을 성공적으로 반환하는 과정을 확인할 수 있습니다.