REST API 6원칙
1. 자원에 대한 식별이 가능해야 함
2-1. HTTP - 비연결성 : 서버 통신이 필요할 때만 연결, 늘 연결되어 있는 건 아니니까! connectionless
같은 아이폰에서 계속 연결해도 할 일 끝나면 연결관계가 끝남
2-2. Stateless - 무상태성 : 응답이 다 완료가 되면 이 관계는 끝남. 그렇기 때문에 서버는 클라에 대한 정보를 가지고 있지 않음
그래서 웹에서는 세션과 쿠키, 앱에서는 토큰을 통해 회원관리를 하게 됨
기본적으로 서버는 사용자를 식별할 수 없는 무상태성을 갖고 있기 때문에 세션/쿠키/토큰을 갖고 있는 것
3. Cacheable : 캐싱기능, 오랜만에 페이지에 들어가면 로딩이 좀 됨, 다시 들어가면 빨리 뜨는데 그 이유가 캐싱 때문임. 사용자가 다시 볼 거라는 캐싱 전략
4. Self-Descriptiveness : URL을 보고도 대략적으로 어떤 의도로 구성되어 있는지 직관적으로 파악할 수 있어야 함
www.naver.com/news/category/article=12312 라는 url을 보면 대략적인 파악이 가능해야 함
5. Client - Server
6.계층형 구조 : 계층적으로 내부가 쌓여가는 구조
REST API의 단점
- overfetching : 필요한 정보값보다 더 많은 정보값이 로딩될 수 있음. 더 많은 정보를 받아야 함
- underfetching : 필요한 정보보다 부족한 정보 로딩으로 인해 추가 api 요청이 필요함
- Endpoint : 서비스 규모가 커질수록 endpoint가 늘어나서 관리하기가 어려워짐, 그리고 업데이트되면 기존 엔드포인트가 삭제/변경되면 클라이언트가 업데이트를 하지 않은 사용자에게 문제가 발생할 수 있음
그래서 이런 부분을 해결하고자 v1/user, v2/user 형태로 API 버전을 관리한다.