안녕하세요. Kim.YJ 입니다.

이번 포스팅은 API의 한 종류라고 볼수있는,
REST API 에 대해 자세히 알아 보겠습니다.

REST API는 오늘날 가장 널리 사용되는 API 설계 스타일로,
웹 서비스와 클라우드 환경에 최적화되어 있습니다.


[ REST API란? ]

/assets/images/REST_API.png

REST API는 HTTP 프로토콜을 기반으로 클라이언트와 서버 간에 리소스를 교환하기 위해 설계된 아키텍처 스타일입니다.

REST는 Representational State Transfer의 약자로, 리소스를 표현하고 상태를 전송하는 방식을 의미합니다.


REST의 주요 원칙

REST API는 다음과 같은 원칙을 따릅니다.

1. 리소스 기반 (Resource-Based)
  • 모든 리소스는 고유한 URI로 식별됩니다.
    • 예: https://api.example.com/users/1
  • 리소스는 데이터나 기능의 논리적 표현을 나타냅니다.
2. HTTP 메서드 활용

REST API는 HTTP 메서드를 사용하여 리소스를 처리합니다:

  • GET: 리소스 조회
  • POST: 리소스 생성
  • PUT: 리소스 전체 수정
  • PATCH: 리소스 일부 수정
  • DELETE: 리소스 삭제
3. 무상태성 (Stateless)
  • 서버는 클라이언트의 상태를 저장하지 않습니다.
  • 각 요청은 필요한 모든 정보를 포함해야 합니다(예: 인증 토큰).
4. 데이터 형식 (Representation)
  • 리소스는 다양한 형식(JSON, XML, HTML 등)으로 표현될 수 있으며, 일반적으로 JSON이 많이 사용됩니다.
5. 캐시 가능성 (Cacheability)
  • HTTP 캐싱 메커니즘을 활용하여 응답 데이터를 캐싱할 수 있습니다.
  • 이를 통해 네트워크 성능이 개선됩니다.

REST API의 구조

REST API는 클라이언트-서버 아키텍처로 동작하며, 다음과 같은 구성 요소를 포함합니다.

1. 클라이언트
  • 브라우저, 모바일 앱, 서버 등.
2. 서버
  • 클라이언트 요청을 처리하고 데이터나 리소스를 반환.

REST API의 예제

1. 리소스 URL 예시
  • 사용자 정보 조회: GET /users
  • 특정 사용자 조회: GET /users/{id}
  • 사용자 생성: POST /users
  • 사용자 정보 수정: PUT /users/{id}
  • 사용자 삭제: DELETE /users/{id}
2. JSON 응답 예시
{
  "id": 1,
  "name": "Kim.YJ",
  "email": "Kim.YJ@example.com"
}

REST API의 장점

1. 표준화된 HTTP 프로토콜 사용
  • HTTP 메서드와 상태 코드를 활용하여 개발과 유지보수가 간편합니다.
2. 플랫폼 독립적
  • 모든 HTTP를 지원하는 클라이언트에서 사용 가능.
3. 유연성과 확장성
  • 다양한 데이터 형식 지원(JSON, XML 등).
4. 캐싱 가능
  • 네트워크 트래픽을 줄이고 성능을 향상시킬 수 있음.

REST API의 단점

1. 무상태성으로 인해 요청마다 완전한 정보가 포함되어야 하므로 오버헤드가 발생할 수 있음.
2. 복잡한 요청(예: 대규모 데이터 처리)에 대해 최적화가 어려울 수 있음.
3. 실시간 양방향 통신(WebSocket)에 비해 제한적.

REST API와 다른 API 스타일 비교

구분 REST API SOAP API GraphQL
프로토콜 HTTP HTTP, SMTP, TCP HTTP
데이터 포맷 JSON, XML XML JSON
유연성 높음 낮음 매우 높음
상태 관리 무상태 (Stateless) 상태 관리 가능 클라이언트 관리 가능

REST API 사용 사례

  • 웹 애플리케이션: Twitter, Facebook 등.
  • 모바일 앱: 백엔드 서버와 통신.
  • IoT: 장치 데이터 전송 및 수집.




지금까지 API에 대해 포스팅을 하였습니다.

도움이 되는 포스팅이었길 바랍니다.

다음 포스팅은 더 유익한 정보로 찾아뵙겠습니다.
감사합니다!

태그: ,

카테고리:

업데이트: