IT/Front-End

REST API 알아보기

라임웨일 2022. 7. 14. 11:29
반응형

 

💡 REST API 란

REST API는 웹에서 데이터를 전송 및 처리하는 방법을 정의한 인터페이스를 말합니다.. 모든 데이터 구조와 처리방식은 REST에서 URL을 통해 정의되며, 그래서 매우 직관적으로 이해할 수 있습니다. REST API에서 REST는 (Representational State Transfer)의 약자로 소프트웨어 프로그램 아키텍처의 한 형식입니다.

즉, 자원을 이름 (자원의 표현)으로 구분하여 해당 자원의 상태 (정보)를 주고받는 모든 것을 의미하며 월드 와이드 웹 (WWW)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식입니다 REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일입니다.

- REST API 탄생 배경

REST API의 등장은 2000년도에 HTTP의 주요 저자 중 한 사람인 로이 필딩이 그 당시 웹 설계의 우수성에 비해 제대로 사용되지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 Architecture로써 REST를 발표했습니다

 

- REST API의 등장

최근의 서비스 / 애플리케이션의 개발 흐름은 멀티 플랫폼, 멀티 디바이스 시대로 넘어와 있습니다. 단순히 하나의 브라우저만 지원하면 되었던 이전과는 달리, 최근의 서버 프로그램은 여러 웹 브라우저는 물론이며, 아이폰, 안드로이드 애플리케이션과의 통신에 대응할 수 있어야 합니다. 따라서 플랫폼에 맞추어 새로운 서버를 만드는 수고를 들이지 않기 위해 범용적으로 사용성을 보장하는 서버 디자인이 필요하게 되었습니다.


- REST의 구체적인 개념 (HTTP Method)

