본문 바로가기
개발/네트워크

REST API는 무엇일까?

by 그레이웅 2022. 10. 7. 14:44
반응형

REST API

 

 

REST API를 알아보기 전에 우선 API의 개념부터 정리해보자.

 

API(Application Programming Interface) 

 

API는 프로토콜 및 정의된 규칙을 따라 두 소프트웨어 간 통신할 수 있게 하는 메커니즘이다.

기상청의 open api를 예로 들어 기상청에서 정해놓은 규칙을 가지고, 기상청의 일일 데이터를 받아올 수 있도록 서로 통신하는 것이다.

 

웹 API는 클라이언트(사용자)와 웹 리소스 사이의 게이트웨이라고 생각할 수 있다.

 

클라이언트(사용자)

클라이언트는 웹에서 정보를 요구하는 사용자이다. 클라이언트는 API를 사용하는 사람 또는 소프트웨어 시스템이다.

개발자가 만약 날씨를 가져오는 프로그램을 만들 수도 있고, 사용자가 날씨 데이터를 불러오는 웹 사이트를 접속할 때

동일한 데이터에 액세스 할 수 있다.

 

리소스

리소스는 클라이언트(사용자)에게 제공하는 정보이다. 리소스는 다양한 파일, 이미지, 텍스트, 동영상 등 다양한 유형의 데이터일 수 있다. 리소스를 제공하는 시스템을 서버라고도 한다. 

리소스를 만든 조직은 리소스를 공유 및 제어, 보안을 유지하며 서비스를 제공하고 API는 접근할 수 있는 클라이언트(사용자)를 결정할 수 있다.

 

그럼 다시 본론으로 돌아와서 RESTful API는 무엇일까?

 


REST API

REST API는 두 컴퓨터 시스템 혹은 소프트웨어가 인터넷을 통하여 정보를 안전하게 교환하기 위한 인터페이스이다.

 

Representational State Transfer의 준말로 REST는 클라이언트(사용자)가 서버 데이터에 액세스 하기 위해 사용하는 GET, PUT, POST, DELETE  함수 집합을 정의되어 있고, 클라이언트와 서버는 HTTP를 사용하여 데이터를 통신한다.

 

REST 기반 아키텍처 스타일을 따르는 API를 REST API라고 한다. 

 

REST 기반 아키텍처 스타일을 구현하는 웹 서비스를 RESTful 웹 서비스라고 한다.

RESTful API라는 용어는 RESTful 웹 API를 나타내지만 REST API와 같은 의미로도 사용된다.

 

 

REST 아키텍쳐 스타일의 주요 특징

 

1. 무상태성(Stateless)

- 무상태성은 클라이언트(사용자)와 서버의 요청 간 클라이언트(사용자)의 데이터를 서버에 저장하지 않는다.

- 클라이언트(사용자)는 요청의 순서를 임의로 요청할 수 있으며, 모든 요청은 무상태이거나 다른 요청과 분리된다.

- 클라이언트(사용자)의 모든 요청에는 해당 요청을 이해할 수 있는 모든 정보가 포함되어야 한다

(예를 들면 인증에 대한 정보는 클라이언트에 저장되며, 서버에 요청 시 인증할 수 있는 정보나 토큰같이 해당 정보를 포함하여 서버에 요청하게 된다.)

 

 

2.  일관된 인터페이스(Uniform interface)

일관된 인터페이스는 RESTful 설계에서 기본이 된다.

이 일관된 인터페이스는 4가지 제약 조건이 존재한다..

 

1) Identification of resources(리소스 식별)

 URI 표준을 사용하여 리소스를 식별한다. 리소스는 웹 문서를 지칭한다.\

 

2) Manipulation of resources through these representations 

 리소스를 요청할 때 서버는 리소스를 표현하여 응답한다.

 

예를 들면 클라이언트가 리소스가 어떤 형태인지 요청하면

서버가 "application/json"과 같이 JSON의 표현 또는 XML의 표현을 응답해준다.

Accept: application/json

이경우 서버가 JSON 데이터로 응답.

서버가 메타데이터를 전송한다고 생각하면 된다.

 

3) Self-descriptive messages

 

클라이언트(사용자)가 서버에게 어떤 요청을 어떻게 처리해야 하는지 명확한 메시지를 전달한다.

 

4) Hypermedia as the engine of application state

 

작업을 완료하는데 필요한 모든 리소스의 정보를 수신한다. 결과에 대한 정보를 포함해야 한다.

 

3.  다중 계층(Layered system)

클라이언트는 서버 사이에서 요청을 다른 서버로도 전달할 수도 있다. 인증 및 데이터 서비스, 비즈니스 로직과 같은 여러 계층으로 나누어서 RESTful 웹 서비스를 설계할 수 있다.

 

4.  캐시 가능성(Cacheable)

RESTful 웹 서비스는 서버의 응답 시간을 빠르게 하기 위해 클라이언트(사용자) 에게 일부 응답을 저장하는 캐싱을 지원한다. 이전에 방문했던 페이지를 다시 접속할 때 캐시에 저장되었던 데이터가 재사용된다.

