[Spring] REST API란?

Jin·2023년 9월 6일
0

Spring

목록 보기
1/9
post-thumbnail

1. API란?

  • Application Programming Interface의 줄임말
  • 응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있게 만든 인터페이스
    • 명세서를 통해서 어떤 방식으로 사용하는지 습득 & 요청
    • 여기서 인터페이스는 어떤 장치간 정보를 교환하기 위한 수단이나 방법을 의미
  • API를 사용하면 내부 구현 로직을 알지 못해도 정의되어 있는 기능을 쉽게 사용할 수 있음

2. REST란?

  • Representational State Transfer의 줄임말
    • 자원 상태 전달이라는 뜻
  • 자원의 이름으로 구분하여 해당 자원의 상태를 교환하는 것을 의미
    • 자원의 예) 데이터
  • 서버와 클라이언트의 통신 방법 중 하나
  • HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 자원을 교환
    • 즉, HTTP 통신을 함
    • cf) HTTP Method: Create, Read, Update, Delete

3. REST 특징

  • Server-Client 구조
    • Server: 자원이 있는 쪽
    • Client: 요청하는 쪽
    • 클라이언트와 서버가 독립적으로 분리되어 있어야 함
      • 독립: 자원을 공유하는 교집합 X
  • Stateless
    • 요청 간에 클라이언트 정보가 서버에 저장되지 않음
    • 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리
  • Cacheable
    • HTTP 프로토콜을 그대로 사용 ⇒ HTTP의 특징인 캐싱 기능을 적용
    • 대량의 요청을 효율적으로 처리하기 위해 캐시를 사용
  • 계층화(Layered System)
    • 클라이언트는 서버의 구성과 상관 없이 REST API 서버로 요청
    • 서버는 다중 계층으로 구성될 수 있음(로드밸런싱, 보안 요소, 캐시 등)
  • 인터페이스 일관성(Uniform Interface)
    • 정보가 표준 형식으로 전송되기 위해, 구성 요소간 통합 인터페이스를 제공
    • HTTP 프로토콜을 따르는 모든 플랫폼에서 사용 가능하게끔 설계
      • HTTP 프로토콜만 지켜준다면 언제든 자원의 상태를 변경할 수 있음
  • Code on Demand(Optional)
    • 요청을 받으면 서버에서 클라이언트로 코드 or 스크립트(로직)을 전달항 클라이언트 기능 확장

4. REST의 장점

  • HTTP 표준 프로토콜을 사용하는 모든 플랫폼에서 호환 가능
  • 서버와 클라이언트의 역할을 명확하게 분리
  • 여러 서비스 설계에서 생길 수 있는 문제를 최소화
    • 만약, 어떤 곳은 소켓 통신을 한다 → 그런 것들을 다 받아주면 설계에서 문제가 생길 수 있음
    • HTTP 통신으로만 진행 → 설계에서 발생할 수 있는 문제 최소화

5. REST API란?

  • REST 아키텍처의 조건을 준수하는 어플리케이션 프로그래밍 인터페이스를 뜻함
  • 최근 많은 API가 REST API로 제공되고 있음
  • 일반적으로 REST 아키텍처를 구현하는 웹 서비스를 RESTful 하다고 표현

6. REST API 특징

  • REST 기반으로 시스템을 분산하여 확장성과 재사용성을 높임
    • 계층화 ⇒ 확장성
    • 확장된 서비스가 리소스를 많이 사용하지 않는 것 같을 때, 로드밸런싱 되고 있는 서버를 몇 개 내리고 다른 용도로 사용 가능 ⇒ 재사용성
  • HTTP 표준을 따르고 있어 여러 프로그래밍 언어로 구현할 수 있음

7. REST API 설계 규칙

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

참고 영상
'REST API'에 대해 [ 스프링 부트 (Spring Boot) ]

profile
https://guswls28.tistory.com 💨💨

0개의 댓글