개요
- RESTful API에 대한 고찰과, 명확한 정의를 이해 할 수 있습니다
RESTful API란 무엇인가요?
- "두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스 입니다"
- 인터페이스: 두 시스템간의 상호방식 방식을 정의하는 표준화된 경계
- 대부분의 비즈니스 애플리케이션은 다양한 태스크(일)을 수행하기 위해 다른 내부 애플리케이션 및 서드 파티 (외부 라이브러리) 애플리케이션과 통신 해야합니다
- RESTful API는 안전하고 신뢰할 수 있으며 효율적인 소프트웨어 통신 표준을 따르므로 이러한 정보 교환을 지원합니다
API란 무엇인가요?
- "애플리케이션 프로그래밍 인터페이스는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙"
- 개발자는 다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성합니다
- 웹 API는 클라이언트와 웹 리소스 사이의 게이트웨이라고 생각 할 수 있습니다
- 웹 API가 클라이언트와 서버 간의 데이터를 주고받는 중간 역할을 한다
- 라는 의미로 해석 가능
클라이언트
- "웹에서 정보에 엑세스(이용) 하려는 사용자 입니다"
- API를 사용하는 사람,소프트웨어 시스템일 수 있습니다
리소스
- "다양한 애플리케이션이 클라이언트에게 제공하는 정보 입니다"
- 이미지,동영상,텍스트,숫자와 같은 유형 입니다
- 클라이언트에 리소스를 제공하는 시스템을 서버라고도 합니다
- 조직은 API를 사용하여 리소스를 공유하고 보안,제어 및 인증을 유지하면서 웹 서비스를 제공합니다
- API는 특정 내부 리소스에 엑세스 할 수 있는 클라이언트를 결정하는데 도움이 됩니다
REST란 무엇인가요?
- "REpresenational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처"입니다
- REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌습니다
- REST 기반 아키텍처를 사용하여 대규모의 고성능 통신을 안정적으로 지원할 수 있습니다
- 쉽게 구현하고 수정할 수 있어 모든 API 시스템을 파악하고 여러 플랫폼에서 사용할 수 있습니다
- API 개발자는 여러 아키텍처를 사용하여 API를 설계할 수 있습니다
- REST 아키텍처 스타일을 따르느 API를 REST API라고 합니다
- REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스 라고합니다
- RESTful API라는 용어는 일반적으로 RESTful 웹 API를 나타냅니다
- 다음은 REST 아키텍처 스타일의 몇 가지 원칙입니다
균일한 인터페이스
- "모든 RESTful 웹 서비스 디자인의 기본"
- 이는 서버가 표준 형식으로 정보를 전송함을 나타냅니다
- 형식이 지정된 리소스를 REST에서 표현이라고 부릅니다
- 이 형식은 서버 애플리케이션에 있는 리소스의 내부 표현과 다를 수 있습니다
- ex) 서버는 데이터를 텍스트로 저장하되, HTML 표현 방식으로 전송할 수 있습니다
- 클라이언트는 서버에게 데이터를 요청할때 Accept 속성을 활용하여 HTML,JSON형태로 받을지 정할 수 있다
- 즉 서버의 DB에 Text로 저장하였어도, 클라이언트의 요청에따라 HTML로 반환 할 수 있다는 뜻이다
- 균일한 인터페이스에는 4가지 아키텍처 제약 조건이 존재합니다
- 요청은 리소스를 식별 해야한다. 이를 위해 균일한 리소스 식별자를 사용합니다
- 요청은 리소스를 식별해야한다는 뜻은, Restful 설계원칙에 따랐는지가 관건이다
- 즉, /users/123이나 /users?id=123 둘다 123의 user를 식별할 수 있지만, 후자는 Restful 설계원칙에 어긋나기 때문에 전자가 맞다고 볼 수 있다
- 클라이언트는 원하는 경우 리소스를 수정하거나 삭제하기에 충분한 정보를 리소스 표현에서 가지고 있습니다
- 클라이언트는 표현을 추가로 처리하는 방법에 대한 정보를 수신합니다. 이를 위해 서버는 클라이언트가 리소스를 적절하게 사용할 수 있는 방법에 대한 메타데이터가 포함된 명확한 메세지를 전송합니다
- 클라이언트는 작업을 완료하는데 필요한 다른 모든 관련 리소스에 대한 정보를 수신합니다. 이를 위해 클라이언트가 더 많은 리소스를 동적으로 검색할 수 있도록 표현에 하이퍼링크를 넣어 전송합니다
- 3,4번의 예시를 들어보면 아래와 같다

