# RESTful RESTful API는 웹 서비스를 설계하는 데 사용되는 아키텍처 스타일 중 하나입니다. Representational State Transfer의 약자로, HTTP 프로토콜을 기반으로 자원(resource)을 표현하고, 이 자원에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행하는 방식을 의미합니다. ## 특징 * 자원 중심: 각각의 데이터는 자원(resource)으로 취급되며, URI(Uniform Resource Identifier)를 통해 고유하게 식별됩니다. * HTTP 메서드 활용: - GET: 자원 조회 - POST: 새로운 자원 생성 - PUT: 기존 자원 전체 업데이트 - DELETE: 자원 삭제 - PATCH: 자원 부분 업데이트 * Stateless: 각 요청은 독립적이며, 서버는 이전 요청에 대한 정보를 저장하지 않습니다. * Client-Server: 클라이언트와 서버는 분리되어 있으며, 각자의 역할을 수행합니다. * Cacheable: 응답을 캐싱하여 시스템 성능을 향상시킬 수 있습니다. * Uniform Interface: 일관된 인터페이스를 제공하여 다양한 클라이언트에서 쉽게 사용할 수 있습니다. ## 장점 * 단순성: HTTP 프로토콜을 기반으로 하므로 이해하기 쉽고 구현하기 간편합니다. * 확장성: 새로운 자원을 추가하거나 기존 자원을 수정하는 것이 용이합니다. * 다양한 플랫폼 지원: HTTP 프로토콜을 지원하는 모든 플랫폼에서 사용 가능합니다. * 캐싱: 응답을 캐싱하여 시스템 성능을 향상시킬 수 있습니다. * RESTful API는 JSON 또는 XML 형식의 데이터를 주고받는 방식으로, 다양한 프로그래밍 언어와 플랫폼에서 쉽게 사용할 수 있습니다. ## 설계 시 고려 사항 * URI 설계: 자원을 명확하게 표현하고, 계층적인 구조를 유지합니다. - URI의 마지막에는 '/'를포함하지 않습니다. - 언더바(\_)는 사용하지 않습니다. 대신 하이픈(-)을 사용합니다. - URI에는 행위(동사)가 아닌 결과(명사)를 포함합니다. 행위는 HTTP 메서드로 표현할 수 있어야 합니다. - URI는 소문자로 작성해야 합니다. - 파일의 확장자는 URI에 포함하지 않습니다. 대신 HTTP의 Accept 헤더를 사용하는 것이 좋습니다. * HTTP 메서드 활용: 각 메서드의 의미를 정확하게 이해하고 적절하게 사용합니다. * 응답 코드: HTTP 상태 코드를 활용하여 요청 결과를 명확하게 전달합니다. * 에러 처리: 예외 상황 발생 시 적절한 에러 메시지를 반환합니다. * 버전 관리: API 변경 시 버전을 관리하여 호환성 문제를 해결합니다. ## RESTful API를 사용하는 이유 * 다양한 클라이언트 지원: 웹 브라우저, 모바일 앱, IoT 장치 등 다양한 클라이언트에서 사용 가능합니다. * 데이터 공유: 서로 다른 시스템 간에 데이터를 쉽게 공유할 수 있습니다. * 마이크로서비스 아키텍처: 각 서비스를 RESTful API로 구현하여 시스템을 분산하고 확장성을 높일 수 있습니다.