RESTful API란 REST를 기반으로 만들어진 API를 의미한다
REST
REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미
즉,
1. HTTP URI를 통해 자원을 명시하고 -> 자원
2. HTTP method(POST,GET,PUT,PATCH,DELETE)를 통해 -> 행위
3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다. ->표현
특징
- Server-Client(서버-클라이언트 구조)
- Stateless(무상태)
- Cacheable(캐시 처리 가능)
- 동일한 요청이 들어올 때 서버로 요청하지 않고 캐시된 데이터를 사용할 수 있다.
- Layerd System(계층화)
- 클라이언트와 서버 사이 중간 서버를 통해서 서버와 소통 가능
- 중간서버: 프록시서버, 게이트웨이, 캐시 서버
- 프록시서버: 클이언트 대신 서버와 통신하면서 요청 처리, 클라이언트와 서버 간의 통신 간소화
- 게이트웨이: 클라이언트의 요구에 따라 다양한 서비스에 대한 요청을 조정
- 캐시 서버: 빈번하게 요청되는 데이터의 응답을 저장하여 동일한 요청에 대해 서버로의 반복 요청을 줄임
- Uniform Interface(인터페이스 일관성)
- 자원의 식별/표현/조작을 위한 표준적인 방법을 제공
장단점
- 장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라 구축할 필요 X
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다
- HTTP 표준 프로토콜에 따라는 모든 모든 플랫폼에서 사용 가능
- 범용성
- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도파악이 쉬움
- 서버와 클라이언트의 역할을 명확하게 분리
- 단점
- 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL 보다 Header 정보의 값을 처리해야하므로 전문성 요구
설계 원칙
1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다

2. 마지막에 슬래시 포함X

3. 언더바 대신 하이폰 사용

4. 파일 확장자는 URI에 포함하지 않는다
- BAD: /api/users.json
- GOOD: /api/users
5. 행위를 포함하지 않는다.