HTTP URI를 통해 자원을 명시하고, HTTP Method (POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD OPERATION을 적용하는 것을 의미합니다.

✔ REST의 구성

  • 자원(Resource) - URL
  • 행위(Verb) - Http Method
  • 표현(Representations)

1. 자원 (Resource) URL

  • 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재합니다.
  • 자원을 구별하는 ID는 /orders/order_id/1 와 같은 HTTP URI 입니다.

2. 행위 (Verb) - Http Method

  • HTTP 프로토콜의 Method를 사용합니다.
  • HTTP 프로토콜은 GET, POST, PUT, DELETE의 메서드를 제공합니다.

 

이미지 출처:  https://meetup.toast.com/posts/92

3. 표현 (Representaion of Resource)

  • Client가 자원의 상태 (정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답 (Representation)을 보냅니다.
  • REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타낼 수 있으며 현재는 JSON으로 주고 받는 것이 대부분 입니다.

 

👍  Method 심도 있게 살펴보기

✔ GET Method

GET은 보통 조회를 할 때 사용합니다. DB로 생각했을 때는 SELECT에 해당합니다. 예를 들어, 회원 가입한 사용자의 정보를 알고 싶다면, 아래처럼 사용합니다.

GET http://localhost:8080/rest/api/v1/user/1JAVA

 

✔  POST Method

POST는 보통 데이터를 추가할 때 사용합니다. DB로 생각했을 때는 INSERT에 해당하며 회원 가입을 하는 경우, POST 방식으로 사용자의 정보를 함께 전송합니다.

POST http://localhost:8080/rest/api/v1/user
{
    "username": "아무개",
    "password": "1234",
    "email": "test@google.com",
    ...
}

 

보통 생성 과정이 성공적으로 끝나면, 응답 값으로 201 CREATED를 보냅니다. (아래 글 참고, 출처: MSDN)

 

 

✔  PUT Method

PUT은 데이터를 수정할 때 사용합니다. DB로 생각했을 때는 UPDATE에 해당합니다. 사용자의 정보를 수정하고 싶은 경우, 수정하고 싶은 사용자 정보와 함께 PUT 방식으로 요청합니다. (위 POST와 동일한 URL로 요청하지만, HTTP 메서드가 다르기 때문에 다르게 동작.)

PUT http://localhost:8080/rest/api/v1/user/{user_id}

예시: PUT http://localhost:8080/rest/api/v1/user/1
{
    "password": "4321"
}

 

 DELETE Method

DELETE는 데이터를 삭제할 때 사용하며 DB로 생각했을 때는 DELETE에 해당합니다. 사용자의 정보를 지우고 싶은 경우(탈퇴 처리) , DELETE 방식으로 사용자의 ID의 값과 함께 요청합니다.

DELETE http://localhost:8080/rest/api/v1/user/{user_id}

예시: DELETE http://localhost:8080/rest/api/v1/user/1JAVA

 

👉  응답 코드

  • 200 : 클라이언트 요청 정상수행 (응답에 대한 메시지가 포함)
  • 201 : 리소스 생성 요청에 대한 정상처리
  • 202 : 리소스 생성 요청이 비동기적으로 처리될 때 사용
  • 204 : 클라이언트 요청 정상수행 (응답에 대한 메시지 미포함, 보통 삭제요청에 사용)
  • 400 : 클라이언트 요청이 부적절할 때 사용 (부적절한 이유를 응답 Body에 넣어줘야 함)
  • 401 : 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청할 때 사용
  • 403 : 클라이언트가 인증상태와 무관하게 응답하고 싶지 않은 리소스를 요청할 때 사용 (400 사용을 권장)
  • 404 : 클라이언트가 요청한 리소스가 존재하지 않을 때 사용
  • 405 : 클라이언트가 불가능한 메소드를 사용했을 때

 

👉  세부 규칙

  1. 슬래시 구분자 ( / )는 계층 관계를 나타내는데 사용합니다.
  2. URI 마지막 문자로 슬래시 ( / )를 포함하지 않습니다.
    • URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가 다릅니다.
    • 역으로 리소스가 다르면 URI도 달라져야 합니다.
  3.  하이픈 ( - )은 URI 가독성을 높이는데 사용합니다.
  4. 밑줄 ( _ )은 URI에 사용하지 않습니다.
  5. URI 경로에는 소문자가 적합합니다.
    • URI 경로에 대문자 사용은 피하도록 합니다.
  6. 파일확장자는 URI에 포함하지 않는다.
    • REST API 에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않습니다.
    • 대신 Accept Header 를 사용한다.
    • ex) GET: http://restapi.exam.com/orders/2/Accept: image/jpg
  7.  리소스 간에 연관 관계가 있는 경우
    • /리소스명/리소스ID/관계가 있는 다른 리소스 명
    • ex) GET: /users/2/orders (일반적으로 소유의 관계를 표현할 때 사용)

 

😣 REST의 단점들

  1. REST는 point-to-point 통신모델을 기본으로 하며 서버와 클라이언트가 연결을 맺고 상호작용해야하는 어플리케이션의 개발에는 적당하지 않습니다.
  2. REST는 URI, HTTP 이용한 아키텍처링 방법에 대한 내용만을 담고 있고 보안과 통신규약 정책 같은 것은 전혀다루지 않습니다. 따라서 개발자는 통신과 정책에 대한 설계와 구현을 도맡아서 진행해야 합니다.
  3. HTTP에 상당히 의존적이며 REST는 설계 원리이기 때문에 HTTP와는 상관없이 다른 프로토콜에서도 구현할 수 있기는 하지만 자연스러운 개발이 힘듭니다. 다만 REST를 사용하는 이유가 대부분의 서비스가 웹으로 통합되는 상황이기에 큰 단점이 아니게 되었습니다.
  4. CRUD 4가지 메소드만 제공한다. 대부분의 일들을 처리할 수 있지만, 4가지 메소드 만으로 처리하기엔 모호한 표현이 있습니다.

 

출처 : 

반응형