[SpringBoot] REST API란?

    1. API란?

    • Application Programming Interface
    • 응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있도록 만든 인터페이스
    • API를 사용하면 내부 구현 로직을 알지 못해도 정의되어 있는 기능을 쉽게 사용할 수 있음
    • Interface - 장치 간 정보를 교환하기 위한 수단이나 방법 (마우스, 키보드 등)

     

    2. REST란?

    • Representatinal State Transfer
    • 자원의 이름으로 구분하여 해당 자원의 상태를 교환하는 것
    • 자원의 표현에 의한 상태 전달
    1) 자원의 표현
    자원: 해당 소프트웨어가 관리하는 모든 것
    자원의 표현: 그 자원을 표현하기 위한 이름

    2) 상태 전달
    데이터가 요청되어지는 시점에서 자원의 상태를 전달
    JSON 혹은 XML을 통해 데이터를 주고받는 것이 대부분
    • 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 형식
    • REST는 HTTP 프로토콜을 그대로 활용
    • HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것

     

    <CRUD와 HTTP 메서드>

    구분 의미 역할 HTTP 메서드
    C Create 리소스를 생성 POST
    R Read 리소스를 조회 GET
    U Update 리소스를 수정 PUT
    D Delete 리소스를 삭제 DELETE

     

    2-1. REST 특징

    1) Server-Client 구조

    • 자원이 있는 쪽이 Server, 요청하는 쪽이 Client
    • 클라이언트와 서버가 독립적으로 분리되어 있어야 함

     

    2) Stateless

    • 요청 간에 클라이언트 정보가 서버에 저장되지 않음
    • 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리

     

    3) Cacheable

    • HTTP 프로토콜을 그대로 사용하기 때문에 HTTP의 특징인 캐싱 기능을 적용
    • 대량의 요청을 효율적으로 처리하기 위해 캐시를 사용

     

    4) 계층화

    • 클라이언트는 서버의 구성과 상관 없이 REST API 서버로 요청
    • 서버는 다중 계청으로 구성될 수 있음

     

    5) Code on Demand (Optional)

    • 요청을 받으면 서버에서 클라이언트로 코드 또는 스크립트(로직)을 전달하여 클라이언트 기능 확장

     

    6) 인터페이스 일관성 (Uniform Interface)

    • 정보가 표준 형식으로 전송되기 위해 구성 요소 간 통합 인터페이스 제공
    • HTTP 프로토콜을 따르는 모든 플랫폼에서 사용 가능하게끔 설계

     

    2-2. REST의 장점

    • HTTP 표준 프로토콜을 사용하는 모든 플랫폼에서 호환 가능
    • 서버와 클라이언트의 역할을 명확하게 분리
    • 여러 서비스 설계에서 생길 수 있는 문제를 최소화

     

    3. REST API란?

    • REST 기반으로 서비스 API를 구현한 것
    • 주소(URL)와 메서드(Method)로 구분하고, 응답으로 뷰를 제외한 데이터만 반환하는 방식
    • 일반적으로 JSON 형식으로 표현

     

    3-1. REST API의 특징

    • REST 기반으로 시스템을 분산하여 확장성과 재사용성을 높임
    • HTTP 표준을 따르고 있어 여러 프로그래밍 언어로 구현할 수 있음

     

    3-2. REST API 설계 규칙

    • 웹 기반의 REST API를 설계하는 경우에는 URI를 통해 자원을 표현해야 함
    • 자원에 대한 조작은 HTTP Method(CRUD)를 통해 표현해야 함
      : URI에 행위가 들어가면 안 됨
      : Header를 통해 CRUD를 표현하여 동작을 요청해야 함
    • 메시지를 통한 리소스 조작
      : Header를 통해 content-type을 지정해 데이터 전달
      : 대표적으로 HTML, XML, JSON, TEXT가 있음
    • URI에는 소문자를 사용
    • Resource의 이름이나 URI가 길어지는 경우 하이픈(-)을 통해 가독성을 높일 수 있음
    • 언더바(_)는 사용하지 않음
    • 파일 확장자를 표현하지 않음

     

    4. REST API 성숙도 모델

    출처: https://jaehoney.tistory.com/176

    1) Level 0

    • HTTP를 원격 호출을 위한 전송 시스템으로 사용하는 경우
    • HTTP Method는 반드시 POST
    • 실질적으로 수행하고자 하는 내용은 본문에 포함하게 됨
    기능 HTTP Method
    CREATE POST
    READ POST
    UPDATE POST
    DELETE POST

     

    2) Level 1

    • 리소스의 개념을 도입함
    • 하나의 포인트로 보내는 것이 아니라 요청마다 다른 리소스를 사용하게 됨
    • HTTP Method 중 GET과 POST를 사용함
    기능 HTTP Method
    CREATE POST
    READ GET
    UPDATE POST
    DELETE POST

     

    3) Level 2

    • 4가지 HTTP Method를 사용해서 CRUD를 표현하고, StatusCode도 활용해 반환함
    기능 HTTP Method
    CREATE POST
    READ GET
    UPDATE PUT
    DELETE DELETE

    4) Level 3

    • API 서비서에 진입하면 어떤 API를 가지고 있는지를 알려 주는 기능을 구현한 것
    • GET /api/  ———결과———> “/api/users”, “/api/products”, …(어떤 기능을 구현할 수 있는지 함께 출력)

    'Spring' 카테고리의 다른 글

    [Spring] Swagger 라이브러리  (0) 2023.04.06
    [Spring] MVC 패턴  (0) 2023.04.05
    [Spring] 싱글톤 패턴  (0) 2023.04.04
    [Spring] 빌드 관리 도구  (0) 2023.04.04
    스프링(Spring), 스프링부트(SpringBoot)란?  (0) 2023.04.04

    댓글