BACK_END/Spring 공부

Spring - REST API

harry595 2021. 2. 25. 01:37

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에 대한 명확한 표준같은것은 없음