Pink Spider/REST API

Created Thu, 03 Apr 2025 18:02:29 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
2050 Words 9 min

Rest API란 무엇이며, RestFul 하다는 건 어떤 의미인가?

REST API와 RESTful의 개념은 웹 개발에서 자주 등장하지만, 처음 접하면 헷갈릴 수 있어요. 쉽게 풀어서 설명해볼게요.


🔹 REST API란?

REST는 “REpresentational State Transfer"의 약자예요. 2000년에 로이 필딩(Roy Fielding)이 논문에서 제안한 웹 아키텍처 스타일 중 하나죠.

즉, REST API는 이 REST 원칙에 따라 설계된 웹 API를 말해요.


🔹 REST의 핵심 개념

REST는 다음의 6가지 제약 조건을 기반으로 해요:

  1. 클라이언트-서버 구조

    • 클라이언트(브라우저, 앱)와 서버는 서로 분리되어 역할을 나눔.
  2. 무상태성 (Stateless)

    • 서버는 클라이언트의 요청 간 상태를 저장하지 않음. 매 요청마다 필요한 정보가 다 포함되어야 해요.
  3. 캐시 처리 가능

    • 응답은 캐시가 가능해야 함. 클라이언트 성능 향상.
  4. 계층화 구조

    • 클라이언트는 중간 서버가 있는지 몰라도 됨.
  5. 인터페이스 일관성 (Uniform Interface)

    • 자원에 접근하는 방식이 일관되어야 함.
  6. Code on Demand (선택 사항)

    • 서버는 클라이언트에게 실행할 코드를 전달할 수 있음 (잘 안 씀).

🔹 RESTful 하다는 건?

**“RESTful하다”**는 표현은, 위의 REST 원칙을 얼마나 잘 지켜서 구현했는가를 말해요.

예시로 이해해볼게요:

✅ RESTful한 API 예시

동작 HTTP Method URL 설명
글 목록 조회 GET /posts 전체 글 조회
글 하나 조회 GET /posts/1 ID가 1인 글 조회
글 작성 POST /posts 글 생성
글 수정 PUT /posts/1 ID가 1인 글 전체 수정
글 삭제 DELETE /posts/1 ID가 1인 글 삭제

이처럼 HTTP Method와 URL을 일관되게 사용하는 게 RESTful한 API의 특징이에요.

❌ RESTful하지 않은 API 예시

  • /getAllPosts, /deletePost?id=1, /createNewPost
    → 행위(동사)가 URL에 포함되고 HTTP Method와 역할이 맞지 않음

🔸 요약하면?

  • REST API: REST 원칙을 따르는 API
  • RESTful: 그 원칙을 얼마나 잘 지켜서 구현했는가
  • RESTful한 API는 → 이해하기 쉽고, 일관성 있고, 확장성 높고, 클라이언트-서버가 분리된 구조를 가짐

HATEOAS와 Self-descriptive messages 에 대하여


🔹 Self-descriptive Messages (자체 기술 메시지)

👉 뜻

REST에서 각 요청과 응답은 그 자체만으로 이해될 수 있어야 한다는 원칙이에요.

즉, 서버는 요청을 받고 나서 추가 맥락 없이도 무슨 일을 해야 하는지 알 수 있어야 하고, 클라이언트는 응답만 보고 다음에 무엇을 해야 할지 유추할 수 있어야 해요.

✅ 예시

GET /users/123 HTTP/1.1
Host: api.example.com
Accept: application/json

서버 응답:

{
  "id": 123,
  "name": "Alice",
  "email": "alice@example.com"
}

위 응답은 JSON 포맷으로 되어 있고, 어떤 정보가 담겼는지 명확하게 설명되어 있죠.
즉, “응답만 봐도 내용이 뭔지 알 수 있다” → Self-descriptive 메시지라는 거예요.


🔹 HATEOAS (Hypermedia As The Engine Of Application State)

👉 뜻

REST 시스템에서 클라이언트는 서버로부터 받은 응답의 링크를 통해 다음 행동을 결정해야 한다는 개념이에요.
말이 어려운데, 쉽게 말하면:

