REST API 알아보기
💡 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의 메서드를 제공합니다.
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 : 클라이언트가 불가능한 메소드를 사용했을 때
👉 세부 규칙
- 슬래시 구분자 ( / )는 계층 관계를 나타내는데 사용합니다.
- URI 마지막 문자로 슬래시 ( / )를 포함하지 않습니다.
- URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가 다릅니다.
- 역으로 리소스가 다르면 URI도 달라져야 합니다.
- 하이픈 ( - )은 URI 가독성을 높이는데 사용합니다.
- 밑줄 ( _ )은 URI에 사용하지 않습니다.
- URI 경로에는 소문자가 적합합니다.
- URI 경로에 대문자 사용은 피하도록 합니다.
- 파일확장자는 URI에 포함하지 않는다.
- REST API 에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않습니다.
- 대신 Accept Header 를 사용한다.
- ex) GET: http://restapi.exam.com/orders/2/Accept: image/jpg
- 리소스 간에 연관 관계가 있는 경우
- /리소스명/리소스ID/관계가 있는 다른 리소스 명
- ex) GET: /users/2/orders (일반적으로 소유의 관계를 표현할 때 사용)
😣 REST의 단점들
- REST는 point-to-point 통신모델을 기본으로 하며 서버와 클라이언트가 연결을 맺고 상호작용해야하는 어플리케이션의 개발에는 적당하지 않습니다.
- REST는 URI, HTTP 이용한 아키텍처링 방법에 대한 내용만을 담고 있고 보안과 통신규약 정책 같은 것은 전혀다루지 않습니다. 따라서 개발자는 통신과 정책에 대한 설계와 구현을 도맡아서 진행해야 합니다.
- HTTP에 상당히 의존적이며 REST는 설계 원리이기 때문에 HTTP와는 상관없이 다른 프로토콜에서도 구현할 수 있기는 하지만 자연스러운 개발이 힘듭니다. 다만 REST를 사용하는 이유가 대부분의 서비스가 웹으로 통합되는 상황이기에 큰 단점이 아니게 되었습니다.
- CRUD 4가지 메소드만 제공한다. 대부분의 일들을 처리할 수 있지만, 4가지 메소드 만으로 처리하기엔 모호한 표현이 있습니다.
출처 :