# RESTful API

### RESTful API의 정의 및 원칙

1. **자원(리소스) 기반 구조**:
    
    * 모든 데이터는 <mark>"자원"</mark>으로 간주,  
        각각의 자원은 고유한 URI(Uniform Resource Identifier)를 가짐
        
2. **표현(Representation)**:
    
    * 클라이언트와 서버 간의 데이터 교환은 자원의 표현으로 이루어짐
        
    * 자원의 표현은 일반적으로 <mark>JSON 또는 XML 형식</mark>을 사용
        
3. **상태 비저장성(Stateless)**:
    
    * 모든 요청은 독립적이며, 각 요청에는 필요한 모든 정보가 포함되어 있어야 함
        
    * <mark>서버는 클라이언트의 이전 요청 상태를 저장하지 않는다.</mark>
        
4. **<mark>HTTP 메서드</mark>**:
    
    * RESTful API는 <mark>HTTP 메서드</mark>를 사용하여 자원에 대한 작업을 정의
        
    * <mark>주요 HTTP 메서드</mark>:
        
        * `GET`: 자원을 조회
            
        * `POST`: 새로운 자원을 생성
            
        * `PUT`: 기존 자원을 변경
            
        * `DELETE`: 자원을 삭제
            
        * `PATCH`: 자원의 일부를 변경
            
5. **유형성(Uniform Interface)**:
    
    * 일관된 인터페이스를 제공하여 클라이언트와 서버 간의 상호 작용을 단순화
        
    * 자원 URI, HTTP 메서드, HTTP 상태 코드 등을 <mark>일관되게 사용</mark>
        
6. **캐시 가능성(Cacheability)**:
    
    * 응답은 캐시될 수 있어야 하며, 캐시 가능 여부를 명시하는 메타데이터를 포함해야 함
        
7. **계층화 시스템(Layered System)**:
    
    * 클라이언트는 중개 서버를 통해 여러 계층으로 구성된 시스템과 상호작용할 수 있다.
        
    * 이를 통해 시스템의 보안 및 확장성을 향상
        
8. **코드 온 디맨드(Code on Demand) (선택 사항)**:
    
    * 서버는 클라이언트에 <mark>스크립트를 전송하여 실행</mark>할 수 있다.
        
    * 이는 선택 사항이며, RESTful API에서 반드시 구현해야 하는 요소는 아니다.