- 위와같은 식의 데이터를 제공해줌을 의미
- 리소스와 관련된 다음 동작을 안내하는 메타데이터(링크 등)를 포함
무상태
- REST 아키텍처에서 무상태는 서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법
- 클라이언트는 임의의 순서로 리소스를 요청할 수 있으며, 모든 요청은 무상태이거나 다른 요청과 분리 됩니다
- 다른 요청과 분리된다: 각 서버의 요청은 독립적이다
- 이 REST API 설계 제약 조건은 서버가 매번 요청을 완전히 이해해서 이행할 수 있음을 의미합니다
- 서버는 클라이언트의 요청만을 보고 요청을 처리할 수 있어야하며, 이전 요청의 맥락이나 상태에 의존하지 않아야한다는 의미
계층화 시스템
- 시스템 아키텍처에서 클라이언트와 서버 사이의 다른 승인된 중개자에게 연결할 수 있으며, 여전히 서버로부터도 응답을 받습니다
- 클라이언트 -> 서버 구조가 아닌
- 클라이언트 -> 승인된 중개자(로드밸런서, ngnix, proxy) -> 서버
- 일 수도 있다는 의미
- 서버는 요청을 다른 서버로 전달할 수 있습니다
- 클라이언트 요청을 이행하기 위해 함께 작동하는 보안, 애플리케이션 및 비즈니스 로직과 같은 여러 계층으로 여러 계층으로 여러 서버에서 실행되도록 RESTful 웹 서비스를 설계할 수 있습니다
- 이러한 계층은 클라이언트에 보이지 않는 상태로 유지됩니다
캐시 가능성
- 서버 응답 시간을 개선하기위해 클라이언트 또는 중개자에 일부 응답을 저장하는 프로세스인 캐싱을 지원
- Ex)
- 모든페이지에 공통 머리글 및 바닥글 이미지가 있는 웹 사이트 방문
- 동일한 웹사이트를 새로고침할 경우, 서버는 동일한 이미지를 다시 전송 해야합니다
- 이를 피하기 위해 클라이언트는 첫 번째 응답후에 해당 이미지를 캐싱하거나, 저장한 다음 직접 사용합니다
- RESTful 웹 서비스는 캐시 가능 또는 캐시 불가능으로 정의되는 API 응답을 사용하여 캐싱을 제어합니다
- 비 RESTful 웹서비스에 비해 캐싱적용이 유리하다라는 의미
- GET /users/123 은 리소스가 확실하지만
- /users?id=123 은 리소스가 불확실하여, 캐싱에 모호하다는 의미
온디맨디 코드
- 필요할때 제공한다 라는 의미
- REST 아키텍처 스타일에서 서버는 소프트웨어 프로그래밍 코드를 클라이언트에 전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정 할 수 있습니다

- 이를 통해 클라이언트는 차트모양을 표현 할 수 있게 되는 것이다
RESTful API를 사용하면 어떤 이점이 있나요?
확장성
- REST API를 구현하는 시스템은 REST가 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 크기 조정할 수 있습니다
- 무상태는 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없기 떄문에 서버 로드를 제거합니다
- 잘 관리된 캐싱은 일부 클라이언트-서버 상호 작용을 부분적으로 또는 완전히 제거합니다
- 이러한 모든 기능은 성능을 저하시키는 병목현상을 일으키지않으면서, 확장을 지원합니다
유연성
- RESTful 웹 서비스는 완전한 클라이언트-서버 분리를 지원합니다
- 각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리합니다
- 서버 애플리케이션의 플랫폼 또는 기술 변경은 클라이언트 애플리케이션에 영향을 주지 않습니다
- Java에서는 /users/getUser/1 으로 할수있는데,
- Python으로 변경되면 /users/fetchUsers/1로 될수있다는 이야기
- 각 기술마다 사용하는 용어가 다르기 떄문에 그러하다
- 이러한 연유로 플랫폼에 종속되지 않는다는 특징도 있다
- 애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상시킵니다
독립성
- REST API는 사용되는 기술과 독립적입니다
- 유연성에서 이어지는 이야기이다
RESTful API는 어떻게 작동하나요?
- 기본기능은 인터넷 브라우징과 동일합니다
- 클라이언트는 리소스가 필요할 때 API를 사용하여 서버에 접속합니다
- API개발자는 서버 애플리케이션 API 문서에서 클라이언트가 REST API를 어떻게 사용해야 하는지 설명합니다
- 클라이언트가 서버에 요청 전송, 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식 지정
- 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인
- 서버가 요청을 수신하고 내부적으로 처리
- 서버가 클라이언트에 응답을 반환합니다. 응답에는 요청이 성공했는지 알려주는 정보가 포함되며, 클라이언트가 요청한 모든 정보도 포함됩니다
오늘 나는 무엇을 알았는가?
- GET /users/123
- 리소스에 행동이 정의되어 있지않아 RESTful한 API라고 볼 수 있다
- /users?id=123
- 반대로 리소스에 id는 123이라는 행동이 정의 되어있어 RESTful한 API라고 볼 수 없다
- RESTful한 API란?
- 메소드와 URI를 통해 졍확한 리소스를 가리키는것, URI에는 행동이 정의되어있으면 안됨
참조 문헌
https://aws.amazon.com/ko/what-is/restful-api/