Spring - REST API
Rest Api란 - 간단하게 생각하면 HTTP로 요청을 보내 특정 데이터를 받아오는 것
왜쓰냐? -> 안드로이드 앱, Javascript 등 다양한 클라이언트들이 어떤 공통 정보를 쓸 수 있도록 함
Rest의 특징
1. Uniform Interface: 구성 요소 사이의 인터페이스는 균일해야함 (효율성)
2. Stateless: 클라이언트와 서버의 통신에는 상태가 없어야 함, 모든 요청은 필요한 모든 정보를 담고 있어야함
3. Cacheable: 모든 서버 응답은 캐시가 가능한지 그렇지 아닌지 알 수 있어야 함
4. Self-descriptiveness: Rest API 메시지만 봐도 이를 쉽게 이해할 수 있는 자체 표현 구조 사용
5. Client-Server 구조: 사용자 인터페이스에 대한 관심을 데이터 저장에 대한 관심으로부터 분리(이식성,확장성)
6. Layered System: 다중 계층으로 구성 / 보안,암호화 계층 혹은 네트워크 기반의 중간 매체를 추가가능(유연성)
Rest API 설계
1. URI는 정보의 자원을 표현 ex) GET /members/1
2. 자원에 대한 행위는 HTTP Method로 표현
3. URI에 HTTP Method가 들어가면 안됨 ex) GET /books/delete/1 -> DELETE /books/1
4. URI에 행위에 대한 동사 표현 X ex) GET /books/show/1 -> GET /books/1
5. 경로 부분 중 변하는 부분은 유일한 값으로 대체
6. 슬래시는 계층 관계를 나타내는데 사용
7. URI 마지막 문자로 슬래시 사용 X
8. URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용, URI가 다르면 다른 리소스
9. 하이픈(-)은 사용 가능, But 밑줄(_)은 사용 X
10. URI 경로에는 소문자가 적합
11. 파일 확장자는 URI에 포함되지 않음 Accept Header을 사용
12. 리소스 간에 연관 관계가 있는 경우 /리소스명/리소스 ID/관계가 있는 다른 리소스명 으로 사용
13. 자원을 표현하는 컬렉션(객체의 집합)과 도큐먼트(객체)
ex) http://edwith.org/courses/1 에서 courses는 컬렉션(복수) courses/1은 id가 1인 도큐먼트
위의 여러 특징들은 존재하지만 REST API에 대한 명확한 표준같은것은 없음