REST API & JSON

서린·2024년 3월 11일

혼자개발

목록 보기
66/82

스프링부트3 자바 백앤드 개발 입문 - 길벗

REST :

  • HTTP URL로 서버의 자원을 명시하고 HTTP 메소드로 그 자원에 대해 CRUD(처리) 하는 것
  • 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일(HTTP를 잘 사용하기 위한 아키텍처 스타일)

API(Application Programming Inteface) :

  • 클라이언트가 서버의 자원을 요청할 수 있도록 서버에서 제공하는 인터페이스
  • 애플리케이션을 간편히 사용할 수 있게 하는, 미리 정해진 일종의 약속
  • 사용자와 프로그램 간 상호작용을 돕는다
  • 프로그램과 또 다른 프로그램을 연결해주는 다리역할
  • HTTP 요청을 보낼 때 어떤 URI에 어떤 메소드를 사용할지 개발자들 사이에 널리 지켜지는 약속

REST API (Representational State Transfer API)

  • REST한 방식으로 데이터를 상호교환 하도록 설계된 API
  • 서버의 자원을 클라이언트에 구애받지 않고 사용할 수 있게 하는 설계 방식
  • HTTP를 잘 사용하기 위해서, URI와 HTTP 메소드를 사용해 URL로 어떤 자원에 접근 할 것인지, 메소드로 어떤 행위를 할 것인지 표현하여 설계된 API
  • HTTP 요청에 대한 응답으로 서버의 자원을 반환
  • 서버에서 보내는 응답이 특정 기기에 종속되지 않도록 모든 기기에서 통용될 수 있는 데이터를 반환
  • 서버가 클라이언트의 요청에 체계적으로 대응할 수 있어서 서버 프로그램의 재사용성과 확장성이 좋아진다
  • 클라이언트와 서버 사이의 상호작용 = HTTP요청에 따른 JSON응답에 대한 약속

REST API의 제약조건
1. Client-Server

  • API를 통해 정보를 교환하는 주체는 클라이언트와 서버를 분리해서 서로 의존하지 않는 구조를 가져야 한다
  1. Stateless
  • 무상태성(서로의 상태를 기억하지 않는다)
  • 클라이언트에서 서버로의 요청에는 그 요청을 이해하는데 필요한 모든 정보가 포함되어있어야 한다
  • 클라이언트와 서버 모두 통신하는 상대의 상태를 저장하고 있지 않는다
  • 요청과 응답이 들어올 때마다 상대가 누군지 파악할 수 있어야 한다
  1. Cache
  • 캐시처리 가능 여부
  • 요청에 대한 응답 내의 데이터에 캐시 가능여부가 명시되어 있어야함을 의미
  1. Uniform Interface
  • 전체 시스템을 파악할 수 있는 인터페이스를 제공해야한다
  • 이 인터페이스를 일반화 시킴으로써 클라이언트-서버간의 결합도를 낮출 수 있다
  • 6가지 제약조건 중 api에서 가장 지키기 힘든 제약조건.
  1. Layered System
  • 계층화 시스템
  • 클라이언트는 서버에 직접 연결되었는지, 중간 서버를 통해 연결되었는지 알 수 없어야 한다
  1. Code-On-Demand(Optional)
  • Server에서 보낸 코드를 Client에서 실행할 수 있어야 한다
  • 선택적인 조건사항

클라이언트는 웹 브라우저만 있는게 아니다
스마트폰, 스마트워치, 태블릿, CCTV, 각종 센서 등이 모두 클라이언트.
IT기기의 발전에 따라 다양한 클라이언트들이 있는데
서버는 웹 브라우저뿐만 아니라 어떤 기기가 와도 기기에 맞는 뷰 페이지를 응답해야한다

이 때 서버가 일일이 대응하기 쉽도록 사용하는것이 REST API

서버는 클라이언트의 요청에 대한 응답으로 뷰가 아니라 데이터를 전송한다
이때 사용하는 응답 데이터는 JSON(JavaScript Object Notation)
과거에는 xml을 많이 사용했지만 최근에는 JSON으로 통일되는 추세

XML : 사용자 정의형 HTML
JSON : 자바스크립트 방식을 차용한 객체 표현식

<article-form>
  <id>1</id>
  <title>제목</title>
  <content>내용</content>
</article-form>
{
	"id": 1,
  	"title": "제목",
  	"content": "내용"
}

JSON 데이터는 key 와 value로 구성된 정렬되지 않은 속성의 집합
key는 문자열이므로 항상 ""로 감싸고 값은 문자열일 경우에만 ""로 감싼다

0개의 댓글