네트워크 리소스를 정의하고 처리하는 방법을 설명하는 일련의 원칙을 기반으로 하는 아키텍처 스타일
HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
자원(리소스)의 표현에 의한 상태(정보) 전달한다
자원의 표현 = HTTP URI
상태 전달 = HTTP Mehtod
REST 기반으로 서비스 API를 구현한 것
Ex)
만약에 내가 영화 API를 만든다고 가정을 했을 때 기본적인 CRUD를 사용해서 이런식으로 만든다
/createMovie
/seeMovies
/getMovie/parasite
/deleteMovie/parasite
/updateMovie/parasite
/getTopRatedMovies
/findMoviesFromThisYear
하지만 이런식으로 API를 작성하면 팀원들이 알아보기 힘들 것이다. 왜냐하면 명확한 표준이 없이 작성했기 때문이다(see, find 등)
여기서 REST API 스타일을 적용하면 어떡해 될까?
첫번째 동사를 다 뺀다 (URI 에서는 동사를 사용하지 않는다)
/createMovie
/seeMovies
/getMovie/parasite
/deleteMovie/parasite
/updateMovie/parasite
/getTopRatedMovies
/findMoviesFromThisYear
이렇게 동사를 빼면 남는것은 명사 뿐인데(Moive, Movies, parasite)
여기서 우리는 2가지를 이용한다.
첫번째 Movies(Collection)
두번째 영화제목인 parasite(기생충)를 쓸것이다
여기서 기생충은 DB에서 고유 식별자가 된다
결과적으로 두개의 URI이 나온다
/movies
movies/parasite
그리고 우리는 URI에서 동사를 쓰는 대신 HTTP MEthod를 이용한다

GET 을 이용해서 읽을것이고
POST 를 이용해서 생성하고
PUT 을 이용해 업데이트하고
Delete 를 사용해 삭제한다
HTTP Method:
REST API 자원에 대한 행위
HTTP methods 와 명사를 결합하면 어떻게 될까?
| Methods | movies = collection, parastie = Document |
|---|---|
| GET | /movies = 모든 영화 리스트를 불러옴 |
| POST | /movies = 영화를 생성 |
| GET | /movies/parasite = 영화 기생충에 대한 정보 |
| PUT | /movies/parasite = 영화 기생충에 대한 정보 편집 |
| Delete | /movies/parasite = 영화 기생충에 대한 정보 삭제 |
URI은 같지만 methods만 다를 뿐이다
여기서 좀 더 추가해 영화 기생충의 배우를 보고 싶으면
| Methods | movies = collection, parastie = Document |
|---|---|
| GET | /movies/parasite/actors = 영화 기생충의 배우 정보 |
| Delete | /movies/parasite/actors = 영화 기생충의 배우 정보삭제 |
여기서 조금더 조금더 추가해 영화의 검색이나 필터를 처리할 때
굳이 이러한 형식의 URI을 사용할 필요 없이 query parameters를 활용해 나타낼 수 있다.
-> /getTopRatedMovies/movies?min_ration=9.8
-> /findMoviesFromThisYear/movies?release_date=2022
Collection:
컬렉션은 객체들의 집합이기 때문에 복수명사를 사용한다
Document:
객체
RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어.
‘REST API’를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있음
REST API를 쓰면 직관적으로 훨씬 빠르게 API 구조를 이해할 수 있다
최근의 서버 프로그램은 다양한 브라우저와 안드로이드폰, 아이폰과 같은 모바일 디바이스에서도 통신할 수 있어야 하는데 REST는 Stateless 한 특징에 따라 클라이언트와 서버가 각자의 역할이 분리되어 있는 독립성을 가져 HTTP 프로토콜 서비스라는 기본적인 요구만 충족되면 다양한 플렛폼에서 원하는 서비스를 쉽고 빠르게 개발하고 배포할 수 있다.
HTTP 인프라를 그대로 사용하기 때문에, REST API 사용을 위한 별도의 인프라 구축을 요구하지 않는다.
Stateless:
server의 response가 client와의 세션 'state'와 독립적이다.
Stateless 구조에서 server는 단순히 요청이 오면 response를 보내는 역할만 수행하며, 세션 관리는 client에게 책임이 있다.
-세션 정보를 server에 저장하지 않음
-세션 'State(상태)'에 무관한 응답
Session:
일정 시간동안 같은 사용자(정확하게 브라우저를 말한다)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술
REST란? REST API란? RESTful이란?
5분만에 제대로 설계하는 ⭐️ REST API
[10분 테코톡] 🐯 심바의 RESTful