새소식

BackEnd/스프링부트3 백엔드 개발 입문

[Spring Boot] 10. REST API와 JSON

  • -

 

REST API 동작

 

 

 

 웹 서비스를 사용하는 클라이언트는 웹 브라우저 뿐만 아니라 스마트폰, 스마트워치, 태블릿, CCTV, 각종 센서 등으로 다양하다. 따라서 서버는 이러한 모든 클라리언트의 요청에 응답해야 하고 웹 브라우저 뿐만 아니라 어떤 기기가 와도 기기에 맞는 뷰 페이지를 응답해야 하는데, 이것이 REST API가 필요한 이유이다.

 

 

· REST API (Representational State Transfer API)

- 서버의 자원을 클라이언트에 구애받지 않고 사용할 수 있게 하는 설계 방식

- REST API 방식에서는 HTTP 요청에 대한 응답으로 서버의 자원을 반환한다.

- 이 때 서버에서 보내는 응답이 특정 기기에 종속되지 않도록 모든 기기에서 통용될 수 있는 데이터를 반환한다.

 

 

· REST API의 동작

- 서버는 클라이언트의 요청에 대한 응답으로 화면(View)이 아닌 데이터를 전송한다.

- 이때 사용하는 응답 데이터는 JSON(JavaScript Object Notatoin)이다.

- 과거에는 응답 데이터로 XML을 많이 사용했지만, 최근에는 JSON으로 통일하는 추세.

 

REST API의 동작 : 최근에는 XML이 아닌 JSON으로 통일되는 추세

 

 

 

 

· XML과 JSON

// XML : Extensible Markup Language
<article-form>
	<id>1</id>
    <title>제목제목</title>
    <content>내용내용</content>
</article-form>
// JSON : JavaScript Object Notation
{
    "id" : 1,
    "title" : "제목제목",
    "content" : "내용내용"
}

 

 

 

 

 

· HTTP 메서드와 URL 경로

{JSON} Placeholder 사이트

 

 

 

· 단일 데이터 조회

 

 URL 경로를 확인해보면 .../post/1 이기에 1번 게시글을 조회하는 요청이다. 결과를 보면 1번 게시글의 id, title, body, userId가 JSON 데이터로 반환되었다. 그런데 데이터 조회를 요청할 때는 method 속성 값으로 GET을 써야 하지만 아래 코드에서는 GET을 볼 수가 없는데, 이는 GET은 method 속성의 기본값이기 때문에 이 경우에는 생략이 가능하기 때문이다.

 

단일 데이터 조회 시 HTTP요청과 JSON응답

 

 

 

 

·전체 데이터 조회

 

 URL 경로를 확인해보면 .../posts 이기에 전체 게시글 데이터를 조회하는 요청이다. 결과를 보면 1번부터 100번까지 모든 게시글이 JSON 데이터로 반환되었다. 마찬가지로 이 역시 GET 요청이어서 method 속성을 따로 표시하지 않고 생략한다. 

전체 데이터 조회 시 HTTP요청과 JSON응답

 

 

 

 

·데이터 생성 요청과 응답

 

 method의 속성 값이 POST이므로 데이터 생성 요청이다. 요청의 body 부분을 보면 JSON 데이터로 새 게시글의 title(제목), body(내용), userId(사용자 아이디) 값도 같이 보낸 것을 확인할 수 있다. 결과를 보면 요청 부분의 body 내용을 JSON 데이터로 그대로 반환한 것을 볼 수 있다.

데이터 생성 시 HTTP요청과 JSON응답

 

 

 

 

·데이터 수정 요청 : PUT과 PATCH의 차이점

PUT : 기존 데이터를 전부 새 내용으로 변경

 

PATCH : 기존 데이터 중에서 일부만 새 내용으로 변경

 

 

 

 

·데이터 삭제 요청 

데이터 삭제 시 HTTP요청

 

 

 

 

크롬 확장 프로그램 설치

 

 

 

 

·전체 데이터 조회 요청 

 

 전체 데이터 조회를 위해 .../posts URL 경로를 작성하면 응답으로 200이 온다. 200은 요청이 잘 처리됐다는 것을 의미하는 상태 코드이고, BODY 부분을 보면 응답으로 온 1번부터 100번까지 게시글의 JSON 데이터를 확인할 수 있다.

 

전체 데이터 조회 요청
전체 데이터 조회 응답(성공)

 

 

 

 

·단일 데이터 조회 요청 

 

 단일 데이터 조회를 위해 .../posts/1 URL 경로를 작성하면 응답으로 200이 온다. BODY 부분을 보면 응답으로 1번 게시글의 JSON 데이터를 확인할 수 있다.

단일 데이터 조회 요청 : 1번 게시글
1번 데이터 조회 요청과 응답(성공)

 

 

 

 

·데이터 조회 실패

 

 게시글은 100번까지 있기에 101번 게시글을 요청하는 .../posts/101 URL을 입력하면 응답으로 에러가 발생한다. 상태코드 404는 요청한 페이지를 찾을 수 없다(not found)는 의미이다.

101번 데이터 조회 요청과 응답(실패)

 

 

 

 

·HTTP 상태코드

상태 코드 설명
1XX(정보) 요청이 수신되어 처리 중입니다.
2XX(성공) 요청이 정상적으로 처리됐습니다.
3XX(리다이렉트 메시지) 요청을 완료하려면 추가 행동이 필요합니다.
4XX(클라이언트 요청 오류) 클라이언트의 요청이 잘못돼 서버가 요청을 수행할 수 없습니다.
5XX(서버 응답 오류) 서버 내부에 에러가 발생해 클라리언트 요청에 대해 적절히 수행 불가.

 

 

 

 

