본문 바로가기

웹 프로그래밍/스프링

REST

REST (Representational State Transfer) 

-Http를 이용한 서버를 구현할때 지켜야 하는 설계 원칙

 

-서버와 클라이언트 사이의 결합성(Coupling) 감소에 목표를 둠

    -성능 향상

    -확장성 확보

    -사용 편의성 증대

 

사용자(클라이언트)는 데이터 표현의 상태(게시물 폼)를 전달을 하고 

서버는 그 데이터 표현의 상태를 데이터 베이스라는곳에 저장한다. 

 

1. 클라이언트 서버 Architecture

-클라이언트와 서버의 역할 분리

-서버는 데이터가 어떤 방식으로 표현되는지 몰라도 됨

-클라이언트도 데이터가 어떻게 저장되는지 몰라도 됨(댓글 쓸때 게시글 article_id(FK)를 고려하지 않는다.)

-양측의 독립적 발전을 추구

 

2. Stateless

-클라이언트가 보내는 개별적인 요청은 각각이 요청을 표현하기 충분(모든데이터를 포함) 하여야 한다

-즉 서버가 클라이언트가 몇번째 보낸 요청인지, 이전에 보낸 요청에 데이터가 어떤지 기억할 필요가 없어야 한다.

 

3. Cacheability

-서버에서 보내주는 응답은 캐시 가능성에 대해서 표현해 주어야 한다.(네이버 로고, 아이콘)

-Cache-Control Header

 

4. Layered System

-클라이언트가 서버에 요청이 도달하기까지의 과정을 알 필요 없고, 영향 받지도 않아야 한다.

(예시: Aws -> EC2 -> nginx -> Spring Boot)

-즉 클라이언트는 요청만 보내면 되지 과정은 몰라도 된다.

 

5. Code On Demand(Optional, 선택적)

-실행 가능한 코드를 전달함으로서 일시적으로 클라이언트의 기능을 확장

-JavaScript와 브라우저

 

6. Uniform Interface

-일관된 인터페이스를 가지고 있어야 한다.

-Rest에서 가장 근본적인 제약사항

-RESTful API가 가지는 인터페이스를 묘사한 제약사항

 

클라이언트가 서버에 요청하고 있는 자원이 요청자체로 식별이 되어야 한다

(즉, URL에 요구하는 자원이 무엇인지 명확히 표현)

예시: GET /students/{studentId}

 

자원에 대하여 조작을 할때, 그 자원의 상태나 표현으로 조작이 가능하여야 함

예시: 게시물 새로 쓰기(create), 기존 게시물 수정 하기(update)

 

-자원에 대하여 메시지를 주고 받을때, JSON과 같은 형태로 데이터를 표현한다.

-서버가 데이터를 어떻게 관리하는지보다 표현자체에 더 중점을 둔다.

 

각 요청과 응답은 자기 자신을 해석하기 위한 충분한 정보를 포함하여야 한다

-즉 JSON 형태로 데이터를 보냈다면, 해당 내용임을 요청에 명시되어야 한다.

-Content-type 헤더에 application/json

 

REST API를 만드는것이 아니라 RESTful 한 모습을 목표로 API를 제작

1. URL 구성할때 URL이 자원을 논리적이게 잘 표현할수 있도록

2. 자원에 적용할 작업을 HTTP Method로 구분할수 있도록

 

RM Model Level 2 정도

 

URL과 Method

작업을 위한 URL이 자원을 식별할수 있도록 URL을 구성

- /articles: 전체 글들을에 대해서 작업하기 위한 URL

- /articles/{id}: 어떤 특정 글에 대해서 작업하기 위한 URL

 

자원에 어떤 행동을 할지 HTTP Method를 통해 구분한다.

-CREATE -> 새로운 자원 생성(POST)

-READ -> 자원 조회(GET)

-UPDATE -> 자원 수정(PUT)

-DELETE -> 자원 삭제(DELETE)

 

'웹 프로그래밍 > 스프링' 카테고리의 다른 글

OAuth2  (0) 2024.02.14
JWT  (0) 2024.02.13
스프링 예외 처리  (0) 2023.06.06
자바 예외 이해  (0) 2023.06.03
스프링 데이터 접근 핵심 원리  (0) 2023.05.08