HTTP API와 REST API는 무엇일까?

 

 

HTTP API와 REST API는 무엇일까?

 

우선 HTTP API와 REST API를 알아보기전에 API의 뜻이 무엇인지부터 알고갈필요가있다

그리고 API의 의미를 알면 HTTP에서의 API는 무엇을 의미하는지 자연스럽게 알수있게될것이다

 

 

 

 

 

 

 

 

 

 

API(Application Programming Interface)


우선 인터페이스란 단어에 한번 집중해보자 객체지향 공부하면서 많이 접해봤을만한 인터페이스는 자바에서 추상메서드의 집합들을 말한다

 

인터페이스를 사용하는 목적은 관계를 느슨하게 만들어 보다 유지보수를 쉽게 할려는 목표를 가지고있는데

우리가 자동차운전을 할때 다른자동차로 바꾼다고해서 운전을 못하진않는다

왜냐하면 인터페이스를 적용하여 작동방식은 달라져도 작동하는방법은 달라지지 않기때문이다

 

이처럼 작동방식과 작동하는방법 사이에서 우리가 편하게 사용할수있게 해주는것이 인터페이스이며,

둘 사이에 껴서 소통해주는 역할을 하는 통역사같은 느낌이다 우리가 외국인 A라는 사람과 말을할때 통역사가 있으면 외국인B라는 사람으로 바뀌어도 똑같이 통역할수있는 의미이다

 

 

 

 

 

 

HTTP API


자 이제 API는 대충 둘이 소통한다는 의미로 생각해보면 될꺼같다 그렇다면 HTTP API는 무엇일까?

 

그냥 HTTP 웹 프로토콜로 소통한다 즉 HTTP 방식을 사용해서 컴퓨터나 프로그램끼리 소통한다 라는 의미로 보면 된다 이걸 Web API라고 부르며 웹을 통해서 상대방에게 어떻게 접근하는지, 상대방이 가지고있는 동적, 정적자원들을 얻기위해서 어떤방식으로 소통할것인지를 의미한다

 

여기서 접근하는 방식에따라서 크게 3가지로 나눌수있는데

GET메서드에 쿼리 파라미터를 이용하여 클라이언트와 서버통신하는 방법

POST메서드를 통해서 메세지바디에 쿼리 파라미터를 담아 클라이언트와 서버가 통신하는방법

 

그리고 HTTP API에서 주로 쓰이는 HTTP message body에 데이터를 직접담아서 요청하는 방법이있다

GET, POST 방식에 대해서는 여기를 클릭하면 좀더 자세히 알수있으니 궁금한사람들은 참고하길바란다

그러면 지금부터 HTTP message body를 통해서 HTTP API 통신하는 방법에 대해서 알아보도록하자

 

 

 

 

 

HTTP API 통신방법


우선 위에서 대략 크게 3가지 GET, POST, Message body, 3가지가 있다고 말했는데

Message body로 통신할때 보내는 데이터포맷은 XML, CSV, JSON이 있으며 JSON이 현재 가장 널리사용되고 흔하게 볼수있다

 

우리가 게임을 하면 사용되는 스탯, 정보, 리소스 등 많은 내용들을 포함하고 있는것을 볼수있는데

이를 별도의 데이터형태로 빼놓게되고 보통 엑셀과 같은 파일로 만들어지는데

사실 엑셀이라는 파일은 우리가 직접 게임에서 사용할수없고 파일안에 담겨있는 데이터들을 게임과 주고받아야하는데 데이터를 전달할수있도록 변환하게 만들어주는 확장자들이 XML, JSON, CSV라는 것이다

 

보통 위에 3개를 가장 많이쓰고 그외에도 많이있지만 사실 별로 쓰이진않는다

만약 XML, JSON, CSV에 대해서 궁금한 사람은 여기를 클릭해서 참고하길 바란다

 

 

 

 

 

자 이제 API는 소통이고 HTTP API는 웹에서 쓰이는 소통방식이라고 정리해보면 될꺼같다

우리가 만약 프로그램을 제작하는 도중에 날씨같은 데이터를 사용할 일이생겼다 그러면 어떻게하면될까?

 

보통 공공기관에서 제공하는 OpenAPI를 사용하면되는데

공공기관에서 수집한 데이터를 우리 프로그램에 JSON, XML, CSV같은 형식으로 보내오게된다

그리고 우리는 이것을 그냥 꺼내서 쓰기만하면 되는것이다

 

물론 메뉴얼을 따라서 다른형태로 제공해주는 곳도 있을꺼같지만 일단 Message Body를 통해서 전달하는건 변하지않는다

 

 

 

 

 

REST API


자 REST API를 알아보기전에 HTTP API를 한번 정리해보도록 하자

HTTP는 HTTP 형태로 웹과 통신하는 방법을 말하며 GET, POST, Message Body이렇게 크게 3가지로 나뉘게되는데 보통 HTTP API통신은 Message Body를 통해서 통신하는 것을 말한다

 

사실 REST API는 HTTP API와 거의같다고 볼수있다.

