본문 바로가기

web +a

스프링부트 ~18 | REST API와 JSON

intro : 

클라이언트(기기)는 너무나 다양해서 알맞는 뷰를 일일이 설정하기 난감하다.

모든 클라이언트에 통용되는 좋은 방법이 없을까? 

 


REST API

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

: 즉 모든 클라이언트가 대응할 수 있게 서버를 설계하는 방식

: 서버의 응답이 모든 기기에서 통용되도록 View(화면)이 아닌 JSON 형태의 data만을 반환(응답)

: http를 통해 서버 자원을 다룬다

 

* 서버의 응답?

- 과거 : XML 형식 (사용자 정의형 html 정도)

- 현재 : JSON 형식 (JavaScript 방식을 차용한 객체표현식)

ㄴ 키, 값 쌍을 중괄호에 담아 표현

ㄴ 즉 형태가 이런식이다 ↓

{

    key : value,

    key : value

}

이때 value는 String 말고도 "또다른 json"이나 "배열"로 들어갈 수도 있다.

 

 

* 참고 : REST, REST api에 대한 개념은 여기서도 따로 공부했다.

REST API를 적용하여 CRUD 구현하기


rest API와 json 실습

실습을 위해 이용할 것 : 

- 연습용 API 서버 : https://jsonplaceholder.typicode.com/

- API 테스터 확장프로그램 : http 요청을 보내고 그에 따른 응답을 확인해볼 수 있는 기능이다.

 

 

연습용 API 서버

이 사이트에서 지원하는 자원들을 이용해 실습가능하다 :

 

 

Talend API Tester 확장프로그램

이 확장프로그램을 통해 http요청을 보내고, 그에 대한 응답을 확인해보자.

 

 


GET요청 보내보기

 

먼저 GET 요청을 보내본다.

 

Json 응답이 돌아왔다.

Status 200 : 응답 성공

 

이번엔 1번 게시글만 가져와보자. json 응답 하나를 확인가능하다.

 

 

 

GET요청으로 응답 실패 (404)도 겪어보자.

ex) post 데이터는 100번까지 있는데, 101번을 GET요청해보자.

Status 404 : 찾을 수 없는 페이지 요청 (not found)

 

 

Http 요청/응답 문자 확인해보기

 

위와 같이 Json 응답을 확인해보았다.

이때 Http 날것의 응답은 어떤 모양새일까?

 

http 요청과 응답의 흔적 또한 Talend API Tester 확장프로그램을 통해 확인가능하다.

http 형태의 GET 요청 / 응답을 확인해보자.

(GET요청 실패인 경우를 확인해보자)

 

 

http 요청 (헤더부분) (cf. 편지봉투)

GET /posts/101 HTTP/1.1                <- request line
Host: jsonplaceholder.typicode.com     <- header

 

http 응답

- 404 응답 헤더부분 : 여러 정보가 써있다. 요청 에러라서 응답이 404 코드로 돌아온다.

HTTP/1.1 404                                      <- status line
date: Thu, 21 Jul 2022 00:57:03 GMT               <- .. header
content-type: application/json; charset=utf-8
content-length: 2
x-powered-by: Express
x-ratelimit-limit: 1000
x-ratelimit-remaining: 999
x-ratelimit-reset: 1658365067
vary: Origin, Accept-Encoding
access-control-allow-credentials: true
cache-control: max-age=43200
pragma: no-cache
expires: -1
x-content-type-options: nosniff
etag: W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"
via: 1.1 vegur
cf-cache-status: MISS
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=oTr16TTuxyGCYKmmTjaLioyAEgYUgZB3eOoizwlwXuEnmoGOYaKIZYgCABnU%2BZdiyd8nS%2FtKtKrd8%2Fxt6LH36lcBMOG3Vu1VJlUDGONBEtZjq6QQkOfvclFES%2F9Wa3MrFW5JN5TAVil4RlJhXq%2BY"}],"group":"cf-nel","max_age":604800}
nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
server: cloudflare
cf-ray: 72dffaf0b9558b30-HKG
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400

- 응답의 내용물 : status 404라서 내용물이 없다.

{}     <- body

 

 


POST요청 보내보기

body에 (폼형태가 아닌) json형태로 데이터를 보낼 것이다. 

rest API 실습이기 때문에 json 형태를 사용하는 것이다.

 

 

Status 201 : 데이터 생성 완료

생성된 데이터 내용이 Json으로 리턴된 것을 확인가능

 

POST요청으로 응답 실패 (404)도 겪어보자.

Status 500 : 서버 내부 에러 발생

 

 

Http 요청/응답 문자 확인해보기

좀전에 GET요청에서 확인해본 것과 마찬가지로..

POST http 요청/응답 문자도 어떻게 생겼나 보고 가자.

 

http 요청

request line과 header 그리고 body

http 응답

status line, header, body

 

요청 에러일 경우 다음과 같이 500번 코드의 응답이 돌아온다.

서버에서 문제가 생겼다는 응답이 돌아온 것이다.

 


PATCH 요청 보내보기

잘 수정되었다.

 

 


DELETE 요청 보내보기

10번 게시글을 삭제하는 요청을 보내보자. 

요청 성공! delete했기 때문에 비어있는 json 데이터가 보인다.

 

 

 

요청/응답 http 문자도 확인해보자.

 

http 요청 | request line과 header

 

http 응답 | status line, header, body

 

 


끘~

반응형
다른 블로그