웹 앱에서는 HTTP 메소드를 이용해 서버와 통신하며, 클라이언트-서버간 적절한 데이터와 리소스를 요청/응답하기 위한 메뉴판으로서 API를 사용
알아보기 쉽고 잘 작성되었음을 판단하는 지표를 REST API라고 하며, 이 REST 방법론을 실용적으로 적용하기 위한 REST 성숙도 모델(RMM)이 존재함
REST 성숙도 모델은 총 4단계로 나누어짐
Q1. 앱에 국제화에 대한 요구사항이 추가되어 다음과 같이 요청에 따라 국제화가 적용된 응답이 API 서버로부터 제공되어야 합니다. 응답을 받기 위해 어떤 방법으로 요청을 보내도록 개선하는 것이 좋을까요?
// 한국어
{ "category": ["한식", "이탈리안", "일식", "중식"] }
// 영어
{ "category": ["Korean", "Italian", "Japanese", "Chinese"] }
A1. Accept-Language 헤더에 따라 다른 응답을 제공한다.
Q2. 도서 검색 사이트에서 도서 제목을 바탕으로 검색 기능을 구현하려고 합니다. 요청이 REST 원칙에 적합하도록 하려면 어떻게 해야 할까요?
요청
GET /books
[헤더 생략]
{ "query": { "title": "code" } }
정상 응답
HTTP/1.1 200 OK
[헤더 생략]
{
"books": [
{
"isbn": "9780132350884",
"title": "Clean Code",
"author": "Robert C.Martin",
"price": "$42.47"
},
{
"isbn": "0735619670",
"title": "Code Complete",
"author": "Steve McConnell",
"price": "$24.17"
}
]
}
A2. GET 요청에는 Query Parameter를 사용해야 한다.
Q3. 게시판에서 10번 게시물을 삭제하는 엔드포인트를 작성하려고 합니다. 가장 적절한 방법은 무엇인가요?
A3. DELETE /articles/10
DELETE /articles body: { "id": "10" }
와 동일한 리소스에 대한 요청이지만, 아래의 경우와 같이 본문(body)을 통해 전달하는 것보다는 엔드포인트에 리소스를 명시하는 편이 낫다