JaeWon's Devlog
article thumbnail
Published 2022. 4. 6. 14:11
[Server] REST API 란? BackEnd
반응형

많은 회사에서 사용하고 있고, 공고에서도 작성되어 있는 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의 역할

https://meetup.toast.com/posts/92

 

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

- https://mangkyu.tistory.com/46

- https://velog.io/@somday/RESTful-API-%EC%9D%B4%EB%9E%80

반응형
profile

JaeWon's Devlog

@Wonol

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!