REST
REST란?
- REST란 Representational State Transfer의 약자로 HTTP 네트워크 상의 리소스를 정의하고 해당 리소스를 URI라는 고유의 주소로 접근하는 방식을 의미한다.
- 리소스(Resource) : REST에서 의미하는 리소스란 HTTP 통신을 통해 주고 받을 수 있는 모든 것을 의미한다.(데이터, 문서, 이미지, 동영상 등)
- URI(Uniform Resource Identifier) : 네트워크 상에 있는 특정 리소스를 식별하는 통합 자원 식별자를 의미한다.
- REST는 월드 와이드 웹(www)과 같은 분산 하이퍼 미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식
- 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
- 즉, HTTP 프로토콜을 이용하여 특정 리소스를 식별할 수 있는 고유한 주소를 통해 HTTP Method를 이용하여 작업을 처리하는 방식을 의미한다.
REST 구성 요소
자원 (Resource)
- 웹 서버가 관리하는 모든 것을 의미하며, URI를 통해 특정 리소스를 식별할 수 있다.
- Resource는 Collection과 Element로 구분할 수 있다.
- Collection : 정보 전체를 식별하는 URI를 의미한다.
- localhost:8080/users -> users라는 정보 전체를 식별함.
- Element : 하나의 특정 정보 식별하는 URI를 의미한다.
- localhost:8080/users/1 -> users라는 전체 정보 중 1의 id를 가진 user정보를 식별함.
- Collection : 정보 전체를 식별하는 URI를 의미한다.
자원 조작 (Verb)
- HTTP 프로토콜의 Method를 사용하여 자원을 조작(CRUD)한다.
표현 (Representation)
- Client가 자원의 상태를 조작하는 요청을 하면, Server는 그에 해당하는 적절한 응답을 보낸다.
- Client -> 개인 정보 수정 요청 -> Server -> 수정된 개인 정보 응답(JSON)
- 자원은 보통 TEXT, JSON, XML등 여러 형태 중의 하나로 표현된다.
HTTP Method
HTTP Verb | Action - CRUD | 설명 | 페이로드 유무 | 예시 |
POST | Create | 리소스 생성 | O | 회원 정보 생성 |
GET | Read | 리소스 조회 | X | 회원 정보 조회 |
PUT | Update | 리소스 전체 수정 | O | 회원 정보 수정 |
PATCH | Update | 리소스 일부 수정 | O | 회원 비밀번호 변경 |
DELETE | Delete | 리소스 삭제 | X | 회원 정보 삭제 |
REST의 장단점
장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 별도의 인프라를 구축할 필요가 없다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다. (ex. 웹 브라우저, 모바일, 웹서버 등)
- Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
- REST API 메세지가 의도하는 바를 명확하게 나타내므로 쉽게 파악할 수 있따.
- 여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
- 서버와 클라이언트의 역할을 명확하게 분리한다.
단점
- 표준이 존재하지 않는다.
- HTTP Method가 제한적이다.
REST API
REST API란?
- REST API란 REST의 방식을 통해 리소스에 접근하기 위한 서비스 API를 지칭한다.
REST API 설계 규칙
- '/'는 계층 관계를 나타내는 데에 사용한다.
- https://wonkang.tistory.com/category/Java/Java-basic
- URI의 마지막이 '/'로 끝나지 않아야 한다.
- http://api.canvas.com/shapes/polygons/quadrilaterals/squares
- 동사보다는 명사를 사용하며, 단수형 보다는 복수형을 사용한다.
- URI 경로에서는 소문자를 사용한다.
- 가독성을 위해 공백 또는 구분이 필요한 경우 언더스코어(_)가 아닌 하이픈(-)을 사용한다.
- http://api.example.com/blogs/guy-levin/posts/this-is-my-first-pos
- 파일 확장자는 URI에 포함하지 않는다.
- http://api.college.com/students/3248234/courses/2005/fall.json (X)
- 리소스 간에 연관 관계가 있는 경우
- /리소스명/리소스ID/관계가 있는 다른 리소스 명
RESTful
RESTful이란?
- RESTful이란 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.
- REST API를 제공하는 웹 서비스를 RESTful하다고 할 수 있다.
- REST 원리를 따르는 시스템은 Restful이란 용어로 지칭된다.
RESTful의 목적
- 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것.
- RESTful한 API를 구현하는 근본적인 목적은 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것으로, 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다.
Reference
https://docs.microsoft.com/ko-kr/azure/architecture/best-practices/api-design#what-is-rest
https://dzone.com/articles/7-rules-for-rest-api-uri-design-1
https://itvillage.tistory.com/35
https://sidepower.tistory.com/408
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html