[네트워크] RESTful API의 개념과 활용

2 minute read

이번 글에서는 RESTful API의 개념과 활용 방법에 대해 알아보겠습니다.

1. HTTP (HyperText Transfer Protocol, 하이퍼텍스트전송규약)

HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜입니다.

HTTP를 통해 전달되는 자료는 http:로 시작하는 URL(인터넷 주소)로 조회할 수 있습니다.


2. REST (Representational State Transfer)

월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식으로서, 네트워크 아키텍처 원리의 모음입니다.

여기서 ‘네트워크 아키텍처 원리’란 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫습니다.

그리고 REST 제한을 따르는 웹 서비스를 RESTful 하다고 말합니다.


3. REST 아키텍처에 적용되는 6가지 제한 조건

  • 인터페이스 일관성 : 일관적인 인터페이스로 분리되어야 한다.

  • 무상태(Stateless): 각 요청 간 클라이언트의 콘텍스트가 서버에 저장되어서는 안 된다.

  • 캐시 처리 가능(Cacheable): 클라이언트는 응답을 캐싱할 수 있어야 한다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능합니다.

  • 계층화(Layered System): 클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지를 알 수 없다. 중간 서버는 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상시키는 데 유용하다.

  • 클라이언트/서버 구조 : 아키텍처를 단순화시키고 작은 단위로 분리(decouple)함으로써 클라이언트-서버의 각 파트가 독립적으로 개선될 수 있도록 해준다.

  • Code on demand (optional) - 자바 애플릿이나 자바스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있다.


4. API의 의미

소프트웨어끼리 지정된 형식으로 요청, 명령을 받을 수 있는 형식을 말합니다.


5. RESTful API의 구성

  • 자원(RESOURCE) - URI
  • 행위(Verb) - HTTP METHOD
  • 표현(Representations)

자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE 등)로 표현합니다.

Method만으로 어떤 기능을 하는 API인지 구분할 수 있게 작성합니다.

Method 내용
POST POST를 통해 해당 URI를 요청하면 리소스를 생성합니다.
GET GET를 통해 해당 리소스를 조회합니다.
PUT PUT를 통해 해당 리소스를 수정합니다.
DELETE DELETE를 통해 리소스를 삭제합니다.


PUT, PATCH Method는 다음과 같은 차이가 있습니다.

PUT: 정보를 통째로 갈아끼울 때

PATCH: 정보를 일부만 수정할 때


6. URI 설계 시 주의할 점

  • 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용합니다.
  • URI 마지막 문자로 슬래시(/)를 포함하지 않습니다.
  • 하이픈(-)은 URI 가독성을 높이는데 사용하고 밑줄(_)은 URI에 사용하지 않습니다.
  • URI 경로에는 소문자만을 사용합니다.
  • 파일 확장자는 URI에 포함시키지 않습니다.


7. 리소스 간의 관계를 표현하는 방법

REST 리소스 간에는 연관 관계가 있을 수 있고, 이런 경우 다음과 같은 표현방법으로 사용합니다.

    /리소스명/리소스 ID/관계가 있는 다른 리소스명

    ex)    GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)

만약에 관계명이 복잡하다면 이를 서브 리소스에 명시적으로 표현하는 방법이 있습니다.

예를 들어 사용자가 ‘좋아하는’ 디바이스 목록을 표현해야 할 경우 다음과 같은 형태로 사용될 수 있습니다.

    GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)


8. 자원을 표현하는 Collection과 Document

CollectionDocument에 대해 이해하면 URI 설계가 한 층 더 쉬워집니다.

Document는 한 문서 혹은 한 객체를 의미하고, Collection은 문서들의 집합, 객체들의 집합을 의미합니다. 컬렉션과 도큐먼트는 모두 리소스라고 표현할 수 있으며, URI에 표현됩니다. 예를 살펴보도록 하겠습니다.

    http:// restapi.example.com/sports/soccer

위의 URI는 sports라는 Collection과 soccer라는 Document로 표현되고 있습니다.

    http:// restapi.example.com/sports/soccer/players/13

위의 URI는 sports, players Collection과 soccer, 13(13번인 선수)를 의미하는 Document로 URI가 이루어지게 됩니다. 여기서 중요한 점은 Collection은 복수, Document는 단수 사용하고 있다는 점입니다.


9. HTTP Status Code

RESTful API에서는 리소스에 대한 응답을 잘 정의하여야 합니다. 대표적인 상태코드는 다음과 같습니다.

상태코드 내용
200 클라이언트의 요청을 정상적으로 수행함
201 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨(POST를 통한 리소스 생성)


상태코드 내용
400 Bad Request, 잘못된 요청
401 Unauthorized, 권한 없이 요청. Authorization 헤더가 잘못된 경우
  (로그인 하지 않은 유저가 로그인 했을 때, 요청 가능한 리소스를 요청했을 때)
403 Forbidden, 사용자의 권한으로 리소스를 사용할 수 없음
  (403 보다는 400이나 404를 사용할 것을 권고. 403 자체가 리소스가 존재한다는 뜻이기 때문에)
404 Not Found (실패, 데이터가 있어야 하나 없음)
405 Method Not Allowed, 허용되지 않은 메서드


상태코드 내용
301 클라이언트가 요청한 리소스에 대한 URI가 변경 되었을 때 사용하는 응답 코드
  (응답 시 Location header에 변경된 URI를 적어 줘야 합니다)
500 서버에 문제가 있을 경우


참고자료

  1. REST API 제대로 알고 사용하기

  2. (위키백과) HTTP

  3. (위키백과) REST