⛳️ 인프런 - cs 지식의 정석 강의를 듣고 학습한 내용입니다.
REST API
REST API는 RESTful한 API를 의미하며, 일련의 특징과 규칙을 따르는 API를 말한다.
REST는 Representational State Transfer의 약자로, 자원의 상태를 나타내는 표현을 전송하는 구조를 말한다.

REST API의 주요 특징
- 8가지 중 비교적 중요한5가지를 설명
: 각 자원은 독립적인 인터페이스를 가진다.
: API 변경 시 클라이언트나 서버의 코드 수정 없이도 작동해야 한다.
- url 자원 식별: 자원은 URL로 식별되어야 한다.
- 표현을 통한 자원 조작: HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용해 자원에 대한 조작을 표현한다.
- Self-descriptive messages: 각 메시지는 자체적으로 설명 가능해야 하며, HTTP 헤더에 MIME 타입을 명시해야 한다.
- HATEOAS(Hypermedia as the Engine of Application State): 데이터에 관련 링크를 포함시켜 클라이언트가 추가적인 정보를 쉽게 탐색할 수 있도록 한다.
2. Stateless
- 서버는 클라이언트의 세션 정보를 저장하지 않는다.
- 각 요청은 독립적이며 모든 정보는 요청에 포함되어야 한다.
3. Cacheable
- HTTP 자체가 캐싱을 지원한다.
- Cache-Control, ETag, Last-Modified 헤더를 통해 캐시를 제어할 수 있다.
- GET 요청에만 적용되며, 캐시를 막으려면 Cache-Control: no-store를 사용한다.
4. Client-Server 구조
- 클라이언트와 서버는 서로 독립적으로 개발된다.
- 서버는 API 제공 및 비즈니스 로직 처리, 클라이언트는 요청과 응답 처리에 집중한다.
5. Layered System
- 시스템은 계층화되어야 하며, 각 계층은 독립적으로 기능해야 한다.
- 보안, 로드 밸런싱 등의 중간 계층이 추가될 수 있다.
REST API의 URI 규칙
RESTHTTP URI를 통해 자원을 명시하고, HTTP Methods를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것
- 동작은 HTTP 메서드로 표현하며 URL에 동사를 포함하지 않는다.
- URL에 파일 확장자(.jpg, .png 등)를 포함하지 않는다.
- 리소스 명칭은 명사로 표기한다.
- 계층 구조를 나타내도록 URL을 설계한다.
- 소문자를 사용하며, 단어 구분 시 하이픈(-)을 사용한다.
- HTTP 응답 상태 코드를 적절하게 사용한다.
URI 예시
- 전체 책 조회: GET /books
- 책 생성: POST /books
- 특정 책 조회: GET /books/{bookId}
- 특정 책 수정: PUT /books/{bookId}
- 유저가 특정 책 대여: PUT /users/{userId}/books/{bookId}
- 유저의 특정 책 대여 정보 수정: PATCH /users/{userId}/books/{bookId}
쿼리스트링과 혼합 사용 예시
- 게시글의 두 번째 페이지 조회: /wp/v2/posts?page=2
- 운동정보 검색 (장비: 바벨): /api/v1/workouts?equipment=barbell
- 운동정보 생성 날짜 기준 내림차순 조회: /api/v1/workouts?sort=-createdAt