반응형
많은 회사에서 사용하고 있고, 공고에서도 작성되어 있는 Rest API에 대해서 정리해서 기억해두고자 한다.
사용해보기도 하였지만, 막상 Rest API가 무엇인가요 라고 질문 받게 되면 간략하게만 대답한 것 같다.
1. REST API 란?
- REST 는 REpresetational State Transfer 의 약자이다.
- 한줄로는 아래와 같이 정의할 수 있다.
HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 Resource와 Method로 표헌하여 특정한 형태로 전달하는 방식
- 자원을 이름(자원의 표현) 으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
- CRUD 연산에 대한 요청을 할 때, HTTP URI(Resource)를 통해 자원을 명시하고, HTTP Method(Get, Post, Put, Delete)를 통해 수행한다.
- Resource(자원), Method(행위), Representation of Resource(자원의 형태)로 구성된다.
2. REST 의 구성 요소
- Resource(자원) - URI, Verb(행위) - Http Method, Representations(표현) 으로 구성된다.
- Resource(자원) - URI
- 모든 자원에는 고유한(Unique) ID 가 존재하며, 이 자원은 Server 에 존재한다.
- 클라이언트는 이 자원에 요청을 보낸다.
- 자원을 구별하는 ID 는 /member/1 과 같은 HTTP URI 이다. - Verb(행위) - Http Method
- HTTP 프로토콜의 Method(GET, POST, PUT, DELETE)를 사용한다.
- 서버에 요청을 보낼 때, CRUD 연상 처리에 맞는 Method를 사용하여 요청 한다. - Representation(표현)
- 클라이언트가 자원의 상태(정보)에 대한 조작(CRUD)을 요청하면 Server는 이에 적절한 응답을 보낸다.
- 클라이언트와 서버가 데이터를 주고받는 형태로 json, xml, text 등이 있다.
(일반적으로 key, value로 구성된 json 형태를 사용한다.)
- HTTP METHOD의 역할
3. REST의 특징
- Uniform(유니폼 인터페이스)
- Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고, 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.
- 요청을 하는 클라이언트가 플랫폼(Aos, ios, Jsp, Vue 등)에 무관하며, 특정 언어나 기술에 종속받지 않는 특징을 의미한다.
- 이러한 특징으로 REST API는 HTTP를 사용하는 모든 플랫폼에서 요청이 가능하다. - Stateless(무상태성)
- 세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 처리하면 된다.
- 이러한 특징으로, 서비스의 자유도가 높아지며, 서버에서 불필요한 정보를 관리하지 않을 수 있어 구현이 단수해진다.
- 이 무상태성은 서버의 처리방식에 일관성을 부여하고, 서버의 부담을 줄이기 위함이다. - Cacheable(캐시 기능)
- HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다.
- 이러한 특징으로, REST API에서도 HTTP가 가진 캐싱 기능이 적용 가능하다.
- HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능하다. - Self-descriptiveness(자체 표현 구조)
- REST의 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것이다.
- 아래 예시를 참고해보면, JSON 형태로 REST API를 호출하고 있으며, http://localhost:8080/member 로 유저의 이름/아이디/나이를 전달하고자 하는 것을 확인 할 수 있다.
또한, POST를 통해 데이터를 추가하는 요청임을 파악할 수 있다.
HTTP POST, http://localhost:8080/member
{
"member":{
"name":"이름",
"id":"아이디",
"age":"나이"
}
}
- Client-Server Architecture(서버-클라이언트 구조)
- REST API에서는 자원을 가지고 있는 쪽이 서버, 자원을 요청하는 쪽이 클라이언트에 해당된다.
- 서버는 API를 제공하며, 클라이언트는 사용자 인증, Context(세션, 로그인 정보) 등을 직접 관리하는 구조로 각각의 역할을 구분한다.
- 이러한 특징으로, 역할을 확실히 구분시킴으로 서로 간의 의존성을 줄인다. - Layered System(계층 구조)
- REST API의 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조를 변경할 수 있다.
- Proxy, Gateway와 같은 네트워크 기반의 중갠메체를 사용할 수 있게 한다.
4. REST 설계 가이드
- REST에서 중요하며, 기본적인 규칙은 아래와 같다.
- URI는 정보의 자원을 표현해야 한다.
- 자원에 대한 행위는 HTTP Method(Get, Post, Put, Delete)으로 표현한다.
- 좀 더 세부적으로 살펴보면 아래와 같다.
- URI는 정보의 자원을 표현해야 한다.(Resource명은 동사보다는 명사를 사용)
- 자원에 대한 행위는 HTTP Method로 표현한다.
(X) GET /member/get/1
(O) GET /member/1
------------------------
(X) GET /member/write/2
(O) POST /member/2
- 슬래시 구분자(/)는 계층 관계를 나타내는 데에만 사용한다.
- URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
(X) http://localhost:8080/member/tester/1/
(O) http://localhost:8080/member/tester/1
- 하이픈(-)은 URI 가독성을 높이는데 사용한다.
- 언더바(_)은 URI에서 사용하지 않는다.(가독성)
- URI 경로에는 소문자가 적합하다.
- 파일 확장자는 URI에 포함시키지 않는다.
(Accept Header를 사용한다.)
(X) http://restapi.example.com/members/soccer/345/photo.jpg
(O) GET /members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg
참고
- https://meetup.toast.com/posts/92
반응형
'BackEnd' 카테고리의 다른 글
MyBatis(마이바티스)에서 사용하는 WHERE 1=1 의 위험성 및 예방(Feat. 장애) (0) | 2022.09.18 |
---|---|
@JsonProperty, @JsonNaming 정리 (0) | 2022.07.23 |
[Heroku] SpringBoot + MySQL(heroku) 배포하기 - (2)Heroku 배포 (0) | 2022.04.23 |
[Heroku] SpringBoot + MySQL(heroku) 배포하기 - (1)Heroku 설정 (0) | 2022.04.23 |
프로젝트 Github 연동하기(with Source Tree) (0) | 2021.03.28 |