카테고리 없음

[프로젝트 기획 - API 설계] RESTFUL API란?

hi._.0seon 2021. 3. 21. 21:13
반응형

프로젝트 기획을 마무리 하면서 api 명세를 작성하는 과정에서 API 설계 방법에 대해 공부하고 정리해보았다.

 

1. REST란?

  • Representational State Transfer
    • 자원을 이름으료 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.
    • = 자원의 표현에 의한 상태 전달
      1. 자원의 표현
        학생 정보 = students
      2. 상태 전달
        = 자원의 정보 전달
        json, XML을 통해 데이터를 주고 받음
  • 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
  • REST는 네트워크 상에서 클라이언트와 서버 사이의 통신 방식 중 하나이다.

HTTP URI (Uniform Resource Identifier)를 통해 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것

 

2. REST의 장단점

장점

  • HTTP 프로토콜의 인프라 사용 -> REST API를 위한 별도의 인프라를 구축할 필요 없음
  • HTTP 프로토콜 표준 활용
  • 서버와 클라이언트의 역할 분리

단점

  • 표준이 존재하지 않는다.
  • 사용할 수 있는 메소드가 4가지 밖에 없다.
    HTTP 메소드 형태가 제한적이다.
  • 구형 브라우저가 제대로 지원 못해주는 부분이 존재
    1. PUT, DELETE 를 사용하지 못하는 것
    2. pushState를 지원하지 않는 점

3. REST가 필요한 이유

서버 프로그램은 다양한 브라우저와 아이폰, 안드로이드 같은 모바일 디바이스에서도 통신이 가능해야 한다.

-> 멀티플랫폼 지원을 위해

 

4. REST 구성 요소

  • 자원: URI
    • 모든 자원에 고유한 ID가 존재 ( = /groups/:group_id )
  • 행위: HTTP Method
    • GET, POST, PUT, DELETE
  • 표현: 자원 표현
    • json, xml을 통해 데이터를 주고받는 것이 일반적
    • 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태로 표현됨

5. REST 의 특징

1 ) Uniform 인터페이스

URI 로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.

 

2 ) Stateless (무상태성)

작업을 위한 상태정보를 따로 저장하고 관리하지는 않는다.

API 서버는 들어오는 요청만을 처리하면 된다.

 

3 ) Cacheable

HTTP를 그대로 사용하기 때문에, HTTP가 가진 캐싱 기능을 적용할 수 있다.

Last-Modified 태그 / E-Tag를 이용하면 캐싱 구현이 가능

 

4 ) Self-descriptiveness

자체 표현 구조

REST API 메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어 있다는 것

 

5 ) Client - Server 구조

REST 서버는 API 제공, 클라이언트는 사용자 인증, 로그인 정보, 세션 등을 직접 관리하여 프론트와 백의 역할이 구분되어 서로간 의존성이 줄어든다.

 

6 ) 계층형 구조

REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 프록시, 게이트웨이 같은 네트워크 기반의 중간 매체 사용 가능

 

 

 

 

 

meetup.toast.com/posts/92

 

REST API 제대로 알고 사용하기 : NHN Cloud Meetup

REST API 제대로 알고 사용하기

meetup.toast.com

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

 

[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

반응형