REST란 무엇인가요?
Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처입니다. REST 아키텍처 스타일을 따르는 API를 REST API라고 합니다. REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 합니다. RESTful API라는 용어는 일반적으로 RESTful 웹 API를 나타냅니다. 하지만 REST API와 RESTful API라는 용어는 같은 의미로 사용할 수 있습니다.
REST 아키텍처 스타일의 몇 가지 원칙
균일한 인터페이스
균일한 인터페이스는 모든 RESTful 웹 서비스 디자인의 기본입니다. 이는 서버가 표준 형식으로 정보를 전송함을 나타냅니다. 형식이 지정된 리소스를 REST에서 표현이라고 부릅니다. 예를 들어, 리소스를 동적으로 검색할 수 있도록 표현에 하이퍼링크를 넣어 전송합니다.
뭐가 균일하다는 거지?
- 자원 식별:
- URI를 통해 리소스를 고유하게 식별합니다.
- 예: https://api.example.com/users/1
- 표현:
- 리소스의 상태를 표준 형식으로 표현합니다.
- 예: JSON 형식으로 사용자 정보를 표현합니다.
- 자원 조작:
- HTTP 메서드(POST, GET, PUT, DELETE 등)를 통해 리소스를 조작합니다.
- GET 요청: GET https://api.example.com/users/1 (사용자 정보 조회)
- POST 요청: POST https://api.example.com/users (새 사용자 생성)
- PUT 요청: PUT https://api.example.com/users/1 (사용자 정보 수정)
- DELETE 요청: DELETE https://api.example.com/users/1 (사용자 삭제)
- HTTP 메서드(POST, GET, PUT, DELETE 등)를 통해 리소스를 조작합니다.
- 자기 서술적 메시지:
- 요청과 응답에 필요한 모든 정보가 포함되어 있어야 합니다.
- 예: 요청 헤더에 인증 정보 포함, 응답 본문에 필요한 데이터 포함
- 하이퍼미디어 제약 조건:
- 리소스 표현 내에 링크를 포함하여 클라이언트가 다른 관련 리소스로 이동할 수 있게 합니다.
- 예:
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"links": {
"self": "/users/1",
"orders": "/users/1/orders"
}
}
무상태
REST 아키텍처에서 무상태는 서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법을 나타냅니다. 이 REST API 설계 제약 조건은 서버가 매번 요청을 완전히 이해해서 이행할 수 있음을 의미합니다. 각 요청은 필요한 모든 정보를 포함하고 있어야 하며, 서버는 이전 요청의 상태를 기억할 필요가 없습니다.
첫 번째 요청: 클라이언트가 사용자 정보를 요청합니다.
- 요청: GET https://api.example.com/users/1
- 서버 응답: {"id":1,"name":"John Doe","email":"john.doe@example.com"}
- 요청: GET https://api.example.com/users/1/orders
- 서버 응답: [ {"order_id": 101, "product": "Laptop", "quantity": 1}, {"order_id": 102, "product": "Mouse", "quantity": 2} ]
위와 같이 클라이언트가 요청한 것에 서버는 독립적으로 처리를 합니다.
계층화 시스템
계층화된 시스템 아키텍처에서 클라이언트는 클라이언트와 서버 사이의 다른 승인된 중개자에게 연결할 수 있으며 여전히 서버로부터도 응답을 받습니다. 서버는 요청을 다른 서버로 전달할 수도 있습니다. 클라이언트 요청을 이행하기 위해 함께 작동하는 보안, 애플리케이션 및 비즈니스 로직과 같은 여러 계층으로 여러 서버에서 실행되도록 RESTful 웹 서비스를 설계할 수 있습니다. 이러한 계층은 클라이언트에 보이지 않는 상태로 유지됩니다.
캐시 가능성
RESTful 웹 서비스는 서버 응답 시간을 개선하기 위해 클라이언트 또는 중개자에 일부 응답을 저장하는 프로세스인 캐싱을 지원합니다. 예를 들어 모든 페이지에 공통 머리글 및 바닥글 이미지가 있는 웹 사이트를 방문한다고 가정해 보겠습니다. 새로운 웹 사이트 페이지를 방문할 때마다 서버는 동일한 이미지를 다시 전송해야 합니다. 이를 피하기 위해 클라이언트는 첫 번째 응답 후에 해당 이미지를 캐싱하거나 저장한 다음 캐시에서 직접 이미지를 사용합니다. RESTful 웹 서비스는 캐시 가능 또는 캐시 불가능으로 정의되는 API 응답을 사용하여 캐싱을 제어합니다.
온디맨드 코드
REST 아키텍처 스타일에서 서버는 소프트웨어 프로그래밍 코드를 클라이언트에 전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정할 수 있습니다. 예를 들어, 웹 사이트에서 등록 양식을 작성하면 브라우저는 잘못된 전화번호와 같은 실수를 즉시 강조 표시합니다. 서버에서 전송한 코드로 인해 이 작업을 수행할 수 있습니다.
참고자료
https://aws.amazon.com/ko/what-is/restful-api/
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-REST-API-%EC%A0%95%EB%A6%AC
'Backend Programming' 카테고리의 다른 글
회원가입 서비스 만들기 (2) | 2024.09.20 |
---|---|
DTO에서 NotNull설정이 되어 있을 때 PATCH를 어떻게 해줘야할까? (1) | 2024.08.26 |
서블릿이란 무엇일까? (0) | 2024.06.30 |
스프링 빈과 애플리케이션 컨텍스트 그리고 AOP?? (0) | 2024.06.29 |
MVC 패턴이란 무엇일까? (0) | 2024.06.28 |