서버는 Response cache-control 헤더에 캐싱이 가능한지의 대한 여부를 제공한다.

 

5.  온디멘드 코드(Code on demand)

REST 아키텍처 스타일에서 서버는 프로그래밍 코드를 클라이언트에 전달하여 클라이언트의 기능을 확장할 수 있다.

서버에서 전송한 코드를 통해 이 작업을 수행할 수 있다.

 

REST API 작동 방식

1. 클라이언트(사용자)가 서버에 요청을 전송함. 클라이언트(사용자)가 API 문서에 따라 서버가 식별하는 방식으로 요청 형식을 지정

2. 서버가 클라이언트를 인증(인증 정보 등)하고 서버가 요청을 수행할 수 있는 권한이 있는지 확인한다.

3. 서버가 요청을 수신하고 내부적으로 요청 처리 후 응답.

4. 서버가 응답한 후, 응답이 성공했는지 실패 여부를 클라이언트에게 알려줌. 응답 시 클라이언트가 요청한 모든 정보도 포함된다.

 

 

REST API의 클라이언트 요청 정보

REST API의 클라이언트 요청 정보에는 다음과 같은 정보가 포함된다.

 

URL(Uniform Resource Locator) : 고유 리소스 식별자

 

서버는 고유한 리소스 식별자로 리소스를 식별한다. REST 서비스에서 일반적으로 URL(Uniform Resource Locator)를 사용하여 리소스를 식별하여 수행한다.

URL은 일반적으로 우리가 사용하는 웹사이트의 주소와 유사하다.

URL 요청은 엔드포인트라고도 하며, 클라이언트가 요구하는 사항을 서버에게 명확히 전달한다.

 

HTTP 메서드(Method)

 

HTTP(Hypertext Transfer Protocol)을 사용하여 RESTful API를 구현한다.

HTTP 메서드는 리소스에서 수행해야 할 작업을 서버에 알려준다.

 

다음은 일반적인 HTTP 메서드이다.

HTTP METHOD 내용
GET 클라이언트는 GET 메소드를 사용하여 서버에 지정된 URL에 있는 리소스에 엑세스 한다.
보통 리소스를 받아 올때 사용한다.
POST POST 메소드는 요청과 함께 데이터 표현이 포함된다.
동일한 POST 요청을 여러번 하면 동일한 리소스를 여러번 생성하는 부작용이 생긴다.
PUT PUT 메소드는 기존의 리소스를 업데이트 할 때 사용한다.
POST와 달리 동일한 PUT 요청은 단일 자원에만 수행된다.
DELETE DELETE  메소드는 리소스를 삭제할 때 사용된다. 
DELETE 요청은 서버 상태를 변경할 수 있고, 사용자에게 적절한 인증이 없다면 요청은 실패한다.

 

HTTP 헤더(HTTP Header)

 

요청 HTTP 헤더에는 클라이언트와 서버 간에 교환되는 메타데이터이다.

요청 헤더에는 요청 및 응답 형식이나 요청 상태 등의 데이터를 제공한다.

 

요청 헤더 예시

 

REST API의 서버의 응답 정보

REST API의 서버의 응답 정보에는 다음과 같은 정보가 포함된다.

 

상태 표시줄

요청의 성공 여부나, 실패를 알려주는 3자리의 숫자 코드로 나타낸다 (2xx, 3xx) 

 

이전에 포스팅하였던 HTTP 상태 코드에서 자세히 정리해 놓았다.

2022.09.30 - [개발/네트워크] - HTTP 상태 코드 (status code)

 

메시지 본문

응답 내용에는 JSON이나 XML과 같은 정보를 담아서 응답해준다. 클라이언트가 요청한 메타데이터로 응답방식을 정해서 서버가 그에 맞는 데이터로 응답해줌.

 

json 데이터 예시

{"name":"홍길동", "age":10}'

 

응답 헤더

응답 헤더는 응답에 대한 헤더 및 메타데이터도 포함한다. 또한 서버, 인코딩, 날짜 및 콘텐츠 유형과 같은 정보를 포함시켜준다.

 

응답 헤더 예시

 

 

도움이 된 글

- https://aws.amazon.com/ko/what-is/api/

- https://aws.amazon.com/ko/what-is/restful-api/

- https://prohannah.tistory.com/156

- https://berrrrr.github.io/programming/2019/11/03/restapi-uniform-interface/

반응형

'개발 > 네트워크' 카테고리의 다른 글

[NetWork] DNS Recode type  (0) 2022.10.21
[Network] HTTP 메소드 (GET, POST)  (0) 2022.10.11
[NetWork] CORS(Cross-Origin Resource Sharing)  (0) 2022.10.08
[Network] DNS(Domain Name System)란?  (0) 2022.10.06
HTTP 상태 코드 (status code)  (1) 2022.09.30

댓글