[Concept] REST와 REST API

Van·2023년 5월 29일
0
post-custom-banner

Goal

  • REST에 대해 간략하게 설명할 수 있다
  • REST API에 대해 알아보자

Introduction

REST? RESTful? REST API?
REST는 웹 개발을 하게 되면서 자주 접하게되는 컨셉으로 REST에 대해 어느 정도 개념적으로는 알고 있었지만 깊게 생각해보지는 않아 이번에 한 번 정리해보려고 합니다.


REST

출처: https://www.linkedin.com/pulse/understanding-rest-architecture-gabriel-gitonga

REST(REpresentational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다. 이 용어는 로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개되었다. 필딩은 HTTP의 주요 저자 중 한 사람이다. 이 개념은 네트워킹 문화에 널리 퍼졌다.
출처 : 위키백과<REST>

REST가 뭘까?

REST는 네트워크 소프트웨어 아키텍처로 쉽게 말해 '네트워크에서 통신을 구성할 때 이런 구조로 설계하라는 지침' 정도로 볼수 있다. 이러한 지침에는 여러 원칙이나 구성 요소, 제약 사항을 통하여 일관성을 가지고 네트워크 아키텍처를 설계하고 구현하게 된다.

원래는 네트워크 통신을 위하여 제시되었으나, 현실적으로 '네트워크'의 상당 부분은 '웹'을 기반으로 하고 있기 때문에 웹을 통한 전송에서 대부분 쓰이고 있다. 태생 자체가 데이터 송수신에 최적화 되어 있어 이를 위한 웹 API쪽에서 굉장히 많이 사용되고 있다. 이를 'REST API'라고 부른다.

REST의 원칙

REST를 표준하는 제약 사항이자 스타일이다.

1. Client-Server(클라이언트-서버)

  • 클라이언트와 서버는 독립적인 역할을 수행합니다
  • 클라이언트는 사용자 인터페이스를 제공하고 사용자의 요청을 전달합니다
  • 서버는 데이터와 비즈니스 로직을 관리하고 클라이언트에게 필요한 리소스를 제공합니다

2. Stateless(무상태성)

  • 서버는 클라이언트의 상태를 유지하지 않습니다
  • 각 요청은 필요한 정보를 모두 포함하여 완전한 요청이어야 합니다
  • 서버는 각 요청을 독립적으로 처리하며 클라이언트의 이전 상태에 대해 의존하지 않습니다

3. Cacheable(캐싱)

  • 서버는 응답을 캐시 가능하도록 표시할 수 있어야 합니다
  • 클라이언트는 이전에 받은 응답을 캐시하여 동일한 요청에 대한 재사용이 가능합니다
  • 캐시를 활용하여 네트워크 대역폭을 절약하고 응답 시간을 단축시킬 수 있습니다

4. Uniform Interface(일관된 인터페이스)

  • 클라이언트와 서버 간의 통신을 위한 통일된 인터페이스가 있어야 합니다
  • 인터페이스는 리소스 식별, 리소스 조작, 자기 서술적 메시지 등으로 구성돕니다.
  • 각 요청은 명시적인 URI를 사용하여 리소스를 식별하고, 표준 HTTP 메소드(GET,POST 등)를 사용하여 리소스를 조작합니다
  • 자기 서술적 메시지를 통해 요청과 응답은 스스로를 설명할 수 있어야 합니다(Header, Body)
  • 예) REST API 정의를 HTTP + JSON으로 하였다면 C, JAVA, Python, IOS 플랫폼 등 특정한 언어나 기술에 종속 받지 않고, 모든 플랫폼에 사용이 가능한 Loosely Coupling 구조

5. Layered System(계층화)

  • 클라이언트와 서버 사이에 중간 계층이 존재할 수 있습니다
  • 중간 계층은 요청을 전달하고 응답을 처리하는 역할을 수행합니다
  • 계층화를 통해 시스템의 확장성, 보안성, 로드 밸런싱 등을 개선할 수 있습니다
  • 클라이언트는 서버의 구체적인 구조를 알 필요 없이 중간 계층을 통해 통신할 수 있습니다

6. code on demand(optional)

  • 필요에 따라 서버에서 클라이언트로 실행 가능한 코드를 전송할 수 있습니다
  • 클라이언트는 이 코드를 실행하여 기능을 확장하거나 커스터마이징할 수 있습니다
  • 이 원칙은 선택적으로 사용될 수 있습니다

