intro :
클라이언트(기기)는 너무나 다양해서 알맞는 뷰를 일일이 설정하기 난감하다.
모든 클라이언트에 통용되는 좋은 방법이 없을까?
REST API
: 웹서버 자원을 클라이언트에 구애받지 않고 사용할 수 있게 하는 방식
: 즉 모든 클라이언트가 대응할 수 있게 서버를 설계하는 방식
: 서버의 응답이 모든 기기에서 통용되도록 View(화면)이 아닌 JSON 형태의 data만을 반환(응답)
: http를 통해 서버 자원을 다룬다
* 서버의 응답?
- 과거 : XML 형식 (사용자 정의형 html 정도)
- 현재 : JSON 형식 (JavaScript 방식을 차용한 객체표현식)
ㄴ 키, 값 쌍을 중괄호에 담아 표현
ㄴ 즉 형태가 이런식이다 ↓
{
key : value,
key : value
}
이때 value는 String 말고도 "또다른 json"이나 "배열"로 들어갈 수도 있다.
* 참고 : REST, REST api에 대한 개념은 여기서도 따로 공부했다.
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 : 데이터 생성 완료
POST요청으로 응답 실패 (404)도 겪어보자.
Status 500 : 서버 내부 에러 발생
Http 요청/응답 문자 확인해보기
좀전에 GET요청에서 확인해본 것과 마찬가지로..
POST http 요청/응답 문자도 어떻게 생겼나 보고 가자.
http 요청
http 응답
요청 에러일 경우 다음과 같이 500번 코드의 응답이 돌아온다.
서버에서 문제가 생겼다는 응답이 돌아온 것이다.
PATCH 요청 보내보기
잘 수정되었다.
DELETE 요청 보내보기
10번 게시글을 삭제하는 요청을 보내보자.
요청 성공! delete했기 때문에 비어있는 json 데이터가 보인다.
요청/응답 http 문자도 확인해보자.
http 요청 | request line과 header
http 응답 | status line, header, body
끘~
'web +a' 카테고리의 다른 글
스프링부트 ~20 | 서비스 계층 추가 & 트랜잭션 처리 (0) | 2022.07.25 |
---|---|
스프링부트 ~19 | REST API를 적용하여 CRUD 구현하기 (0) | 2022.07.21 |
스프링부트 ~17 | SQL 쿼리 로깅 & CRUD 쿼리 실습 (0) | 2022.07.20 |
스프링부트 ~16 | Delete (0) | 2022.07.20 |
스프링부트 ~15 | Update (0) | 2022.07.20 |