BE/스프링 부트 3

10장 REST API 와 JSON

이제하네 2023. 12. 10. 23:47

REST API 와 JSON 의 등장 배경

  • REST API(Representational State Transfer API)는 서버의 자원을 클라이언트에 구애받지 않고 사용할 수 있게 하는 설계방식 REST API 방식에서는 HTTP 요청에 대한 응답으로 서버의 자원을 반환
  • 서버에서 보내는 응답이 독점 기기에 종속되지 않도록 모든 기기에서 통용될수 있는 데이터를 반환
  • 서버는 클라이언트의 요청에 대한 응답으로 화면 (view)이 아닌 데이터(data)를 전송, 이때 사용하는 응답 데이터는 JSON(JavaScript Object Notation) , 과거에는 XML을 많이 사용했지만 최근에는 JSON으로 통일되는 추세
더보기

※ API (Application Programming Interface)

애플리케이션을 간편히 사용할수 있게 하는 , 미리 정해진 일종의 약속으로, 사용자와 프로그램 간의 상호작용을 도와줌여기서 다룰 REST API는 클라이언트와 서버 사이의 상호 작용, HTTP 요청에 따른 JSON 응답에 대한 약속

 

XML, JSON 데이터 형식

 

 

REST API 동작 살펴보기

  • Talend API Tester 설치하기
    1. 구글 검색창에 talend api 확장 프로그램 검색 
    2. 크롬 웹 스토어의 Talend API Tester 설치 후 확장 프로그램 추가버튼을 클릭 
    3. 설치가 완료되면 프로그램 시작 
    4. 이 프로그램을 사용해서 HTTP 요청을 보내고 돌아온 응답 확인 가능
  • GET 요청하고 응답받기 
    1. Talend API Tester 에서 머스드 GET 을 선택 후 URL 에 https://jsonplaceholder.typicode.com/posts를 입력
    2. 응답(Response)이 200으로 옴 BODY부분을 보면 1~100번까지 게시글의 JSON 데이터 확인 가능
      • 1XX(정보) 상태 코드 : 요청이 수신돼 처리중
      • 2XX(성공) 상태 코드 : 요청이 정상적으로 처리
      • 3XX(리다이렉션 메시지) 상태 코드 : 요청을 완료하려면 추가 행동이 필요
      • 4XX(클라이언트 요청 오류) 상태 코드 : 클라이언트의 요청이 잘못돼 서버가 요청을 수행할 수 없음
      • 5XX(서버 응답 오류) 상태 코드 : 서버 내부에 에러가 발생해 클라이언트 요청에 대해 적절히 수행하지 못함
    3. 1번 게시글을 조회하기 위해서는 GET 요청은 그대로 두고 URL 마지막에 /1을 추가하면 1번 아이디를 가진 게시글의 JSON 데이터를 확인가능 
    4.  101번 게시글을 조회하면 404 에러가 뜨면서 BODY부분에는 데이터가 없이 {}으로반 표시되어짐 
  • HTTP 요청 메시지와 응답 메시지
    • GET 메서드로 데이터를 조회를 요청하고 응답은 HTTP 메시지에 실려 전송
    • HTTP 메시지는 시작라인 (start line), 헤더(header), 빈 라인(blank line), 본문 (body)으로 구성
      • 시작라인 : HTTP 요청 또는 응답 내용 존재 , 항상 한줄로 끝남
      • 헤더 : HTTP 전송에 필요한 부가 정보 (metadata)가 있음
      • 빈 라인 : 헤더의 끝을 알리는 빈 줄로, 헤더가 모두 전송되었음을 알림
      • 본문 : 실제 전송하는 데이터 존재 

게시글 건체 데이터 정보를 JSON형식으로 가져옴
1번 아이디를 가진 게시글의 JSON 데이터
101번 아이디를 가진 게시글 JSON 데이터를 요청

더보기
<<<<< 시작 라인과 헤더 >>>>>>>>
HTTP/1.1 404
date: Sun, 10 Dec 2023 14:19:57 GMT
content-type: application/json; charset=utf-8
content-length: 2
report-to: {"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1702217997&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=J6oPQ%2FPUYFiTu2%2FZLA5x5aSP2sAMZjDxh6ocVQ65cUA%3D"}]}
reporting-endpoints: heroku-nel=https://nel.heroku.com/reports?ts=1702217997&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=J6oPQ%2FPUYFiTu2%2FZLA5x5aSP2sAMZjDxh6ocVQ65cUA%3D
nel: {"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}
x-powered-by: Express
x-ratelimit-limit: 1000
x-ratelimit-remaining: 999
x-ratelimit-reset: 1702218028
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
priority: u=1,i
server: cloudflare
cf-ray: 833620328aa420f0-HKG
alt-svc: h3=":443"; ma=86400
<<<<< 시작 라인과 헤더 마지막 부분>>>>>>>>
<<<<< 본문>>>>>>
{}
<<<<< 본문 끝 >>>>>>

101번 아이디를 가진 게시글을 조회할때 생기는 HTTP 메시지 

 

  • POST 요청하고 응답받기
    1. 매서드를 POST로 선택하고 URL은 https://jsonplaceholder.typicode.com/posts  으로 수정
    2. 응답이 상태코드 201 로 옴 (201은 데이터가 잘 생성됐음을 의미)
    3. 데이터 생성 요청이 실패 했을때는 응답으로 500 이 옴 (500은 서버 내부에 에러가 발생을 의미)
    4. HTTP 응답 메시지 본문에 에러가 났음을 알리는 내용이 적

POST 방식으로 데이터 생성
데이터 생성 응답 성공
데이터 생성 응답 실패
HTTP 응답 메시지 본문에 에러의 내용이 적힘

 

  • PATCH 요청하고 응답받기
    1. 수정 요청은 PUT, PATCH 메서드를 사용하며 1번 게시글을 수정할수 있도록 URL https://jsonplaceholder.typicode.com/posts/1  으로 작성하고 수정할 내용은 BODY부분에 실어서 보냄
    2.  응답이 200으로 오고 수정된 내용이 반영됨

데이터 수정 요청
데이터 수정 응답 (성공)

 

  • DELETE 요청하고 응답받기
    1. 메서드를 DELETE 로 설정하고 URL  https://jsonplaceholder.typicode.com/posts/10 으로 입력해 10번 게시글 삭제
    2. 응답이 200으로 옴 

데이터 삭제 요청
데이터 삭제 응답 성공