Q: RESTful API란 무엇인가요?
RESTful API는 Representational State Transfer (REST)라는 아키텍처 스타일을 따르는 API입니다.
REST는 웹 기반 애플리케이션의 설계 원칙을 정의하며, 클라이언트와 서버 간의 통신을 간단하고 확장 가능하게 만듭니다.
RESTful API는 리소스를 기반으로 한 URL을 사용하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 리소스의 상태를 관리합니다.
Q: RESTful API의 주요 특징은 무엇인가요?
무상태성(Stateless): 각 요청은 독립적이며, 서버는 클라이언트의 상태를 유지하지 않습니다. 요청마다 필요한 모든 정보가 포함되어야 합니다.
리소스 기반 URL: URL은 리소스를 명확히 식별합니다. 예를 들어, /users/123
는 id
가 123인 사용자를 가리킵니다.
HTTP 메서드 사용: 각 메서드는 특정 작업을 수행하는 데 사용됩니다. 예를 들어, GET
은 데이터를 조회하고, POST
는 데이터를 생성합니다.
표현(JSON, XML 등): 서버는 클라이언트에 리소스를 다양한 형태로 표현하여 전달합니다. 가장 일반적인 형태는 JSON입니다.
Q: Request Parameters와 Request Body의 차이점은 무엇인가요?
Request Parameters
와 Request Body
는 API 요청 시 데이터를 전달하는 두 가지 주요 방법으로, 각각의 용도와 적절한 사용 시점이 다릅니다.
?key=value
형식으로 붙습니다. 여러 값을 전달할 때는 &
로 구분합니다.GET /api/users?id=123&status=active
id=123
과 status=active
는 특정 사용자를 조회하거나 상태에 따라 필터링하기 위한 조건입니다.POST /api/users
{
"name": "John",
"age": 30,
"city": "Seoul"
}
Q: 언제 Request Parameters와 Request Body를 사용해야 하나요?
이 질문은 API 설계에서 매우 중요한 부분입니다. Request Parameters와 Request Body의 차이를 이해하고, 그에 맞게 데이터를 전달하는 것이 필요합니다.
리소스 식별 및 필터링: 만약 요청에서 특정 리소스를 식별하거나 필터링할 필요가 있다면, Request Parameters 또는 URL Path를 사용해야 합니다.
예를 들어, 특정 사용자의 프로필을 업데이트하거나 조회할 때 id
와 같은 식별자를 URL에 포함시키는 것이 일반적입니다.
GET /api/users/123
- id
가 123인 사용자의 정보를 조회POST /api/users/123/profile
- id
가 123인 사용자의 프로필을 생성 또는 업데이트데이터 생성 및 수정: 반면에, 서버에 저장하거나 업데이트할 데이터는 Request Body에 포함되어야 합니다. 여러 필드를 포함하는 데이터 구조(DTO)로 묶어서 전송하는 것이 일반적입니다. 이는 서버에서 이 데이터를 받아 처리하고 리소스를 생성하거나 수정하는 데 사용됩니다.
{
"name": "John",
"age": 30,
"city": "Seoul"
}
POST
요청의 Body에 포함됩니다.Q: 만약 저장할 값이 하나의 값이라면 어떻게 해야 하나요? 그리고 여러 값일 때는요?
하나의 값을 저장할 때: 만약 서버에 저장해야 할 데이터가 하나뿐이라면, Request Body에 해당 값을 단독으로 포함시킬 수 있습니다. 이 경우에도 Request Parameters
는 주로 리소스 식별에 사용됩니다.
POST /api/users/123/status
{
"status": "active"
}
id
가 123인 사용자의 상태를 업데이트하기 위해 status
필드 하나만을 Request Body로 전송합니다.id
는 여전히 URL에 포함됩니다.POST /api/users/123/profile
{
"name": "Jane",
"email": "jane@example.com",
"phone": "010-1234-5678",
"address": "Seoul, Korea"
}
id
가 123인 사용자의 프로필 정보를 업데이트하기 위한 것입니다. name
, email
, phone
, address
와 같은 여러 필드를 포함하는 데이터가 Request Body에 전달됩니다.Q: 그러면 id로 리소스를 식별하고, 저장할 값이 여러 개일 때 어떻게 해야 하나요?
이 경우 가장 일반적인 접근 방식은 id를 URL Path나 Request Parameters에 포함시키고, 저장해야 할 여러 값은 Request Body에 하나의 DTO로 묶어 전송하는 것입니다.
예를 들어, 사용자의 프로필 정보를 업데이트하려는 상황이라면:
URL: POST /api/users/123/profile
123
은 id
로 특정 사용자를 식별합니다.Request Body:
{
"name": "Jane",
"email": "jane@example.com",
"phone": "010-1234-5678",
"address": "Seoul, Korea"
}
이 방식은 RESTful API의 설계 원칙을 따르면서도, 명확하고 일관된 데이터를 전송할 수 있게 해줍니다. 각각의 값이 어떤 용도로 사용되는지 명확히 구분할 수 있기 때문에, API를 사용하는 사람에게도 이해하기 쉽고 유지보수하기도 용이합니다.
Q: RESTful API에서 URL은 어떻게 설계해야 하나요?
RESTful API에서는 URL을 리소스 중심으로 설계하는 것이 중요합니다. URL은 행동(동사)이 아닌 리소스(명사)를 나타내야 하며, HTTP 메서드를 통해 행동을 구분합니다.
Q: 유저 프로필을 생성하는 API를 설계할 때, URL은 어떻게 해야 하나요?
예를 들어, 유저 프로필을 생성하는 API를 설계한다고 가정해 보겠습니다.
잘못된 예시: POST /user/create-profile
create-profile
은 동사를 포함하고 있어 RESTful하지 않습니다.올바른 예시: POST /user/profile
profile
은 리소스를 나타내며, POST
메서드는 프로필을 생성하는 동작을 나타냅니다.Q: 다른 예시들도 있을까요?
GET /user/123/profile
- id
가 123인 사용자의 프로필을 조회PUT /user/123/profile
- id
가 123인 사용자의 프로필을 수정DELETE /user/123/profile
- id
가 123인 사용자의 프로필을 삭제이처럼, RESTful API에서는 URL은 리소스를 나타내고, HTTP 메서드는 해당 리소스에 대해 수행할 작업을 나타내도록 설계하는 것이 중요합니다.
이러한 내용들을 잘 숙지하며 RESTful API 설계에서의 Request Parameters와 Request Body의 올바른 사용법과 URL 설계 방식에 대해 명확하게 이해하면서 사용하는게 중요합니다.