Computer Engineering/Server

REST, REST API란?

말하는호구마 2021. 1. 19. 19:20

이번주는 REST API 설계와 구현을 할 것이다. 

무작정 시작하기보단 REST API에 대해서 공부를 하는 것이 좋을 것 같다.

 

 


REST

2020년 정보처리기사를 공부하며 익숙해진 단어이다. 

실기를 준비하며 외웠던 REST란 uri를 통해 자원을 구분하고 그 자원을 주고 받는 형식이다.

하지만 부족하거나 틀렸을 수도 있으니 정확히 공부해보자!

 

REST는 Representational State Transfer의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것들을 의미한다

Uri를 통해 자원을 명시하고 HTTP method를 통해 해당 자원에 대한 CRUD를 적용하는 것을 의미한다.

 

 

 

 

REST구조는 3가지로 구성이 된다

자원(Resource) - URI

행위 (Verb) - HTTP Method (GET, POST, PUT, DELETE, PATCH)

 

표현 (Representation of Resource): 포맷 (JSON, XML, TEXT ...)

Uri로 주어나 목적어를 만들고, http method로 동사를 만들어서 문장을 완성시킨다고 생각할 수 있다. 

 

 

 

 

REST 아키텍처에는 6가지의 조건이 있다.

REST특징

1. Server-Client

    -Server와 Client의 인터페이스가 분리되어 서로 간 의존성이 줄어들어야 한다. 

2.Stateless (무상태)

    -Server은 각각의 요청들을 별개의 것으로 처리한다.  (ex. 이전 요청이 다음 요청의 처리에 연관되어서는 안됨)

                 --> 서버의 자유도 상승

    -Server는 Client의 context를 저장하지 않는다 (쿠키, 세션 등등) --> 구현이 단순해짐

3.Cacheable 

     -Client는 응답을 캐싱해야 한다.  --> Server트랜잭션이 발생하지 않기 때문에 전체 응답시간 성능, 서버 자원 이용률이 증가

4.Layered System

     -REST Server는 다중 계층으로 구성될 수 있다. 

                    -->-중간 서버는 로드밸런싱 기능이나 공유 캐시 기능을 제공하여 시스템 규모 확장성을 향상시킴

5.Code on Demand (optional)

     -Server로부터 스크립트를 받아 client에서 실행해야함

6.Uniform Interface

     -Uri로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다. 

     -HTTP표준 프로토콜에 따라는 모든 플랫폼에서 사용 가능    --> 특정 언어나 기술에 종속되지 않음


 

 

RESP API

 

그렇다면 REST API란 무엇일까?

단순하게 REST기반으로 API를 구현한 것이다.

HTTP표준을 기반으로 구현하기 때문에 HTTP를 지원하는 프로그램 언어로 클라이언트와 서버를 구현할 수 있다. 

언어 선택에 자유롭다는 말인 것 같다!

확장성과 재사용성을 높여주기 때문에 유지보수 및 운용이 편리하지만, 정확한 표준이 정해져있지 않기 때문에 일괄적이지 않고 사용할 수 있는 메소드가 정해져이 있기 때문에 다소 제한적이다. 

 

표준은 없지만 기본적으로 지켜야하는 규칙이 있다!

REST API 설계 규칙

1.URI

   - resource는 단수 명사, 소문자를 사용한다. 

         ex)  GET /Board/1 --> X      GET /boards/1 --> O

   - HTTP method가 들어가면 안된다.

         ex)   GET /boards/delete/1 --> X        GET /boards/1 --> O

    -동사의 표현이 들어가면 안된다. 

         ex)  GET /boards/show/1 ---->X    GET  /boards/insert/2 ---->X

                GET /boards/1 ----> O

  

2. 슬래시(/)는 계층관계를 나타내는데 사용하며 URI마지막 문자로 슬래시(/)를 포함하지 않는다.

          ex) http://restapi.com/blogs/boards/ ----> X

                http://restapi.com/blogs/boards -----> O

 

3. 하이픈(-)은 가독성을 위해 사용하지만 밑줄(_)은 사용하지 않는다.

 

4.파일 확장자( .jpg, .png...)는 사용하지 않고 Accept Header를 사용한다. 


규칙들을 명심하며 API를 설계해야할 것이다. 

계속해서 언급되는 Method로는 5가지가 존재한다. 

 

METHOD 역할
GET 조회. 리소스를 조회하고 해당 도큐먼트에 대한 정보를 가져온다
POST 생성. 리소스를 생성한다
PUT 수정.
PATCH 일부 수정
DELETE 삭제

 

내가 만들고자 하는 기능에 가장 어울리는 method를 선택하는 것이 중요해보인다.