Becker
Becker 의 TIL
Becker
  • 분류 전체보기 (30)
    • Computer Science (15)
      • Python (7)
      • Java (1)
      • Algorithm (0)
      • Database (3)
      • Network (1)
      • Openstack (2)
      • ETC (1)
    • 자동화 (3)
      • Github Action (1)
      • Airflow (0)
      • Docker (2)
    • 논문 리뷰 (1)
    • 서평 (3)
    • 끄적끄적 (8)
전체 방문자
오늘
어제

인기 글

티스토리

hELLO · Designed By 정상우.
Becker

Becker 의 TIL

[Network] REST API란?
Computer Science/Network

[Network] REST API란?

2022. 12. 26. 15:05

REST API 란 무엇인가?

  • REST는 서비스의 인터페이스(uri)를 설계하는 원칙이다. 여기서 REST 란 Representational State Transfer의 줄임말이고, 웹의 장점을 최대한 활용할 수 있는 아키텍쳐이다.
  • REST API란 REST 원칙에 입각하여 서비스의 API를 구현한 것을 의미한다.

REST란?

  • 자원(Resource)을 URI에 명시하고
  • GET, POST, PUT, DELTET 와 같은 http 메서드 사용하여
  • 해당 자원의 CRUD를 적용하는 것

REST의 구조와 특징

REST는 다음과 같은 3가지 구조로 이루어진다

  • 자원(Resource) - URI
  • 자원의 행위(verb) - http Method
  • 자원에 대한 행위의 내용(Representation) - Pay Load(Body)

REST의 특징 6가지

  • Uniform interface(유니폼 인터페이스)
    • 자원에 대한 조작을 URI와 같은 한정적인 인터페이스를 통해 수행함
    • 요청된 자원이 식별 가능하며 클라이언트에 전송되 표현과 분리되야함
    • 수신한 표현을 통해 클라이언트가 리소스를 조작할 수 있어야함
    • 클라이언트에 반환되는 자기기술적(self-descriptive) 메시지에 정보를 어떻게 처리해야할지 설명하는 정보가 충분히 포함되야함
    • 하이퍼미디어 : 클라이언트가 리소스에 엑세스한 후 하이퍼링크를 사용해 수행가능한 모든 작업을 찾을 수 있어야함
    • Hateoas(Hypermedia As The Engine Of Application State) :  HTML 페이지를 통해 http의 하이퍼링크들로 페이지를 이동해 정보를 보여주며 상태가 옮겨다닐 수 있게 만들어야함
  1. Stateless(무상태성)

REST는 무상태 성격을 가진다 이는 작업을 수행하기 위해 상태정보를 저장/관리하지 않음을 의미한다. 세션/쿠키 정보를 별도로 저장하지 않고 관리한다.

  1. Cacheable(캐시 가능)

HTTP 웹 표준을 그대로 사용하기 때문에 HTTP가 가진 캐싱기능이 적용 가능해함 -> Last Modified, E-Tag 기능을 통해

  1. Client-Server 구조

서버와 클라이언트의 역할이 구분되는 형태로 구성하여 서로간의 의존성을 줄어들게 만들어야한다.

  1. Layerd system(계층형 구조)

REST 서버는 다중 계층으로 구성될 수 있다. 이는 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상 유연성을 줄 수 있고 proxy, gateway와 같은 네트워크 기반 중간매체를 사용가능하게 한다.

  1. Code-On-Demand(optional)

서버에서 클라이언트로 실행가능한 코드를 전송하여 클라이언트 기능을 확장할 수 있는 기능


REST API의 설계 규칙

  1. URI는 정보의 자원을 표시해야한다.
    1. resource는 명사를, 대문자보다 소문자를 사용

GET : /character/1

GET : /characters

  1. 자원의 행위(verb)는 Http Method를 사용
    • 동사표현이 들어가면 안된다
    • 경로의 변화하는 부분은 유일한 값으로 대체한다

GET : /usercharacter/delete/{:id} (x)

DELETE : /usercharacter/{:id}

  1. (/) 구분자는 계층구조를 나타낼때 사용한다

GET : /users/setting

  1. 마지막에는 슬래시(/)를 넣지 않는다
  2. 하이픈(-)은 가독성을 높일 때 사용한다
  3. 밑줄(_)은 사용하지 않는다
  4. 파일 확장자는 URI에 포함시키지 않는다
  5. 리소스간 관계는 다음과 같이 표현한다

GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)


HTTP 응답 상태코드

클라이언트 요청에 따른 REST API 상태 코드는 다음과 같다.

코드 description
2XX 클라이언트 요청 성공
3XX 요청을 완료하기 위해 추가적인 행동이 필요
4XX 클라이언트의 잘못된 요청
5XX 서버 오류

[읽을거리]

  • https://sabarada.tistory.com/34

[참고]

  • https://www.redhat.com/ko/topics/api/what-is-a-rest-api
  • https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
  • https://meetup.toast.com/posts/92
    Becker
    Becker

    티스토리툴바