{{위키데이터 속성 추적}}
{{다른 뜻}}
[[파일:Screenshot of NASA API documentation.png|섬네일|[[NASA]]가 개발한 [[웹 API]] 문서 스크린샷]]
'''API'''({{lang|en|application programming interface|애플리케이션 프로그래밍 인터페이스}}, 응용 프로그램 프로그래밍 인터페이스)는 [[컴퓨터]]나 [[컴퓨터 프로그램]] 사이의 연결이다. 일종의 소프트웨어 [[인터페이스 (컴퓨팅)|인터페이스]]이며 다른 종류의 [[소프트웨어]]에 서비스를 제공한다.<ref>{{서적 인용|last=Reddy |first=Martin |author-link= |date=2011 |title=API Design for C++ |url=https://www.google.com/books/edition/API_Design_for_C++/IY29LylT85wC |publisher=Elsevier Science |page=1 |isbn=9780123850041}}</ref> 이러한 연결이나 인터페이스를 빌드하거나 사용하는 방법을 기술하는 문서나 표준은 '''API 규격'''(사양)으로 부른다. 이 표준을 충족하는 컴퓨터 시스템은 API가 구현(implement)되었다거나 노출(expose)되었다고 말한다. API라는 용어는 사양이나 구현체를 의미할 수 있다.

컴퓨터와 인간을 연결시키는 [[사용자 인터페이스]]와 반대로, API는 컴퓨터나 소프트웨어를 서로 연결한다. 직접 사람([[최종 사용자]])에 의해 사용되도록 고안된 것이 아니며, 대신 소프트웨어에 이를 통합하고자 하는 [[컴퓨터 프로그래머]]가 사용하도록 고안되었다. API는 각기 다른 부분으로 구성되기도 하며 프로그래머가 사용할 수 있는 도구나 서비스의 역할을 한다. 이러한 부분들 중 하나를 사용하는 프로그램이나 프로그래머는 API의 해당 부분을 호출(call)한다고 말한다. API를 구성하는 호출들은 [[서브루틴]], 메소드(method), 요청, [[통신 엔드포인트]]라고도 부른다. API 규격은 이 호출들을 정의하며, 다시 말해 이들을 어떻게 사용하거나 구현하는지를 설명한다.

API의 한 가지 목적은 시스템이 동작하는 방식에 관한 [[정보 숨기기|내부의 세세한 부분을 숨기는]] 것으로, 내부의 세세한 부분이 나중에 변경되더라도 프로그래머가 유용하게 사용할 수 있고 일정하게 관리할 수 있는 부분들만 노출시킨다. API는 특정 시스템용으로 커스텀하게 빌드될 수도 있고, 아니면 수많은 시스템 간 [[상호운용성]]을 허용하는, 공유가 되는 표준일 수도 있다.

API라는 용어는 [[웹 API]]를 의미하기도 하며,<ref name="Lane2019">{{웹 인용|url=https://blog.postman.com/intro-to-apis-history-of-apis/ |title=Intro to APIs: History of APIs |last=Lane |first=Kin |date=October 10, 2019 |website=Postman |access-date=September 18, 2020 |quote=When you hear the acronym “API” or its expanded version “Application Programming Interface,” it is almost always in reference to our modern approach, in that we use HTTP to provide access to machine readable data in a JSON or XML format, often simply referred to as “web APIs.” APIs have been around almost as long as computing, but modern web APIs began taking shape in the early 2000s.}}</ref> 이는 [[인터넷]]에 의해 병합된 컴퓨터들 간 통신을 허용한다. [[프로그래밍 언어]], [[라이브러리 (컴퓨팅)|소프트웨어 라이브러리]], 컴퓨터 [[운영 체제]], [[컴퓨터 하드웨어]]를 위한 API도 존재한다. API는 1940년대에 기원하였으나 이 용어는 1960년대, 70년대 들어서야 모습을 드러냈다.

== 이용 ==
API는 [[응용 프로그램 이진 인터페이스]](ABI)와는 구별한다. API는 소스 코드 기반인 반면 ABI는 이진 인터페이스이다. 이를테면 POSIX는 API인 반면, [[리눅스 기본 규격]]은 ABI를 제공한다.<ref>{{웹 인용|
url=http://www.linuxfoundation.org/collaborate/workgroups/lsb/lsb-introduction|
title=LSB Introduction|
publisher=Linux Foundation|
date=21 June 2012|
accessdate=2015-03-27|
archive-date=2015-04-02|
archive-url=https://web.archive.org/web/20150402094250/http://www.linuxfoundation.org/collaborate/workgroups/lsb/lsb-introduction|
url-status=}}</ref><ref>{{웹 인용|
first=Nick|
last=Stoughton|
url=https://db.usenix.org/publications/login/2005-04/openpdfs/standards2004.pdf|
title=Update on Standards|
publisher=[[USENIX]]|
format=PDF|date=April 2005|
accessdate=2009-06-04}}</ref>
=== 절차적 언어에서의 API ===
대부분의 절차적 언어에서 API는 특정한 작업을 수행할 [[함수]]들의 집합을 규정하며, 특정 소프트웨어 구성 요소와 상호 작용할 수 있게 한다.

유닉스 명령어 <code>man 3 sqrt</code>는 <code>sqrt</code> 함수의 [[타입 시그너처|시그너처]]를 대표한다.
<syntaxhighlight lang="C">
SYNOPSIS
            #include <math.h>
            double sqrt(double X);
            float  sqrtf(float X);
DESCRIPTION
       sqrt computes the positive square root of the argument. ...
RETURNS
       On success, the square root is returned. If X is real and positive...
</syntaxhighlight>

이와 비슷하게, 다른 언어들은 절차적 라이브러리를 갖고 있다. 이를테면 [[펄]]에는 내부 문서화 기능을 이용할 수 있는 동일한 수식 작업을 위한 전용 API들이 있으며, [[perldoc]] 유틸리티를 이용하여 접근할 수 있다.
<syntaxhighlight lang="perl">
$ perldoc -f sqrt
       sqrt EXPR
       sqrt    #Return the square root of EXPR.  If EXPR is omitted, returns
               #square root of $_.  Only works on non-negative operands, unless
               #you've loaded the standard Math::Complex module.
</syntaxhighlight>

== API의 예 ==
{{참고|분류:API}}

* [[윈도우 API]]
* [[마이크로소프트 윈도우]]의 [[다이렉트엑스]]
* [[단일 유닉스 규격]]
* [[자바 API]]
* [[스칼라 (프로그래밍 언어)|스칼라 API]]
* [[OpenGL]]
* [[OpenAL]]
* [[OpenCL]]

== 웹 API ==
{{참고|웹 서비스}}

웹 API는 웹 애플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세를 일컫는다. 예를 들어 블로그 API를 이용하면 [[블로그]]에 접속하지 않고도 다른 방법으로 글을 올릴 수 있다.
그 외에 우체국의 우편번호 API, 구글과 네이버의 지도 API등 유용한 API들이 많으므로, 요즘은 홈페이지 구축이나 추가개편 시 따로 추가로 개발하지 않고 이런 오픈 API를 가져와 사용하는 추세다.

==문서화==
API 문서는 API가 제공하는 서비스와 해당 서비스를 사용하는 방법을 설명하며, 실제 목적으로 클라이언트가 알아야 할 모든 것을 다루는 것을 목표로 한다.

API를 사용하는 애플리케이션을 개발하고 유지 관리하려면 문서화가 중요하다. API 문서는 전통적으로 문서 파일에서 찾을 수 있지만 블로그, 포럼, Q&A 웹사이트 등 소셜 미디어에서도 찾을 수 있다.

기존 문서 파일은 일관된 모양과 구조를 가진 Javadoc 또는 Pydoc과 같은 문서 시스템을 통해 표시되는 경우가 많다. 그러나 문서에 포함된 콘텐츠 유형은 API마다 다르다.

명확성을 기하기 위해 API 문서에는 "일반적인 사용 시나리오, 코드 조각, 설계 근거, 성능 토론 및 계약"뿐만 아니라 API의 클래스 및 메서드에 대한 설명이 포함될 수 있다. 그러나 API 서비스 자체의 구현 세부 사항은 일반적으로 생략.

REST API에 대한 참조 문서는 OpenAPI 사양에 정의된 규정된 형식과 구문을 사용하는 기계 판독 가능한 텍스트 파일인 OpenAPI 문서에서 자동으로 생성될 수 있다. OpenAPI 문서는 API 이름 및 설명과 같은 기본 정보는 물론 API가 액세스할 수 있는 작업에 대한 설명도 정의한다.

API 문서는 자바의 어노테이션과 같은 메타데이터 정보로 강화될 수 있다. 이 메타데이터는 컴파일러, 도구 및 런타임 환경에서 사용자 정의 동작 또는 사용자 정의 처리를 구현하는 데 사용될 수 있다.

== 같이 보기 ==
{{위키공용분류}}
* [[플러그인]]
* [[소프트웨어 개발 키트]]
* [[웹 서비스]]
* [[매시업]]

== 각주 ==
{{각주}}

{{운영 체제}}
{{전거 통제}}
{{토막글|소프트웨어}}

[[분류:API| ]]