“응답 안에 다음에 뭘 할 수 있는지 링크를 줘서, 클라이언트가 직접 경로를 알아내지 않아도 되게 한다.”

✅ 예시 (사용자 조회 응답에 HATEOAS 적용)

{
  "id": 123,
  "name": "Alice",
  "email": "alice@example.com",
  "_links": {
    "self": { "href": "/users/123" },
    "update": { "href": "/users/123", "method": "PUT" },
    "delete": { "href": "/users/123", "method": "DELETE" },
    "posts": { "href": "/users/123/posts" }
  }
}

여기서 _links는 바로 HATEOAS의 핵심이에요.
클라이언트는 이 정보를 보고 “아! 이 사용자에 대해 수정도 가능하고, 글도 볼 수 있네” 라는 걸 API 문서를 몰라도 알 수 있어요.


🔸 요약

개념 설명
Self-descriptive 요청과 응답이 스스로 어떤 의미인지 설명할 수 있어야 함
HATEOAS 응답 안에 다음 행동을 위한 링크/정보가 들어 있어야 함 (하이퍼미디어 중심 설계)

이 둘은 REST 아키텍처의 일관성, 유연성, 확장성을 높이는 데 큰 역할을 해요.
다만 실제 서비스에서는 HATEOAS까지 구현하는 경우는 드물기도 해요. 너무 무거워지기도 하고, 모바일이나 SPA 환경에서는 URL을 클라이언트가 이미 알고 있는 경우가 많거든요.


Restful 한 api를 제공하는 대표 사례


1. GitHub API

  • 설명: GitHub는 개발자들이 코드를 호스팅하고 협업할 수 있는 플랫폼입니다. GitHub의 RESTful API를 통해 리포지토리, 이슈, 사용자 정보 등 다양한 데이터를 조회하고 조작할 수 있습니다.
  • API 문서: https://docs.github.com/en/rest

2. Twitter API

  • 설명: Twitter는 소셜 네트워크 서비스로, 트윗, 사용자, 해시태그 등의 데이터를 RESTful API를 통해 제공합니다. 이를 통해 트윗 작성, 검색, 사용자 정보 조회 등의 기능을 구현할 수 있습니다.
  • API 문서: https://developer.twitter.com/en/docs/twitter-api

3. Google Maps API

  • 설명: Google Maps는 지도 서비스로, RESTful API를 통해 지도 이미지, 장소 정보, 경로 안내 등의 기능을 제공합니다. 이를 통해 위치 기반 서비스를 개발할 수 있습니다.
  • API 문서: https://developers.google.com/maps/documentation

4. Stripe API

  • 설명: Stripe는 온라인 결제 처리 플랫폼으로, RESTful API를 통해 결제, 환불, 구독 관리 등의 기능을 제공합니다. 이를 통해 전자상거래 사이트나 앱에서 결제 시스템을 통합할 수 있습니다.
  • API 문서: https://stripe.com/docs/api

5. Spotify API

  • 설명: Spotify는 음악 스트리밍 서비스로, RESTful API를 통해 음악 트랙, 앨범, 아티스트 정보 등을 제공합니다. 이를 통해 음악 검색, 재생 목록 관리 등의 기능을 앱에 통합할 수 있습니다.
  • API 문서: https://developer.spotify.com/documentation/web-api/

6. NASA Open APIs

  • 설명: 미국 항공우주국(NASA)은 다양한 우주 관련 데이터를 RESTful API 형태로 공개하고 있습니다. 예를 들어, Astronomy Picture of the Day(API)를 통해 매일 새로운 우주 사진과 설명을 제공받을 수 있습니다.
  • API 문서: https://api.nasa.gov/

7. OpenWeatherMap API

  • 설명: OpenWeatherMap은 전 세계 날씨 데이터를 제공하는 서비스로, RESTful API를 통해 현재 날씨, 예보, 과거 날씨 데이터 등을 제공합니다.
  • API 문서: https://openweathermap.org/api