REST의 구체적인 개념

  • HTTP URI(Uniform Resource Identifier)를 통해 자원(Resourece)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CURD를 적용하는 것을 의미한다
    • 즉, REST는 자원 기반의 구조 설계의 중심에 Resource가 있고 HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍쳐를 의미한다
    • 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 교유한 URI를 부여한다.
    • CRUD
      • Create : 생성(POST)
      • Read : 읽기(GET)
      • Update : 수정(PUT)
      • Delete : 삭제(DELETE)

REST의 구성 요소

1.Method

Method의미Idempotent
POSTCreateNo
GETSelectYes
PUTUpdateYes
DELETEDeleteYes

Idempotent : 한 번 수행하냐, 여러 번 수행했을 때 결과가 같나?

2.Resource

  • http://myweb/users와 같은 URI
  • 모든 것을 Resource(명사)로 표현하고, 세부 Resourece에는 id를 붙임

3.Message

  • 메시지 포맷이 존재(JSON, XML과 같은 형태)
HTTP POST, http://myweb/users
{
  	"users" : {
    		 "name" : "Van"
  	}
}

요약

REST는 웹 기반의 분산 시스템을 위한 아키텍처 스타일로 클라이언트와 서버 간의 역할 분리, 무상태성, 자체 서술적인 메시지, 캐싱, 계층화, 단일 인터페이스 등의 원칙을 따르며 이를 통해 시스템은 확장 가능하고 유연하며, 상호 운용성이 높아진다. REST는 HTTP를 기반으로 클라이언트와 서버 간의 통신을 단순하고 직관적으로 만들어주며, 표준 메소드를 사용하여 리소스를 조작합니다. 이를 통해 개발자는 일관된 방식으로 리소스를 관리하고 상호 작용 할수 있습니다.
REST는 웹 API, 마이크로서비스 아키텍처 등 다양한 분산 시스템에서 널리 사용되며, 확장성, 유연성, 상호 운용성, 성능 개선 등의 이점을 가지게 됩니다.


REST API

출처 : https://hanamon.kr/rest-api/

REST API

REST 기반으로 서비스 API를 구현하는 것
우리가 위에서 알아본 REST 원칙을 따르는 API를 작성한다면 바로 그것이 'REST API'일 것이다.

API는 Application Programing Interface의 약자로, 응용 프로그램 간 상호 작용을 위한 인터페이스를 제공하는 것을 말합니다. 또한 API는 다른 프로그램이 기능을 활용할 수 있도록 메소드, 데이터 구조, 프로토콜 등의 집합입니다.

REST API 특징

  1. 자원 기반(Resource-based): 각각의 리소스(데이터 또는 서비스)는 고유한 URI(Uniform Resourece Identifier)로 식별됩니다, 클라이언트는 URI를 통해 특정 리소스에 접근하고 조작할 수 있습니다

  2. HTTP 메소드 활용: REST API는 HTTP 메소드(GET,POST 등)를 사용하여 리소스를 조작합니다. 각 메소드는 특정한 동작을 의미하며, 클라이언트는 적절한 메소드를 선택하여 리소스에 대한 요청을 전송합니다

  3. 자체 서술적인 메시지(Self-descriptive Message): REST API의 요청과 응답 메시지는 자체적으로 설명 가능해야 합니다. 메시지의 헤더와 본문은 메시지의 의도와 내용을 명확하게 전달하며, 데이터 형식은 일반적으로 JSON 또는 XML을 사용합니다

  4. Hypermedia as the Engine of Application State(HATEOAS): 클라이언트는 서버로부터 받은 응답을 통해 애플리케이션 상태를 파악할 수 있어야 합니다. 서버는 응답에 하이퍼미디어 링크를 포함시켜 클라이언트가 다음 동작을 수행할 수 있는 정보를 제공합니다


RESTFul

  • RESTFul은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어로 'REST API'를 제공하는 웹 서비스를 'RESTFul'하다고 할 수 있다.
    • 'REST API'를 제공하는 웹 서비스를 'RESTFul'하다고 할 수 있다
  • RESTFul은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다
    • 즉, REST 원리를 따르는 시스템을 RESTFul 하다고 말한다

RESTFul 하지 못한 경우

  • CRUD 기능을 모두 POST로만 처리하는 API
  • URL에 resource, id외의 정보가 들어가는 경우
    (/movies/getMovie)

참조

https://namu.wiki/w/REST

위키백과<REST>

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

profile
그럭저럭 어렵지 않게 Smile!
post-custom-banner

0개의 댓글