스프링부트 Rest API

HyeonWoo·2020년 12월 27일
0

스프링 & JPA

목록 보기
19/34
post-thumbnail

이번 장에서는 현재 웹에서 사용하는 대부분의 데이터 통신인 REST API에 대해서 알아 보고자 한다.


REST 소개

  • 웹과 같은 분산 하이퍼미디어 시스템에서 사용하는 통신 네트워크 아키텍처, 네트워크 아키텍처의 원리 모음

  • 웹은 전송 방식으로 HTTP를, 식별 방법으로 URI를 사용.
    URI(Uniform Resource Identifiler, 통합 자원 식별자) : 인터넷에서 특정 자원을 나타내는 유일한 주솟값. REST API는 URI를 사용하여 자원을 처리.
    HTTP : 웹에서 GET, POST, PUT, DELETE 등의 메서드를 사용하여 정보를 주고받는 프로토콜

  • REST는 HTTP와 URI의 단순하고 간결한 장점을 계승한 네트워크 아키텍처.


REST 목적

  • 구성요소 상호작용의 규모 확장성
  • 인터페이스의 범용성
  • 구성요소의 독립적인 배포
  • 중간적 구성요소를 이용한 응답 지연 감소, 보안 강화, 레거시 시스템 인캡슐레이션

RESTful 제약 조건

REST의 구현 원칙을 제대로 지키는 시스템

  • 클라이언트 - 서버(client-server)
    이 제약 조건의 기본 원칙은 관심사의 명확한 분리이다. 관심사의 명확한 분리가 선행되면 서버의 구성요소가 단순화되고 확장성이 향상되어 여러 플랫폼을 지원할 수 있음

  • 무상태성(stateless)
    서버에 클라이언트의 상태 정보를 저장하지 않는 것을 말함. 단순히 들어오는 요청만 처리하여 구현을 더 단순화함. 단, 클라이언트의 모든 요청은 서버가 요청을 알아듣는 데 필요한 모든 정보를 담고 있어야 함.

  • 캐시 기능(cacheable)
    클라이언트의 응답을 캐시할 수 있어야 함.
    HTTP의 장점을 그대로 계승한 아키텍처가 REST => HTTP의 캐시 기능도 적용할 수 있음

  • 계층화 시스템(layered system)
    서버는 중개 서버(게이트웨이, 프록시)나 로드 밸런싱, 공유 캐시 등의 기능을 사용하여 확장성 있는 시스템을 구성할 수 있음.

  • 코드 온 디맨드(code on demand)
    클라이언트는 서버에서 자바 애플릿, 자바스크립트 실행 코드를 전송받아 기능을 일시적으로 확장할 수 있음 (이 제약 조건은 선택 가능)

  • 인터페이스 일관성(uniform interface)
    URI(통합 자원 식별자)로 지정된 리소스에 균일하고 통일된 인터페이스를 제공. 아키텍처를 단순하게 분리하여 독립적으로 만들 수 있음

    인터페이스 일관성의 4가지 속성

    • 자원 식별
      ex) http:localhost:8080/resource/1
    • 메시지를 통한 리소스 조작
      ex) content-type: application:json
    • 자기 서술적 메시지
      ex) GET http:localhost:8080/resource/1
    • 애플리케이션 상태에 대한 엔진으로서의 하이퍼미디어
      클라이언트에 응답할 때 단순히 결과 데이터만 제공해주기보다는 URI를 함께 제공해야 한다는 원칙.

REST API 구성 요소

  • 자원(resource) : URI
  • 행위(verb) : HTTP 메서드
  • 표현(representations) : 리소스에 대한 표현

URI 설계

  • 동사를 피하라.( 동사를 표현할 때 HTTP 메서드인 GET, POST, PUT, DELETE 등으로 대체)
    -> 불필요한 동사를 포함하는것을 피하는 것이지 완전히 배제시키는 것은 아님.
  • 복수형을 사용해라

행위 설계

ResourceGET(read)POST(create)PUT(update)DELETE(delete)
/booksbook 목록 보기해당 book 추가--
/books/1ID가 1인 book보기-ID가 1인 book 수정ID가 1인 book 삭제

참고자료
처음배우는 스프링부트 2

profile
학습 정리, 자기 개발을 위한 블로그

0개의 댓글