API(Application Programming Interface, 애플리케이션 프로그래밍 인터페이스)는 컴퓨터나 컴퓨터 프로그램 사이의 연결을 의미하는 소프트웨어 인터페이스이다. 다른 종류의 소프트웨어에 서비스를 제공하는 일종의 접점 역할을 하며, 이러한 연결 또는 인터페이스를 빌드하거나 사용하는 방법을 기술한 문서 표준을 API 규격(사양)이라고 한다. 이 표준을 충족하는 컴퓨터 시스템은 API가 구현(implement)되었거나 노출(expose)되었다고 표현한다.
목적
API는 외부의 상호 작용에 소프트웨어 시스템을 개방하여, 두 소프트웨어 시스템이 경계를 넘어 상호 합의된 신호를 사용하여 통신할 수 있게 한다. 사용자 인터페이스(UI)가 인간과 컴퓨터를 연결하는 것과 반대로, API는 컴퓨터나 소프트웨어를 서로 연결하며 최종 사용자가 아닌 프로그래머가 사용하도록 설계되었다. 잘 설계된 API는 필요한 객체나 작업만 노출하고 쓸모없는 세부 사항은 숨기는 추상화를 통해 프로그래밍을 단순화한다. API는 종종 계약에 비유되는데, 이는 API 제공자와 이를 의존하는 개발자 간의 합의를 나타낸다.
역사
API의 개념은 용어 자체보다 오래되었다. 1940년대 영국의 컴퓨터 과학자 모리스 윌크스(Maurice Wilkes)와 데이비드 휠러(David Wheeler)는 초기 컴퓨터 에드삭(EDSAC)을 위한 모듈식 소프트웨어 라이브러리를 개발했으며, 이는 API의 초기 형태로 평가된다. "응용 프로그램 인터페이스"라는 용어는 1968년 AFIPS 컨퍼런스에서 발표된 논문에서 처음 기록되었고, 1974년 C. J. 데이트(C. J. Date)가 데이터베이스 분야에 이 용어를 도입했다. 1990년대 인터넷의 확산과 함께 CORBA, COM, DCOM과 같은 표준들이 등장했으며, 2000년 로이 필딩(Roy Fielding)의 논문에서 REST(Representational State Transfer)가 제시되면서 웹 API가 널리 채택되기 시작했다.
종류
라이브러리 및 프레임워크 API: 소프트웨어 라이브러리의 인터페이스로, API는 예상되는 동작(사양)을 규정하고 라이브러리는 이를 실제로 구현한다. 절차적 언어의 API는 주로 기본 루틴으로 구성되는 반면, 객체 지향 언어의 API는 클래스 및 메서드의 사양을 제공한다.
운영체제 API: 응용 프로그램과 운영체제 간의 인터페이스를 지정한다. 예를 들어 POSIX는 POSIX 호환 운영체제를 위해 작성된 응용 프로그램이 다른 POSIX 호환 운영체제에서도 컴파일될 수 있도록 하는 공통 API 집합을 지정한다. 마이크로소프트 윈도우 API(Win32)가 대표적이다.
원격 API: 개발자가 프로토콜을 통해 원격 자원을 조작할 수 있게 한다. 자바 데이터베이스 연결(JDBC) API나 자바 원격 메서드 호출(RMI) API가 이에 해당한다.
웹 API: HTTP 요청과 응답 메시지의 구조 정의를 기반으로 하며, 일반적으로 XML 또는 JSON 형식을 사용한다. 2000년대 이후 API라는 용어의 가장 일반적인 의미는 웹 API를 가리킨다.
설계
API의 설계는 사용에 상당한 영향을 미친다. 정보 은닉의 원칙에 따라 모듈의 구현 세부 사항을 숨김으로써 모듈 프로그래밍을 가능하게 하며, 사용자가 예상하는 도구만을 제공하는 것을 목표로 한다. API 설계는 소프트웨어 구조의 중요한 부분을 나타낸다.
출시 정책
API는 비공개(내부 회사 전용), 파트너(특정 비즈니스 파트너만 사용 가능), 공개(일반 대중 사용 가능)의 세 가지 주요 정책으로 출시된다. 공개 API의 경우 인터페이스 안정성이 중요한 요소이며, 변경 시 해당 API에 의존하는 클라이언트와의 호환성이 깨질 수 있다.
문서화
API 문서는 API가 제공하는 서비스와 사용 방법을 설명하며, 클라이언트가 실제 목적으로 알아야 할 모든 것을 다루는 것을 목표로 한다. 전통적으로 Javadoc이나 Pydoc과 같은 문서 시스템을 통해 제공되며, 클래스 및 메서드에 대한 설명, 일반적인 사용 시나리오, 코드 스니펫, 설계 근거, 성능 논의 등을 포함할 수 있다.
API 저작권 분쟁
2010년 오라클(Oracle)은 안드로이드 운영 체제에 자바 API를 구현한 것에 대해 구글(Google)을 고소했다. 2012년 판사 윌리엄 알섭(William Alsup)은 API가 미국에서 저작권이 될 수 없다고 판결했으나, 2014년 연방 순회 항소법원에서 이 판결이 뒤집혔다. 이후 배심원단은 구글의 API 재구현이 공정 이용(fair use)에 해당한다고 판결했고, 2021년 미국 연방 대법원은 구글의 손을 들어주며 최종적으로 사건이 종결되었다.