본문 바로가기
Network

REST API

by 로보리스 2021. 9. 18.

REST API란 무엇인가?


REST API는 개발자들 사이에서 널리 쓰이는 일종의 형식이다. 예를 들면, 어떤 홈페이지에 로그인을 하기 위해서는 회원가입을 하게 되는데, 기본적으로 회원가입을 할 때 떠오르는 것들은 무엇인가? 일반적으로 아이디와 패스워드와 같은 구성이 떠오를 것이다. 이런 것처럼 개발자들 사이에서도 REST API를 얘기 할 때, 공통적으로 떠오르는 형식이다. 제품이 아닌 형식이기 때문에 어떤 프로그래밍 언어나 프레임워크를 쓰든 이 형식에 맞춰서 기능을 만들어내면 되는 것이다.

 

 

API란?


API를 이해하기 위해서는 라이브러리를 이해해야한다. 라이브러리는 함수들의 집합이라고 할 수 있는데, 미리 함수를 모아 놓은 곳을 말한다. 도서관에서 필요한 책을 빌리듯 라이브러리에서 필요한 함수를 찾아 쓸 수 있다. 라이브러리에 접근하기 위한 규칙들을 정의한 것을 API라고 한다. 즉 프로그래머가 API 이용할 때, 함수의 내부 구조는 알 필요없이 단순히 API에 정의된 입력 값을 주고 결과 값을 사용할 수 있게 해준다. 따라서 REST API도 'REST'란 형식으로 규칙등을 정의 한 것이다.

 

 

REST는 또 무엇인가?


  • REST(Representational State Transfer)는 네트워크를 통해서 컴퓨터들끼리 통신할 수 있게 해주는 아키텍처 스타일이다. 
  • REST는 URI와 HTTP 프로토콜 기반으로 한다.
  • REST는 HTTP 프로토콜 덕분에 '단순함'이 핵심이라고 할 수 있다.
  • 데이터 포맷으로는 브라우저 간 호환성이 좋은 제이슨(JSON)을 사용한다.
  • REST는 구축과 확장이 간단하지만, 크고 복잡하게 만들 수도 있다.
  • REST의 가장 중요한 특성은 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론이 가능하다. 따라서 유지보수에도 수월하다.

 

 

 

  • REST를 사용하기 전에는 SOAP이라는 규약이 있었다.

 

 

REST API의 기본적인 정의


1. Client, Server : 클라이언트와 서버가 서로 독립적으로 분리 되어 있어야 한다.

2. Stateless : 요청에 대해서 클라이언트의 상태를 서버에 저장하지 않는다.

  - 치즈버거 주세요.

  - 치즈버거와 콜라를 주세요. (이전 요청을 저장하지 않음)

3. Cache : 클라이언트는 서버의 응답을 Cache(임시저장) 할 수 있어야 한다.

   - 클라이언트가 Cache를 통해서 응답을 재사용할 수 있어야 하며, 이를 통해서 서버의 부하를 낮춘다.

4. 계층화 (Layered System) : 서버와 클라이언트 사이에, 방화벽, 게이트웨이, Proxy 등 다양한 계층 형태로 구성이 가능해야 하며, 이를 확장 할 수 있어야 한다.

5. 인터페이스 일관성 : 인터페이스의 일관성을 지키고, 아키텍처를 단순화시켜 작은 단위로 분리하여, 클라이언트, 서버가 독립적으로 개선될 수 있어야한다.

 

  1) 자원의 식별

    - 웹 기반의 REST에서는 리소스 접근을 할 때 URI를 사용

    - https://foo.co.kr/user/100

    - Resource : user

    - 식별자 : 100

    - URI : 식별자, 컨트롤러를 만든다는 것은 URI를 만든다는 것

    - URL: 위치, 서버에 있는 폴더 위치로 찾아감

    - 참고자료 ) https://blog.naver.com/ghdalswl77/222454095003

 

  2) 메시지를 통한 리소스 조작

 

  3) 자기 서술적 메시지

    - HTTP 기반의 REST에서는 HTTP Method와 Header 정보, 그리고 URI의 포함되는 정보로 표현할 수 있어야 함

    - GET : https://foo.co.kr/user/100, 사용자의 정보 요청

    - POST : https://foo.co.kr/user , 사용자 정보 생성

    - PUT : https://foo.co.kr/user , 사용자 정보 생성 및 수정

    - DELTE : https://foo.co.kr/user/100 , 사용자 정보 삭제

  4) 애플리케이션 상태에 대한 엔진으로서 하이퍼미디어

6. Code on Demand (Optional) : 자바 애플릿, 자바스크립트, 플래시 등 특정한 기능을 서버로부터 클라이언트가 전달받아 코드를 실행 할 수 있어야 한다.

*RESTful 하다는 것은 위의 조건을 잘 지켜졌을 때 쓰임

댓글