자원 지향(Resource-Oriented)
- REST는 모든 자원(데이터, 기능 등)을 고유한 URI(Uniform Resource Identifier)로 표현한다.
- 각 자원은 고유한 식별자를 가지며, 클라이언트는 URI를 통해 자원에 접근한다.
상태 없음(Stateless)
- REST는 서버가 클라이언트의 상태를 관리하지 않는 상태 없음(Stateless) 특징을 가지고 있다.
- 클라이언트의 요청은 필요한 모든 정보를 포함하고 있어야한다.
- 서버는 각 요청을 독립적으로 처리한다.
통일된 인터페이스 (Uniform Interface)
- REST는 통일된 인터페이스를 제공하여 서버와 클라이언트 간의 상호작용을 단순화 한다.
- 이를 위해 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하며, 자원을 조작하고 HTTP 상태 코드를 통해 작업 결과를 전달한다.
자체 표현 (Self-Descriptive)
- 메시지 자체만으로도 어떤 동작을 수행하는지 이해할 수 있어야한.
- 이를 위해 MIME 타입과 같은 표준을 사용하여 메시지를 명확하게 정의한다.
계층 구조 (Layered System)
- REST 아키텍처는 다중 계층으로 구성될 수 있다.
- 이를 통해 보안, 로드 밸런싱, 캐싱 등을 위한 중간 계층을 추가할 수 있다.
REST는 웹 서비스의 설계와 개발을 단순화하고, 다양한 클라이언트와의 상호 운용성을 제공하는 장점이 있다.
또한, RESTful API를 통해 서비스를 제공하는 경우, 클라이언트는 URI를 통해 쉽게 자원을 식별하고 조작할 수 있다.
장점
단점
- 표준이 존재하지 않는다.
- 사용할 수 있는 메소드가 4가지(HTTP Method) 뿐이다.
- 구형 브라우저에서 아직 제대로 지원해주지 못하는 부분이 존재한다.
- PUT, DELETE를 사용하지 못하는 점.
1. 소문자를 사용한다.
대문자는 때로 문제를 일으키는 경우가 있기 때문에 URI를 작성할 때는 소문자를 선호한다.
❌ https://velog.io/@imfox/Posts
⭕ https://velog.io/@imfox/posts
2. 언더바(_) 대신 하이픈(-)을 사용한다.
가독성을 위해 긴 Path를 표현하는 단어는 하이픈(-)으로 구분하는 것이 좋다.
프로그램의 글자 폰트에 따라 언더바 문자는 부분적으로 가려지거나 숨겨질수 있다.
❌ https://velog.io/@imfox/JVM-Java_Virtual_Machine
⭕ https://velog.io/@imfox/JVM-Java-Virtual-Machine
3. 마지막에 슬래시(/)를 포함하지 않는다.
후행 슬래시(/)는 의미가 전혀 없고 혼란을 야기할 수 있다.
URI내의 모든 문자는 리소스의 고유 ID에 포함된다. URI 가 다르면 리소스도 다르기 때문에 명확한 URI를 생성해야한다.
❌ https://velog.io/@imfox/JVM-Java-Virtual-Machine/
⭕ https://velog.io/@imfox/JVM-Java-Virtual-Machine
4. 행위를 포함하지 않는다.
❌ POST http://velog.io/@imfox/users/post/1
⭕ PUT http://velog.io/@imfox/users/1
5. 파일 확장자는 URL에 포함시키지 않는다.
파일 확장자는 URI에 포함하지 말아야한다. 대신 Content-Type 헤더를 통해 전달되는대로 미디어 타입을 사용하여 body 콘텐츠를 처리하는 방법을 결정한다.
Rest API 클라이언트는 HTTP에서 제공하는 형식 선택 메커니즘인 Accept 요청 헤더를 활용하도록 권장해야한다.
❌ http://velog.io/@imfox/users/photo.jpg
⭕ GET http://velog.io/@imfox/users/photo
HTTP/1.1 Host: velog.io/@imfox Accept: image/jpg
6. 전달하고자 하는 명사를 사용하되, 컨트롤 자원을 의미하는 경우 예외적으로 동사를 사용한다.
❌ http://velog.io/@imfox/course/writing
⭕ http://velog.io/@imfox/course/write
7. URI에 작성되는 영어를 복수형으로 작성한다.
⭕ http://velog.io/@imfox/students/3248234/courses
즉, REST, RESTful API, REST API는 비슷한 개념을 나타내지만, REST는 아키텍처 스타일을 의미하며, RESTful API는 이 아키텍처 스타일을 따르는 API를 의미한다.