REST란?
"REpresentational State Transfer" 의 약자로, 자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
즉, 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이라고 말할 수 있다.
REST 설계 규칙
-
URI는 정보의 자원을 표현해야 한다.
- resource는 동사보다는 명사를, 대문자보다는 소문자를 사용한다.
- resource의 도큐먼트 이름으로는 단수 명사를 사용해야 한다.
- resource의 컬렉션 이름으로는 복수 명사를 사용해야 한다.
- resource의 스토어 이름으로는 복수 명사를 사용해야 한다. ex) GET /Member/1 -> GET /members/1
-
자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE 등)로 표현한다.
- URI에 HTTP Method가 들어가면 안된다. ex) GET /members/delete/1 -> DELETE /members/1
- URI에 행위에 대한 동사 표현이 들어가면 안된다.(즉, CRUD 기능을 나타내는 것은 URI에 사용하지 않는다.)
ex) GET /members/show/1 -> GET /members/1
ex) GET /members/insert/2 -> POST /members/2
- 경로 부분 중 변하는 부분은 유일한 값으로 대체한다.(즉, :id는 하나의 특정 resource를 나타내는 고유값이다.)
ex) student를 생성하는 route: POST /students
ex) id=12인 student를 삭제하는 route: DELETE /students/12
-
슬래시 구분자(/ )는 계층 관계를 나타내는데 사용한다.
-
URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
-
URI 마지막 문자로 슬래시(/)를 포함하지 않는다. 밑줄(_)은 사용하지 않는다.
-
URI 경로에는 소문자가 적합하며, 파일 확장자는 포함하지 않는다.
REST 제약조건
- client-server
- Client-Server 제약조건이란, API를 통해 정보를 교환하는 주체는, 클라이언트와 서버 구조를 가져야 한다.
- 클라이언트와 서버를 분리함으로써, 서로 의존하지 않는 구조를 가져야 한다
- Stateless(무상태)
- 무상태성 -> 서로의 상태를 기억하지 않는다.
- 클라이언트에서 서버로의 요청에는 그 요청을 이해하는 데 필요한 모든 정보가 포함되어있어야 한다.
- 클라이언트와 서버 모두, 통신하는 상대의 상태를 저장하고 있지 않는다
- 요청과 응답이 들어올 때 마다, 상대가 누구인지 파악할 수 있어야 한다.
- Cache
- 캐시처리 가능 여부
- 요청에 대한 응답 내의 데이터에 캐시 가능여부가 명시되어 있어야함
- Uniform interface
- 전체 시스템을 파악할 수 있는 인터페이스를 제공해야 한다.
- 가장 지키기 어려운 제약조건
- Layered System
- 계층화 시스팀
- 클라이언트는 서버에 직접 연결되었는지, 중간 서버를 통해 연결되었는지 알 수 없어야함
- Code-On-Demand (Optional)
- Server 에서 보낸 코드를 Client에서 실행할 수 있어야함
- 필요에 따라, 지켜도되고, 지키지않아도 REST에는 문제가 없다
RESTful이란?
RESTful이란 REST의 원리를 따르는 시스템을 의미한다. 즉, RESTful API란 REST의 설계 규칙을 잘 지켜서 설계된 API를 말한다.
모든 CRUD 기능을 POST로 처리하는 API 혹은 URI규칙을 지키지 않은 API는 REST API의 설계 규칙을 올바르게 지키지 못한 시스템이며 RESTful하다고 말할 수 없다.
메소드의 종류
-
GET
- 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드
- 자원의 상태를 변경시키지 않아 safe method라고 불리고, 멱등성을 띈다
- 멱등성이란 여러번 수행해도 결과가 같음을 의미한다. 즉, 호출로 인하여 데이터가 변형이 되지 않는다는 것을 의미한다.
-
POST
- 새로운 리소스를 생성(create)할 때 사용
- 서버의 상태를 변경시켜 비멱등성을 띈다
-
PUT
- PUT는 리소스를 생성 / 업데이트하기 위해 서버로 데이터를 보내는 데 사용
- 존재하는 자원을 전체적으로 변경할 때 사용
- 자원이 존재하지 않는 경우, API는 자원을 생성할 수 있으며 이 경우 201코드
-
PATCH
- 한 자원의 데이터를 부분적으로 변경할 때 사용
- PUT과 마찬가지로 자원을 변경하지만, 자원의 데이터를 부분적으로 변경할 때 사용
-
DELETE
- 지정된 리소스를 삭제
- 멱등성 성질을 띈다고 할 수 있다. DELETE 메소드를 요청했을 때 자원을 삭제한 후 반복적으로 요청하게되면 404에러코드를 받게 되므로 멱등성의 성질을 띈다고 할 수 있다.