Junglog.

REST API

REST API란 REST(Representational State Transfer) 아키텍처의 제약 조건을 준수하는 API이다.

최정환·2022년 10월 24일·2분 읽기404 views

REST API란 REST(Representational State Transfer) 아키텍처의 제약 조건을 준수하는 API이다.

API(Application Programming Interface)는 따로 정리

REST는 분산 Hypermedia system (ex: 웹)를 접근하기 위해 개발된 Software Architecture Style(제약조건의 집합)이며 protocol이나 표준이 아닌 아키텍쳐 원칙 세트이다

네트워크에서 Server와 Client 기기간의 의사소통하는 규격 사항 HTTP를 이용한다.

HTTP의 GET,POST,PUT,DELETE Method를 사용해 접근과 제어를 할 수 있다.

RESTfulAPI는 요청(call)이 수행될 때 리소스 상태에 대한 표현을 요청자에게 전송한다.

이때 데이터의 전송을 XML이나 JSON을 이용하며 이런 REST를 사용하는 Software Architecture를 RESTful 아키텍처라 부른다.


REST를 구성하는 스타일 (이것을 지켜야 REST라고 할 수 있다.)

  • client-server 요청이 HTTP를 통해 관리되는 Architecture

  • stateless 요청간 client 정보가 저장X, 각 요청이 분리, 서로 연결 X

  • cache client-server 상호 작용을 간소화하는 캐시 가능 데이터

  • uniform interface 정보가 표준 형식으로 전송되도록 하기 위한 구성 요소 간 통합 인터페이스

    • 요청된 리소스는 식별 가능하며 client에 전송된 표현과 분리되어야한다.

    • 수신한 표현을 통해 클라이언트가 리소스를 조작할 수 있어야 한다.

    • self-descriptive message 메시지는 스스로 설명해야한다.

      즉, client가 정보를 어떻게 처리해야 할지 설명하는 정보가 충분히 포함되어야한다. ex)

      1. GET / HTTP/1.1 이와 같은 메시지는 목적지(HOST)가 없어서 불충분하다.
      2. http://127.0.0.1:8000/products/find_items 동사 X
      3. http:~:8000/products?name="something" query를 이용해 검색
    • hypermedia as the engine of application state(HATEOAS) 클라이언트가 리소스에 액세스한 후 하이퍼링크를 사용해 현재 수행 가능한 기타 모든 작업을 찾을 수 있어야 함.

  • layerd system 요청된 정보를 검색하는 데 관련된 서버(보안, 로드 밸런싱 등을 담당)의 각 유형을 클라이언트가 볼 수 없는 계층 구조로 체계화하는 계층화된 시스템

  • code-on-demand (optional) 요청을 받으면 서버에서 클라이언트로 실행 가능한 코드를 전송하여 클라이언트 기능을 확장할 수 있는 기능.

이중에서 uniform interface가 중요한 이유는 독립적 진화때문이다.


독립적 진화

  • server와 client가 각각 독립적으로 진화한다.
  • server의 기능이 변경되어도 client를 업데이트할 필요가 없다.

결론

Rest api란 결국 개념적인 무언가가 아니라 추상화된 개발자들 사이의 약속과 같은 것이다.

따라서 좋은 프로덕트를 위해선 잘 설계된 Rest api를 사용하는 것이고 그에 따른 약속을 지키기 위해 노력하는 것이라 생각한다.

아래의 개념들은 설계를 할 때 참고할 만한 개념이다.

1. Document

단일 개념 => 파일 하나, 객체 인스턴스, DB row ....

ex) /members/100

2. Collection

서버가 관리하는 리소스 디렉토리

서버가 리소스의 URI을 생성하고 관리한다.

ex) /members

members 안에 GET, POST 등 다양한 http method가 들어올 수 있다.

3. Store

클라이언트가 관리하는 자원 저장소

클라이언트가 리소스의 URI를 알고 관리

ex) /files

4. Controller

document, collection, store로 해결하기 어려운 추가 프로세스를 실행함

동사를 직접 사용한다.

ex) /members/[id]/delete




HTTP




참고 :

https://www.youtube.com/watch?v=RP_f5dMoHFc

https://www.redhat.com/ko/topics/api/what-is-a-rest-api

https://tuhbm.github.io/2019/04/24/architecture/