REST 와 RESTful
REST(Representational State Transfer) 란 무엇일까?
REST는 분산 시스템을 위한 아키텍쳐 스타일 중 하나이다. 리소스를 표현하고 해당 리소스에 대한 상태를 전송하는 데 사용된다. 웹 서비스의 디자인에 널리 사용되며, 클라이언트와 서버 간의 통신을 위한 규칙과 제약을 정의한다.
REST의 주요 특징
1. Client-Server Architecture (클라이언트-서버 아키텍쳐)
클라이언트와 서버가 서로 독립적으로 개발되고 확장될 수 있도록 설계된다. 이를 통해 서버와 클라이언트의 역할을 분리하여 시스템의 유연성을 향상시킨다.
2. Statelessness (무상태성)
각 요청은 클라이언트의 모든 정보를 포함하며, 서버에서 클라이언트의 상태를 유지하지 않는다. 이는 서버측의 부하를 줄이고 확장성을 향상시킨다.
3. Cacheability (캐시 가능성)
HTTP 프로토콜을 사용하여 데이터를 캐싱할 수 있도록 한다. 이는 서버의 부하를 줄이고 네트워크 성능을 향상시킨다.
4. Uniform Interface (일관된 인터페이스)
리소스에 대한 표현과 상호작용 방법이 일관성 있게 정의되어야 한다. 이를 통해 시스템의 분리성을 유지하고 상호 운용성을 향상시킨다.
5. Layered System (계층화 시스템)
클라이언트는 서버와 직접 통신하는 대신, 중간에 프록시나 캐시 서버 등을 통해 통신할 수 있다. 이는 시스템의 확장성과 보안을 향상시킨다.
REST의 요소
1. 리소스(Resource)
데이터를 나타내는 개체이다,. 모든 리소스는 고유한 URI(Uniform Resource Identifier)로 식별된다.
2. 메서드(Method)
HTTP 메서드 (GET,POST,PUT,DELETE 등)를 사용하여 리소스에 대한 행동을 정의한다.
3. 메시지(Message)
클라이언트와 서버 간의 통신에 사용되는 데이터이다. 일반적으로 JSON 또는 XML 형식으로 표현된다.
4. 표현(Representation)
클라이언트가 리소스에 접근할 때 얻는 데이터의 형식을 나타낸다. 일반적으로 JSON 또는 XML 형식으로 표현된다.
요약하자면 REST는 웹 서비스 및 분산 시스템의 디자인에 널리 사용되며, 간단하고 유연한 아키텍쳐 스타일을 제공하여 시스템의 확장성과 상호 운용성을 향상시킨다.
RESTful
RESTful은 REST 아키텍쳐 스타일을 따르는 웹 서비스를 설계하고 구현하는 방법을 의미한다. 즉 RESTful 한 웹 서비스는 REST의 원리와 제약을 준수하여 개발된 웹 서비스를 말한다. 클라이언트와 서버 간의 상호 작용을 위해 HTTP 프로토콜을 기반으로 하며, 자원을 표현하고 그 상태를 전송하기 위해 표준 HTTP 메서드 (GET,POST,PUT,DELETE 등)를 사용한다.
RESTful 웹 서비스의 장점
1. 간결한 인터페이스
HTTP 프로토콜을 사용하여 간단하고 직관적인 API 를 제공한다.
2. 유연성
다양한 플랫폼 및 기기에서 사용할 수 있으며, 다양한 데이터 형식을 지원한다 ex) 웹, 모바일 등 여러 시스템에서 사용 가능
3. 확장성
클라이언트와 서버 간의 분리로 확정성이 향상된다.
4. 상호 운용성
다른 시스템과의 통합이 쉽고 간단하다
5. 자유로운 사용
웹 기술과 상호 운용이 용이하므로 다양한 언어와 프레임 워크로 개발할 수 있다.
그렇다면 예시를 통해 REST API 에 대해서 알아보자
REST API
REST API 설계 시 가장 중요한 항목은 다음의 2가지로 요약할 수 있다.
1. URI는 정보의 자원을 표현해야 한다.
2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE) 로 표현한다.
- URI는 정보의 자원을 표현해야 한다. *리소스명은 동사보다는 명사를 사용해야 한다.
GET /members/delete/1
위와 같은 방식은 REST를 제대로 적용하지 않은 URI이다. URI는 자원을 표현하는데 중점을 두어야 한다. 행위에 대한 표현이 들어가서는 안된다.
자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE) 로 표현한다,.
위의 잘못 된 URI를 HTTP Method를 통해 수정해 보면
DELETE /members/1
이와 같이 수정할 수 있다.
어떠한 정보를 가져올때는 GET, 회원 추가, 수정 등 행위를 표현하고자 할 때는 POST Method를 사용하여 표현할 수 있다.
회원정보를 가져오는 URI
GET /members/show/1 (x)
GET /members/1 (o)
회원을 추가할 때
GET /members/insert/2 (x) - GET 메서드는 리소스 생성에 맞지 않다.
POST /members/2 (o)
제품관리
GET /products -- 모든 제품 목록을 가져온다
GET /products/{id} -- 특정 제품의 정보를 가져온다
POST /products -- 새로운 제품을 생성한다
PUT /products/{id} -- 특정 제품의 정보를 업데이트한다
DELETE /products/{id} -- 특정 제품을 삭제한다
URI 설계 시 주의할 점
1. 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용한다.
2. URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
3. 하이픈(-)은 URI 가독성을 높이는데 사용 (불가피하게 긴 URI 경로를 가지게 된 경우)
4. 밑줄(_)은 URI에 사용하지 않는다.
5. URI 경로에는 소문자가 적합하다.
6. 파일 확장자는 URI에 포함시키지 않는다. (Accept Header 를 사용한다)
HTTP 응답코드