API(Application Programming Interface)는 둘 이상의 컴퓨터 프로그램이 서로 통신하는 방법이자 컴퓨터 사이에 있는 중계 계층을 의미한다.
예를 들어 A라는 컴퓨터에서 요청을 보내고 B라는 컴퓨터에서 응답을 보낸다 했을 때 어떻게 통신할 것인지, 어떤 데이터를 주고 받을 것인지에 대한 방법(HTTP, HTTPS 프로토콜을 사용할 것인지, GET, POST등의 방식 등)이 정의된 중계 계층을 의미한다.
API는 생성된 시기와 이유에 따라 네 가지 방식으로 작동한다.
해당 API는 단순 객체 접근 프로토콜을 사용한다.
클라이언트와 서버는 XML을 통해 메시지를 교환하며, 과거에 많이 사용된 유연성이 떨어지는 API이다.
원격 프로시저 호출이라고 하며, 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송한다.
JSON객체를 사용하여 데이터를 전달하는 최신 웹 API이다.
클라이언트와 서버 간의 양방향 통신을 지원하며, 서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 REST API보다 효율적이다.
현재 가장 많이 사용되는 유연한 API이다.
클라이언트가 서버에 요청을 데이터로 전송하고, 서버가 해당 데이터를 사용하여 만든 출력 데이터를 다시 클라이언트에 반환한다.
현재를 기준으로 API를 말할때는 보통 웹 API를 의미하며, 이는 REST API를 의미한다.
인터페이스(interface)는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면을 의미한다.
이를 통해 해당 컴퓨터의 내부 서버가 어떻게 구현되어 있는지는 상관 없이 인터페이스를 통해 통신이 가능한다.
예를들어 사용자 인터페이스(UI)를 생각해볼 수 있다.
우리는 핸드폰을 사용할 때 화면을 기반으로 핸드폰과 상호작용을 할 수 있다.
이때 사용자는 해당 핸드폰의 내부 구조나 어플리케이션이 어떻게 만들어져있는지, 어떻게 작동하는지 알 수 없지만, UI를 통해 간편하게 상호작용이 가능하다.
위의 이미지와 같이 사용자가 브라우저를 통해 서버에 요청을 하게 되면, API가 중계 계층역할을 하며 요청을 처리해준다.
이런 방식으로 중간에 API를 사용하는 방식은 다음과 같은 이점이 있다.
제공자는 서비스의 중요한 부분을 드러내지 않아도 된다. 예를 들어 DB의 구조나 테이블 정보, 서버의 상수값 등을 드러내지 않고, 드로내고 싶은 부분만 보여줄 수 있다.
사용자는 해당 서비스가 어떻게 구현되는지 알 필요 없이 필요한 정보만 받을 수 있다.
내부 프로세스가 수정되었을 때 API는 수정이 되지 않도록 구현할 수 있다. 이를 통해 사용자가 앱을 업데이트하는 일을 줄일 수 있다.
제공자는 데이터를 한곳에 모을 수 있다. 어떠한 이벤트에 대한 집계를 하고싶을 때 해당 API를 만들고 해당 이벤트가 발생하면 해당 API를 호출하게 만들어 해당 데이터를 한 곳에 모을 수 있다.
API의 종류는 크게 private api와 public api로 구분된다.
내부적으로 사용되는 API로, 주로 해시키를 하드코딩해놓고 이를 기반으로 서버와 통신을 한다.
모든 사람이 사용할 수 있는 API로, 많은 트래픽을 방지하기 위해 요청수 제한 등으로 관리한다.