·HTTP 요청 메시지와 응답 메시지

 

종류 설명
시작 라인 HTTP 요청 또는 응답 내용, 항상 한 줄로 끝난다.
헤더 HTTP 전송에 필요한 부가 정보(metadata)
빈 라인 헤더의 끝을 알리는 빈 줄, 헤더가 모두 전송되었음을 알린다.
본문 실제 전송하는 데이터가 있다.

 

 요청 메시지를 살펴보면 시작라인에는 요청의 종류(GET), URL 경로(/posts/101), 사용하는 HTTP 버전(HTTP/1.1)이 있고, 헤더에는 호스트 주소(jsonplaceholder.typicode.com, 어디로 보낼지에 대한 정보)가 있다. 즉, 헤더정보는 편지봉투와 같다고 볼 수 있다.

 

HTTP 요청 메시지

 

 응답 메시지는 요청 메시지 아래 한 줄 띄고 그 다음부터 응답 메시지이다. 응답 메시지를 살펴보면 시작라인에는 HTTP 버전(HTTP/1.1)과 상태코드(404)가 있다. 헤더에는 응답을 보낸 날짜(date), 응답 데이터 형식 (content-type) 등이 있다. 응답 메시지의 헤더 아래에 한 줄을 띄고 그 다음 줄부터 본문이다. 

 본문에는 메시지를 실어 보내는 실제 데이터가 있다. 앞서 /posts/101을 요청해서 404 에러가 발생했으므로 본문은 비어있다. ({}) 즉, 헤더가 편지 봉투였다면 본문은 편지 내용과 같다.

 

HTTP 응답 메시지

 

 

 

 

 

 데이터 생성을 요청하고 응답을 받아보자. 메서드를 POST로 선택하고 URL은 .../posts로 수정하고 BODY 부분에 아래와 같이 내용을 입력하고 [SEND] 버튼을 클릭하자.

데이터 생성 요청

 

 응답으로 201이 나온다. 상태 코드 201은 데이터가 잘 생성되었음을 의미하고, BODY 부분을 보면 새롭게 생성된 데이터가 JSON 형식으로 잘 반환된 것을 볼 수 있다.

 

데이터 생성 응답(성공)

 

 실제 HTTP 메시지를 살펴보기 위해 [HTTP] 탭을 확인해보면 여청 메시지의 시작 라인에는 요청 정보(POST), URL 경로(/posts), HTTP 버전(HTTP/1.1)이 들어있다. 헤더에는 호스트 주소(jsonplaceholder.typicode.com), 데이터 형식(Content-Type) 등이 있고, 본문에는 새로 생성할 데이터 정보가 들어 있다.

 

HTTP 요청 메시지

 

 응답 메시지도 시작라인에는 HTTP 버전(HTTP/1.1)과 상태코드(201)가 있다. 헤더에는 응답을 보낸 날짜(date), 응답 데이터 형식 (content-type) 등이 있고 본문에는 생성 데이터가 실려 반환되었다. 이때 id는 자동으로 101번이 매겨진다.

 

HTTP 응답 메시지(성공)

 

 

 

 

· 데이터 생성 요청 실패하는 경우

 

 데이터 생성 요청이 실패했을 때 어떤 응답이 오는지 확인해 보자. 데이터 요청 실패를 위해 JSON 데이터를 아래와 같이 title과 body에 큰 따옴표(")를 지우고 [Send] 버튼을 클릭한다.

JSON 데이터 표기를 잘못한 채 테디어 생성 요청

 

 응답으로 500이 온다. 상태 코드 500은 서버 내부에 에러가 발생했다는 것을 의미한다. 응답의 BODY를 보면 'SyntaxError: ....'라고 나온다. 요청을 보낼 때 데이터를 잘못 보내면 다음과 같은 문제가 발생한다.

 

데이터 생성 응답(실패)

 

[HTTP] 탭에서도 확인해보면, 요청 메시지에서 JSON 데이터의 title과 body 속성에도 큰 따옴표(")가 빠져있다. 

 

HTTP 요청 메시지

 

 HTTP 응답 메시지도 살펴보면, 시작 라인에는 서버에 문제가 생겼음을 알리는 상태코드 500이 보이고, 본문에는 에러가 났음을 알리는 'SyntaxError: ....' 등의 내용을 확인할 수 있다.

 

HTTP 응답 메시지(실패)

 

 

 

 

 데이터 수정을 요청하고 응답을 받아보자. 메서드를 PATCH로 선택하고 URL은 .../posts/1로 수정하고 BODY 부분에 아래와 같이 내용을 수정하고 [SEND] 버튼을 클릭하자.

데이터 수정 요청

 

응답으로 200이 나온다. BODY를 보면 수정한 내용이 반환된 것을 확인할 수 있다.

 

데이터 수정 응답(성공)

 

 

 

 

 데이터 수정을 요청하고 응답을 받아보자. 메서드를 DELETE로 선택하고 URL은 .../posts/10로 수정하고 10번 게시글 삭제를 위해  BODY 부분에 아래와 같이 내용을 수정하고 [SEND] 버튼을 클릭하자.

데이터 삭제 요청

 

응답으로 200이 오면 장 삭제되었다는 의미이다.

 

데이터 삭제 응답(성공)

 

 HTTP 요청 메시지를 보면 DELETE10번 게시글 삭제를 요청했다. 응답 메시지의 시작라인에는 게시글이 잘 삭제되었다는 상태 코드 200이 있고, 본문에는 JSON 데이터의 중괄호({})가 텅텅 비어 있다.

 

HTTP 요청 메시지와 응답 메시지

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.