SpringBoot

[SpringBoot] API

wwxs 2024. 10. 18. 11:10

API (Application Programming Interface)

  • 응용프로그램(Application)이 서로 통신할 수 있도록 해주는 인터페이스
  • 소프트웨어 간의 중재자 역할
  • 서로 다른 소프트웨어 시스템이 데이터를 주고받거나 기능을 호출하는 방식

 

API 목적

  • 재사용성 - 이미 작성된 기능을 여러 프로그램에서 재사용 가능
  • 유지보수성 - 코드 변경이 API에 의해 중앙에서 관리, 다른 기능의 영향을 최소화

API의 구성

  • 엔트포인트(Endpoint) : API가 연결되는 특정 URL주소
  • 메서드(Method) : API가 수행하는 작업, HTTP 메서드를 주로 사용
    • GET, POST, PUT, DELETE
  • Request : 클라이언트가 API로 보내는 요청
  • Response : 서버가 API 요청에 대한 응답으로 보내는 데이터

HTTP (API)

  • 웹 환경에서 정보를 주고받기 위한 프로토콜
  • HTTP라는 통신 규약으로 소통하는 API

 

REST API

  • REST (Representatinal state Transfer)
  • HTTP 프로토콜을 기반으로 클라이언트와 서버 간의 상호 작용을 규정하는 아키텍처 스타일
  • 자원의 표현으로 상태를 전달하는 아키텍처 
    • 아키텍처 스타일: 네트워크 자원을 정의하고 처리하는 방법 전반

 

REST의 6가지 원칙

  • 클라이언트 - 서버 구조: 클라이언트와 서버가 명확하게 분리
  • 무상태성: 서버는 클라이언트의 상태를 저장하지 않는다, 요청은 독립적으로 처리
  • 캐시 가능성: 응답은 캐시될 수 있어야 한다.
  • 계층화 시스템: 클라이언트는 여러 계층의 중개 서버와 통신 가능
  • 일관된 인터페이스: API가 일관된 방식으로 설계되어야 함
  • 코드 온 디멘드: (선택적)

REST API 설계의 구성

  • URI로 자원을 표현
    • URI는 통합 자원 식별자로 주소에 식별자가 있으면 URI
    • URL은 리소스(자원)의 주소를 나타냄

 

RESTful API

  • URI로 자원을 표현하는데 집중하고, 자원의 상태(행위)에 대한 정의는 HTTP Method로 하는 것이 REST하게 API를 설계하는 규칙
  • URI로 자원(리소스)를 표현
  • 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현

 

REST API 사용 방법

  • URL에는 동사를 쓰지 않고, 자원을 표시
    • 더보기
      EX) 상품 리소스에서 상품 코드가 1004인 상품의 정보를 가져오는 URL
      : /products/1004 (O)
      : /get-product?product_id=1004 (X)
  • 동사는 HTTP 메서드 사용 (CRUD)
    • POST: 만들기(CREATE)
    • GET: 읽기(READ)
    • PUT: 수정(UPDATE)
    • DELETE: 삭제(DELETE)

 

더보기

PUT vs FATCH

1) PUT

  • 전체 리소스를 수정, 전체를 대체하는 방식으로 동작
  • 기존 리소스 전체를 새로운 값으로 덮어쓰는 개념
  • 리소스 일부만 제공, 제공되지 않은 정보는 null 또는 기본값으로 설정
  • 멱동성을 가짐(Idempotent)
    • 멱동성: 여러번 결과를 보내도 결과가 동일한 경우, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 뜻한다.

2) PATCH

  • 리소스의 일부만 수정하는데 사용
  • 전체 리소스를 보내는 대신 수정할 부분만 전송
  • 기존 리소스 데이터는 유지, 제공된 부분만 업데이트 된다
  • 멱등성을 가지지 않음
    • 여러 번 보내면 동일한 결과를 보장하지 않음

 

HTTP 추가 구조

1. 헤더(Header)

  • 요청이나 응답에 대한 추가 정보
    • EX) 메타데이터: 데이터의 타입, 보안 등을 명시

2. 바디(Body, 본문)

  • 요청이나 응답의 실제 데이터가 포함