공부를 하던 중에 원래는 거의 동일하다고 알고만 있던 REST와 HTTP API가 다르다는 걸 봐서 한번 정리 해볼까 한다.
우선 두개의 API의 개념을 확립하기 위해서는 API에 대해 먼저 알아보자
📡API
API는 Application Programming Interface의 약자로 컴퓨터 혹은 컴퓨터 프로그램끼리의 연결, 즉 컴퓨터 혹은 컴퓨터 프로그램끼리 소통을 의미한다.이러한 소통을 어떻게 할 지 문서로 정리하거나 공통의 기준을 정한 것을 API 명세라고 한다.
한 컴퓨터/프로그램이 소통하는 방식이 상대방 컴퓨터/프로그램과 다를 수 있기 때문에, 서로가 공통적으로 이해할 수 있는 기준을 명시한 것이다.
REST API와 HTTP API는 웹에서의 소통에 사용되기 때문에 WEB API에 해당한다. WEB API는 웹에서의 통신을 기반으로 하는 API이다. 소통을 하기 위해서는 웹을 통해 소통하는 방식(Method), 어떤 자원(Resource)들에 대해서 소통할 것인가 등에 대한 기준이 추가로 필요하다.
📡HTTP API
HTTP(Hypertext Trasnfer Protocol)API는 두 시스템 간의 통신 프로토콜로 Hypertext Transfer Protocol을 사용하는 API이다.HTTP API는 endpoint를 API gateway로 활용하여, HTTP 요청을 통해서 서버에 접근할 수 있도록 만들어준다.
📡REST API
REST는 Representational State Transfer의 약자로 클라이언트와 서버 간에 데이터를 공유하기 위한 모범 사례를 정의하는 규칙의 집합이다. 본질적으로 복잡성에 관계없이 CRUD 기능만 사용하도록 요청하는 HTTP 또는 다른 API를 만들 때 사용되는 디자인 스타일이다.
REST한 프로그램이 되려면 CRUD 방식의 메서드, HTTP 메서드 중에 GET,POST,DELETE,PUT 만을 사용한다.
메서드의 일부를 무시하는 것이 직관적이지 않은 것처럼 보일 수 있지만 궁극적으로 복잡한 동작을 간단한 용어로 설명해야 한다.이런식으로 메서드를 제한 했을때 , 인터페이스가 단순해지고 추후 확장도 쉽다는 장점이 생기고, 더 간단한 방법과 다른 RESTAPI와의 더 쉬운 통합으로 이어진다.
다음으로 모든 HTTP API가 REST API는 아니기 때문에, REST API로 간주되기 위해 다음 요구사항을 충족해야 한다.
- Client-Server
- REST 애플리케이션에는 애플리케이션 데이터와 상태를 서버가 관리한다. 서버는 사용자 상호작용을 처리하는 클라이언트와 통신한다.
- 서버와 클라이언트를 분리하면서, 클라이언트와 서버를 독립적으로 관리하고 업데이트가 가능하다.
- Stateless
- 클라이언트의 상태는 자체적으로 관리된다.클라이언트가 서버에 보내는 요청은 요청을 실행하기 위한 모든 정보를 포함해야한다.
- 캐시화 가능
- 서버는 응답을 캐시 가능 여부로 표시해야 한다. 시스템과 클라이언트는 성능을 향상시키기 위해 편리할 때 응답을 캐시할 수 있다.
- 또한 캐시할 수 없는 정보를 없애므로 오래된 데이터를 사용하지 않는다.
- 균일한 인터페이스
- REST의 가장 잘 알려진 특성이다. REST 서비스는 일관된 네임 스페이스를 사용하여 데이터를 리소스로 제공한다.
- 계층화된 시스템
- 구성요소들은 서로의 계츨 너머를 볼 수 없다.각각의 범위가 제한되므로 개발자들이 인증 관현 보안을 강화하거나 성능을 개선하기 위해 로드 밸런서나 프록시를 추가하는 것이 쉽다.
⛏정리
REST API와 HTTP API는 거의 비슷한 개념으로 사용되고 있는거 같지만 REST API와 HTTP API는 엄밀히 말하면 다르다.
REST API는 HTTP API에 여러가지 제약조건이 추가된 것이다. 그런데 까다로운 제한이 추가되는데도 불구하고 REST API를 사용하는 이유는 애플리케이션을 만들 때 이런 특성들을 혼합하면, 견고한 경계를 가지면서 관심사가 잘 분리된 구조로 만들 수 있다.
클라이언트는 서버에 요청을 했을때만 데이터를 받아 그 데이터를 가공하거나 표시하는데 활용한다. 만약 클라이언트의 상태가 변경된다면 서버에 알린다. REST API에서 데이터가 구현되는 과정은 클라이언트가 알 수 없지만 , 데이터 그 자체를클라이언트에게 숨기지는 않는다.
REFERENCE
'Dev > Network' 카테고리의 다른 글
HTTP 메서드(GET,POST,PUT,PATCH,DELETE) (1) | 2021.07.12 |
---|---|
[Network]HTTP와 HTTPS (0) | 2021.06.21 |
[Network]HTTP 상태코드 (0) | 2021.05.23 |