차이점이라면 약간 객체지향 설계를 하냐 아니면 그냥 코딩하냐에 차이점? 이라고 봐야하나

일단 REST API의 뜻은 REST 아키텍쳐 스타일로 설계된 API를 말하는데 여기서 아키텍쳐 스타일은 제약조건의 집합 이라고 생각하면된다

 

우리가 객체지향 설계할때도 원칙 5가지 (SOLID)에 위반하지않게 설계하지 않는가? 그거랑 비슷한 개념이라고 보면된다 REST 제약조건들을 모두 지키면서 설계하는것이 RESTful 하다고 말을하며 아래 여섯가지를 전부지켜야한다

 

 

 

Client-Server: 서버와 클라이언트가 서로간에 어떤 의존성도 없이 각각 독립적으로 진화할 수 있어야한다.

Stateless: 서버는 최근 HTTP 요청에 대한 어떠한 것도 저장하지 않는다. 만약 클라이언트 어플리케이션이 유저가 로그인해서 다른 인증이 필요한 동작들을 수행할 수 있기를 원한다면, 클라이언트 쪽에서 해당 정보를 모두 포함해서 요청을 보내야한다.

Cacheable: 캐시 가능해야한다. 모든 서버 응답은 캐싱이 될 수 있는지 아닌지를 명시적 혹은 묵시적으로 표현해야한다.

Layered system: 계층적으로 구성 가능해야하며, 각 레이어의 구성요소는 인접한 레이어를 넘어서는 레이어는 볼 수 없어야한다.

Uniform interface: 구성요소(클라이언트, 서버 등) 사이의 인터페이스는 균일(uniform)해야한다. 인터페이스를 일반화함으로써, 전체 시스템 아키텍처가 단순해지고, 상호작용의 가시성이 개선되며, 구현과 서비스가 분리되므로 독립적인 진화가 가능해진다.

Code on demand(optional): 이 제약은 선택적이다. 서버에서 생성한 코드가 클라이언트에서 실행가능해야 한다(ex. 자바스크립트).

 

 

 

 

이게 무슨말인겨.. 라고 생각하는 사람들이 많을꺼같다

하지만 우리가 웹 애플리케이션을 개발할때 우리도모르게 RESTful하게 설계하고있다는 것이다

 

일단 HTTP Method 5가지 GET, POST, PUT, PATCH, DELET 들이 가지는 리소스형태를 주의하여 개발한다

GET은 보통 리소스조회 POST는 리소스를 변경, PUT은 리소스를 덮어씌울때 PATCH는 리소스의 변경할때 사용한다

 

자세한 사항은 위에 링크를 올려놨으니 참고해보길 바란다

이처럼 사용하는 목적에따라서 HTTP Method를 적절하게 사용하며 설계하고 URL또한 리소스라는 단어에 초점을 맞춰서 설계한다

 

예를들어 회원 가입, 회원 목록, 회원 수정 삭제를 URL로 설계할때는

회원이라는 리소스에 맞춰서 URL을 설계하게된다 이처럼 우리도 모르게 RESTful하게 설계하고있다고 볼수있다 그렇다면 RESTful하게 설계하는것이 좋을까? 라는 생각을하게된다

 

이거에 대해서는 우아한형제들 김영한 개발이사님의 인프런 답변을 들어보면 어느정도 이해가된다

 

 

 

정확한 차이점으로 REST API는 HTTP 프로토콜을 따르면서 아래의 4가지 가이드 원칙을 지켜야 한다.

1) 자원의 식별
2) 메세지를 통한 리소스 조작
3) 자기서술적 메세지
4) 애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어(HATEOAS)

이러한 제약 조건들을 완벽하게 지키면서 개발하는 것을 RESTful API라고 하는데 실무에서는 이런 방법으로 개발하는 것은 현실적으로 어렵고 개발비용 대비 효과가 있는 것도 아니다. (4번째 원칙이 특히나 구현하기 어렵다.)

그런데 이미 많은 사람들이 이 조건들을 지키지 않아도 REST API라고 하기 때문에 HTTP API와 같은 의미로 사용하고 있다고 한다. 하지만 위 제약 조건들을 모두 지켜야 REST API라고 말할 수 있다.

 

 

 

 

 

정리


자 이제 정리를 해보자 API는 소통 이라고 했다 HTTP API는 웹에서 소통하는 방식으로 클라이언트와 서버가 될수도있고서버와 서버가 될수도있다 크게 3가지 GET, POST, Message Body 로 나뉘며 JSON, XML, CSV같은 데이터포맷으로 전달한다

 

REST API는 HTTP 프로토콜 형식을 따르고 제약조건을 지키면서 설계하는것을 말하며 RESTful API는완벽하게 지키면서 개발하는것을 말한다 하지만 이런식으로 개발하는것은 현실적으로 어려우면서 효과가 큰것도아니다그래서보통은 REST API와 HTTP API를 같은 의미로 사용하고있다 하지만 엄연히 위에 제약조건을 전부지켜야REST API라고 말할수있다