javascript/모던 자바스크립트 Deep Dive
REST API
yongfront
2024. 2. 21. 16:20
반응형
SMALL
REST API(Representational State Transfer Application Programming Interface)는 웹 상에서 다양한 자원(데이터 또는 기능)을 HTTP 프로토콜을 통해 조작하기 위한 아키텍처 스타일입니다. REST는 분산 시스템 설계를 위한 원칙과 제약 조건의 집합으로, 인터넷에서 데이터를 주고받는 표준적인 방법을 제공합니다.
REST의 핵심 원칙
- Client-Server Architecture: 클라이언트와 서버는 서로 독립적으로 분리되어 있어야 합니다. 이는 각 부분의 확장성을 향상시킵니다.
- Stateless: 각 요청은 독립적이며, 서버는 클라이언트의 상태를 저장하지 않습니다. 모든 필요한 정보는 각 요청에 포함되어야 합니다.
- Cacheable: 클라이언트는 응답을 캐싱할 수 있어야 하며, 캐싱을 통해 애플리케이션의 성능과 확장성을 향상시킬 수 있습니다.
- Uniform Interface: 일관된 인터페이스를 통해 서버와 클라이언트가 정보를 교환합니다. 이 원칙은 REST API의 가장 중요한 특징 중 하나입니다.
- Layered System: 클라이언트는 실제로 연결된 서버가 최종 서버인지 중간 서버인지 알 수 없는 계층화된 시스템 내에서 작동할 수 있습니다.
- Code on Demand (Optional): 서버는 실행 가능한 코드를 클라이언트에 전송할 수 있습니다. 이는 선택적인 원칙입니다.
REST API 디자인 가이드
- 자원(Resource)의 식별: URI(Uniform Resource Identifier)를 사용하여 자원을 식별합니다. 예를 들어, 사용자 정보에 접근하는 URI는 /users가 될 수 있습니다.
- 표현을 통한 자원의 조작: 클라이언트는 자원의 상태를 JSON, XML 등의 형태로 전송받아 해당 자원을 조작할 수 있습니다.
- 메시지를 통한 자원의 조작: HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 자원에 대한 CRUD(Create, Read, Update, Delete) 연산을 수행합니다.
- GET: 자원을 조회합니다.
- POST: 자원을 생성합니다.
- PUT: 자원을 업데이트합니다.
- DELETE: 자원을 삭제합니다.
REST API 사용 예
예를 들어, 사용자 정보를 관리하는 REST API가 있다고 가정해봅시다.
- 사용자 목록 조회: GET /users
- 특정 사용자 조회: GET /users/{id}
- 사용자 생성: POST /users
- 사용자 정보 업데이트: PUT /users/{id}
- 사용자 삭제: DELETE /users/{id}
REST API는 웹 서비스를 구축하기 위한 강력하고 유연한 방법을 제공하며, 웹, 모바일, IoT 등 다양한 플랫폼에서 널리 사용됩니다.
아래는 REST API를 사용하여 간단한 사용자 정보를 관리하는 예시입니다. 이 예시에서는 **fetch API**를 사용하여 REST API 요청을 보내고 응답을 처리하는 방법을 보여줍니다. **fetch API**는 현대 브라우저에서 지원하는 네이티브 API로, 네트워크 요청을 보내기 위해 사용됩니다.
사용자 목록 조회 (GET 요청)
fetch('<https://api.example.com/users>')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
특정 사용자 조회 (GET 요청)
fetch('<https://api.example.com/users/1>')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
사용자 생성 (POST 요청)
fetch('<https://api.example.com/users>', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'John Doe',
email: 'john@example.com'
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
사용자 정보 업데이트 (PUT 요청)
fetch('<https://api.example.com/users/1>', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Jane Doe',
email: 'jane@example.com'
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
사용자 삭제 (DELETE 요청)
fetch('<https://api.example.com/users/1>', {
method: 'DELETE'
})
.then(() => console.log('User deleted'))
.catch(error => console.error('Error:', error));
주의사항
- 실제 API를 사용하기 전에 해당 API의 문서를 참조하여, 올바른 엔드포인트와 필요한 HTTP 메서드, 헤더, 바디 포맷 등을 확인해야 합니다.
- 보안상의 이유로, 실제 애플리케이션에서는 사용자 인증과 권한 부여를 위한 추가적인 메커니즘이 필요할 수 있습니다 (예: OAuth, API 키).
- **fetch**는 프로미스 기반 API이므로, async/await 구문을 사용하여 비동기 요청을 더 간결하고 읽기 쉽게 만들 수 있습니다.
이 예시는 REST API를 사용하여 웹 애플리케이션에서 서버와 데이터를 교환하는 기본적인 방법을 보여줍니다. REST API는 웹 개발에서 데이터를 CRUD하는 표준적인 방법으로, 다양한 웹 서비스와 애플리케이션에서 널리 사용됩니다.
728x90
반응형
LIST