NodeJS - (2) : REST api

­이승환·2021년 9월 16일
1

NodeJS

목록 보기
2/5

REST ?


  • Representational State Transfer 의 약어
  • 자원을 이름(표현)으로 구분하여 해당 자원의 상태(정보) 를 주고 받는 것을 의미
  • 웹 통신에 주로 사용하며 전송관련 상태를 표현하는 구조

    자원(Resource) - URI
    행위(Verb) - Http method
    표현(Representation)

API ?


  • Application Programming Interface
  • 사용자가 원하는 것을 이용할 수 있도록 만든 인터페이스
  • 애플리케이션의 경우 사용자는 내부는 모르지만 기능에 대한 API를 가지고 자원을 활용할 수 있음(공공기관이 대표적)
  • 정보 제공자와 사용자간 소통하는 인터페이스 장치? 라고 이해하면 쉽다

Restful?


Roy Fielding 의 박사학위 논문에 최초로 공개된 용어이다. 당시 HTTP의 주요 저자 중 한사람인 로이필딩은 웹 설계의 우수성을 널리 알리기 위해서 REST를 하나의 아키텍처로서 소개했다고 한다.

위에서 언급한바와 같이 Resource + Verb + Representations 로 구성되어있다.
특징은 아래와 같이 6가지가 존재한다
(1) Uniform interface

  • URI 로 지정된 리소스에, 접근을 통일하고 한정적인 인터페이스로 수행하는 아키텍쳐 스타일
  • 쉽게 말하면 원하는 리소스의 URI 가 명확하다는 것이다

(2) Stateless

  • 무상태성, 즉 작업을 위한 상태 정보를 따로 저장하고 관리하지 않는다. 세션 정보나 쿠기 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청을 단순히 처리하고 반환하기만 하면 된다.
  • 한마디로 필요한 정보만 관리한다는 뜻이다.

(3) Cacheable

  • HTTP 웹 표준을 따르기 때문에, 캐시 기능을 활용할 수있다. Last-modified 태그나 E-Tag 등 을 이용해서 캐싱 구현이 가능하다.
  • 자주 요청되는 정보의 경우 활용할 여지가 크다.

(4) Self-descriptiveness

  • REST API 메시지만 보고도 어떤 정보를 담고있는지 쉽게 이해할 수 있다.
  • GET, POST 와 URI 를 통해서 이 API 가 무슨 역할을 하는지 알 수 있어야 한다.

(5) Client - Server

  • 서버는 api를 제공하고, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인, 토큰) 를 직접 관리하는 역할이 명확히 구분되어 있기에 서로간의 의존성이 줄어들게 된다.

(6) hierarchy structure

  • 보안, 로드밸런싱, 암호화 계층을 추가해 구조의 유연성을 두고, proxy + gateway 를 이용해 네트워크 기반의 중간매체를 사용할 수 있게 한다.

REST api basic rule


1) 슬래시 구분자는 계층관계를 나타낼때 사용한다

2) URI 마지막 문자로 슬래시를 포함하지 않는다.

3) _ 보다는 - 를 이용한다

4) URI 는 소문자를 활용한다

5) 파일 확장자는 URI에 포함하지 않는다

6) CRUD 는 URI 에 포함하지 않고 WEB METHOD(GET, POST..) 를 이용해서 역할을 분리해야한다.

Resource Type


  • RESTful 한 API를 설계하기 위해서 사용하는 모든 Resource를 지칭
  • Document/ Collection / Store / Controller 로 구성되어 있음

1) Document(단수)

  • DB 의 row 단위, 컬렉션에서 하나의 객체 단위로 하는 단일 정보
    ex) 1, 2, 3, team15, number5, seung-lee

2) Collection(복수)

  • 도큐먼트들의 집합
  • 관리의 주체는 서버
    ex) projects

3) Store(복수)

  • 도큐먼트들의 집합이며 관리의 주체는 클라이언트
    ex) favorites, basket(장바구니)

4) Controller(복수)

  • Collection, Store 의 메서드 기능
  • CRUD 라는 표죽적인 메서드와 논리적으로 매핑되지 않는 애플리케이션의 고유한 행동
  • URI의 경로의 마지막에 표시

예제

1) GET http://seunghwan.com/grades/1/classes/3
: 1학년 3반 학생 목록들을 조회

grades : Collections
1 : Document
classes : Collections
3 : Document

2) PUT http://seunghwan.com/members/456/follow
: 456번 회원 멤버를 follow 해라

members : Collection
456 : Document
follow : Controller

3) POST http://seunghwan.com/items/1/favorites/register
: item 1번을 좋아요 목록에 register

  • items : Collections
  • 1 : Document
  • faverites : Store
  • register : Controller

HTTP Methods


1) GET : READ + No body + Use params or querystring
2) POST : CREATE + Use body
3) PUT : UPDATE + Use body
4) DELETE : DELETE + No body + Use params or querystring

HTTP state

1) 성공 (2xx)

2) 리다이렉션 (3xx)

3) 클라이언트 에러 (4xx)

4) 서버에러 (5xx)

profile
Mechanical & Computer Science

0개의 댓글