API
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
API(Application Programming Interface)는 두 소프트웨어 시스템이 서로 통신할 수 있도록 설계된 인터페이스로, 소프트웨어의 특정 기능을 외부에서 사용할 수 있게 해준다. API는 사용자 인터페이스와 달리 일반적으로 사용자에게 보이지 않으며, 레고 블록처럼 소프트웨어 서비스를 결합하여 새로운 소프트웨어를 구성하는 데 사용된다. API는 기상 센서와 기상 예보 앱의 예시처럼 서비스 제공자와 이를 사용하는 개발자 간의 계약과 같다. API는 소스 코드 기반이며 ABI와 구별된다. API의 역사는 1940년대 모듈식 소프트웨어 라이브러리에서 시작되었으며, 1968년 "애플리케이션 프로그램 인터페이스"라는 용어가 처음 사용되었다. API는 라이브러리, 프레임워크, 운영 체제, 원격 API, 웹 API 등 다양한 유형으로 존재하며, 웹 API는 HTTP 요청과 JSON 형식의 응답 메시지로 정의된다. API는 정보 은닉 원칙에 따라 설계되며, API 공개 정책에 따라 비공개, 파트너, 공개 등으로 나뉜다. API 문서는 API의 사용법을 설명하며, API 저작권 관련하여 미국 대법원은 API에 저작권을 인정하고 공정 사용을 허용하는 판결을 내렸다.
더 읽어볼만한 페이지
- 기술 소통 - 교열
교열은 글의 명확성과 정확성을 높이기 위해 문법, 용법, 내용, 구성 요소 간의 관계 등을 고려하여 오류를 수정하고 재구성하는 복잡한 과정으로, 디지털 환경 변화에 따라 역할이 재정립되고 있다. - 기술 소통 - 국제화와 지역화
국제화는 소프트웨어를 다양한 언어와 지역을 지원하도록 설계하는 과정이며, 지역화는 특정 언어와 지역에 맞춰 조정하는 과정으로, 문자 인코딩, 날짜/시간 형식, 통화, 법적 규제, 문화적 차이 등을 고려하여 제품을 적응시키는 것을 의미한다. - API - Tk (소프트웨어)
Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다. - API - ASIO
ASIO는 독일 스타인버그에서 개발한 오디오 입출력 API 규격으로, 낮은 지연 시간과 멀티 채널 I/O를 지원하며 윈도우 운영체제에서 주로 사용된다. - 표시 이름과 문서 제목이 같은 위키공용분류 - 라우토카
라우토카는 피지 비치레부섬 서부에 위치한 피지에서 두 번째로 큰 도시이자 서부 지방의 행정 중심지로, 사탕수수 산업이 발달하여 "설탕 도시"로 알려져 있으며, 인도에서 온 계약 노동자들의 거주와 미 해군 기지 건설의 역사를 가지고 있고, 피지 산업 생산의 상당 부분을 담당하는 주요 기관들이 위치해 있다. - 표시 이름과 문서 제목이 같은 위키공용분류 - 코코넛
코코넛은 코코넛 야자나무의 열매로 식용 및 유지로 사용되며, 조리되지 않은 과육은 100g당 354kcal의 열량을 내는 다양한 영양 성분으로 구성되어 있고, 코코넛 파우더의 식이섬유는 대부분 불용성 식이섬유인 셀룰로오스이며, 태국 일부 지역에서는 코코넛 수확에 훈련된 원숭이를 이용하는 동물 학대 문제가 있다.
| API | |
|---|---|
| 애플리케이션 프로그래밍 인터페이스 | |
| 정의 | 애플리케이션 소프트웨어를 구축하고 통합하기 위한 정의 및 프로토콜 세트이다. |
| 약어 | API (에이피아이) |
| 용도 | 서로 다른 소프트웨어 시스템 간의 상호 작용을 가능하게 한다. |
| 역사 | |
| 초기 API | 초기 API는 운영 체제 루틴이나 BIOS와 같은 저수준 인터페이스였다. |
| 원격 API | 원격 API는 1970년대에 등장했으며, 초기에는 독점적이었다. |
| 웹 API | 2000년대 초반에 등장하여 소프트웨어 개발 방식에 큰 변화를 가져왔다. |
| 유형 | |
| 웹 API | HTTP를 통해 접근 가능한 API로, REST, SOAP, GraphQL 등이 있다. |
| 라이브러리 API | 특정 프로그래밍 언어에서 사용할 수 있는 함수 및 클래스 집합이다. |
| 운영 체제 API | 운영 체제에서 제공하는 API로, 시스템 자원 및 서비스에 접근하는 데 사용된다. |
| 설계 원칙 | |
| 단순성 | 사용하기 쉬워야 한다. |
| 명확성 | 기능이 명확하게 정의되어야 한다. |
| 일관성 | 동작 방식이 예측 가능해야 한다. |
| 보안 | 보안 취약점을 최소화해야 한다. |
| 활용 사례 | |
| 소셜 미디어 API | 소셜 미디어 플랫폼의 데이터 및 기능에 접근하는 데 사용된다. |
| 지도 API | 지도 데이터를 제공하고, 위치 기반 서비스를 구축하는 데 사용된다. |
| 결제 API | 온라인 결제 처리를 간소화하는 데 사용된다. |
| 보안 문제 | |
| 인증 및 권한 부여 | API에 접근하는 사용자를 식별하고, 권한을 관리하는 것이 중요하다. |
| 데이터 유출 | API를 통해 민감한 데이터가 유출될 수 있으므로, 적절한 보안 조치가 필요하다. |
| 서비스 거부 공격 (DoS) | API 서버가 과도한 요청으로 인해 마비될 수 있으므로, 방어 메커니즘이 필요하다. |
2. API의 정의 및 목적
API는 소프트웨어 시스템들이 서로 상호 작용할 수 있도록 하는 명세이다. 이는 두 소프트웨어 시스템이 서로 합의된 신호를 사용하여 인터페이스를 통해 통신할 수 있게 한다.[2] API는 사용자에게 보이지 않고 기계 간 통신에 사용되는 소프트웨어 시스템의 "내부" 부분이다.[3]
잘 설계된 API는 필요한 객체나 작업만 노출하고 불필요한 세부 사항을 숨긴다. 이러한 추상화는 프로그래밍을 단순화한다.[4]
API를 사용하여 소프트웨어를 구축하는 것은 레고 블록과 같은 조립 완구를 사용하는 것에 비유할 수 있다. 소프트웨어 라이브러리는 블록과 유사하며, API를 통해 결합하여 새로운 소프트웨어 제품을 구성할 수 있다.[5]
예를 들어, API를 제공하는 기상 센서를 생각해 보자. 특정 메시지가 센서로 전송되면 현재 기상 조건을 감지하고 기상 보고서를 회신한다. 이때 메시지는 API ''호출''이고, 기상 보고서는 API ''응답''이다.[6] 기상 예보 앱은 여러 기상 센서 API와 통합하여 특정 지역의 기상 데이터를 수집할 수 있다.
API는 종종 계약에 비유되기도 한다. API를 제공하는 서비스 제공자와 이를 사용하는 소프트웨어 개발자 간의 합의를 나타낸다. API가 안정적으로 유지되거나 예측 가능한 방식으로 변경되는 경우 개발자의 API에 대한 신뢰도가 높아져 API 사용을 증가시킬 수 있다.[7]
API는 시스템/서비스 제공자가 공식적으로 사양(''외부 사양'')을 정의하고 관리하는 각종 기능을 이용하기 위한 조작 방법(인터페이스)을 제공한다. API는 대부분 애플리케이션을 구축하는 언어와 동일한 언어의 라이브러리, 혹은 통신 프로토콜 형식[76]으로 제공되며, 시스템/서비스 개발자에 의해 제공 및 관리된다.
API를 사용하면 시스템/서비스가 갱신되어도 API가 제공자에 의해 호환성을 유지해주기 때문에, 애플리케이션 측의 변경은 필요 없다. 하지만, API 제공자로부터 사용 횟수 등에 제한을 받을 수 있다.[78]
2. 1. API와 ABI
API는 응용 프로그램 이진 인터페이스(ABI)와 구별된다. API는 소스 코드 기반인 반면, ABI는 이진 인터페이스이다. 예를 들어 POSIX는 API인 반면, 리눅스 기본 규격은 ABI를 제공한다.[111][112]2. 2. 절차적 언어와 객체지향 언어에서의 API
대부분의 절차적 언어에서 API는 특정한 작업을 수행하는 함수들의 집합을 규정하며, 특정 소프트웨어 구성 요소와 상호 작용할 수 있게 한다.유닉스 명령어 `man 3 sqrt`는 `sqrt` 함수의 시그너처를 보여준다.
```text
SYNOPSIS
#include
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...
```
다른 언어들도 절차적 라이브러리를 갖고 있다. 예를 들어 펄에는 내부 문서화 기능을 이용할 수 있는 동일한 수식 작업을 위한 전용 API들이 있으며, perldoc 유틸리티를 이용하여 접근할 수 있다.
```text
$ 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.
3. API의 역사
API의 개념은 용어 자체보다 역사가 깊다. 1940년대 모리스 윌크스와 데이비드 휠러는 초기 컴퓨터 EDSAC을 위한 모듈식 소프트웨어 라이브러리를 연구했다. 이 라이브러리의 서브루틴은 천공 카드에 저장되어 파일 캐비닛에 정리되었으며, 각 서브루틴에 대한 메모와 사용법을 담은 "라이브러리 카탈로그"가 포함되어 있었다. 이 카탈로그는 오늘날의 API 문서와 같은 역할을 했다.[8] 윌크스와 휠러의 저서 ''The Preparation of Programs for an Electronic Digital Computer''에는 최초로 출판된 API 사양이 포함되어 있다.[8]
"애플리케이션 프로그램 인터페이스"라는 용어는 1968년 AFIPS 컨퍼런스에서 발표된 논문에서 처음 등장했다.[9][8] 이 논문에서는 그래픽스 프로그램과 컴퓨터 시스템 간의 상호 작용을 설명하기 위해 이 용어를 사용했으며, 일관된 애플리케이션 인터페이스를 통해 프로그래머가 그래픽스 디스플레이 장치의 특성을 처리하지 않고도 프로그램을 작성할 수 있도록 했다.[10]
1970년대 데이터베이스 분야에서 C. J. 데이트는 API 개념을 관계형 및 네트워크 접근 방식 비교에 도입했다.[11][12] API는 ANSI/SPARC 프레임워크의 일부가 되었으며, 쿼리 인터페이스와는 별도로 취급되었다. 당시 데이터베이스 전문가들은 이러한 다양한 인터페이스를 결합할 수 있음을 발견했고, 충분히 풍부한 애플리케이션 인터페이스는 다른 인터페이스도 지원할 수 있었다.[13]
1990년대에 API는 모든 유형의 프로그래밍을 지원하는 개념으로 확장되었다.[14] 2000년대 이후 웹 API가 등장하면서 API는 인터넷 통신의 핵심 요소가 되었다. 로이 필딩은 2000년 논문에서 표현 상태 전송(REST)를 개략적으로 설명하고, "네트워크 기반 애플리케이션 프로그래밍 인터페이스"의 아이디어를 제시했다.[16] XML 및 JSON 웹 API는 2000년부터 2021년까지 널리 사용되었으며, 웹 API는 현재 API라는 용어의 가장 일반적인 의미가 되었다.[17]
4. API의 유형
API에는 여러 유형이 있으며, 각각 다른 목적과 방식으로 사용된다.
API는 대부분 애플리케이션을 구축하는 언어와 동일한 언어의 라이브러리, 혹은 통신 프로토콜 형식[76]으로 제공되며, 시스템/서비스 개발자에 의해 제공 및 관리된다. API를 사용하면 시스템/서비스가 갱신되어도 API가 제공자에 의해 후방 호환성을 유지해주기 때문에, 애플리케이션 측의 변경은 필요 없다. 하지만 API 제공자로부터 사용 횟수 등에 제한을 받을 수 있다.[78]
API는 다음과 같이 분류할 수 있다.
- 라이브러리와 프레임워크: 소프트웨어 라이브러리의 인터페이스는 API의 한 유형이다.
- 운영 체제 API: POSIX는 POSIX 호환 운영 체제용으로 작성된 애플리케이션을 다른 POSIX 호환 운영 체제용으로 컴파일할 수 있도록 하는 공통 API 집합을 지정한다.
- 원격 API: 개발자가 통신 프로토콜을 통해 원격 리소스를 조작할 수 있도록 해주며, 이는 서로 다른 기술이 언어나 플랫폼에 관계없이 함께 작동할 수 있도록 하는 특정 통신 표준이다.
- 웹 API: 웹 애플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세를 말한다.
4. 1. 라이브러리와 프레임워크
소프트웨어 라이브러리의 인터페이스는 API의 한 유형이다. API는 "예상되는 동작"(사양)을 명시하고, 라이브러리는 이 규칙 집합의 "실제 구현"이다.[19] API와 구현의 분리는 한 언어로 작성된 프로그램이 다른 언어로 작성된 라이브러리를 사용할 수 있게 한다. 예를 들어, 스칼라와 자바는 호환되는 바이트코드로 컴파일되기 때문에, 스칼라 개발자는 모든 자바 API를 활용할 수 있다.[19]단일 API는 동일한 프로그래밍 인터페이스를 공유하는 서로 다른 라이브러리 형태로 여러 구현(또는 추상적인 경우 없음)을 가질 수 있다.
API 사용은 관련된 프로그래밍 언어 유형에 따라 다를 수 있다. 절차적 언어인 루아의 API는 코드를 실행하고, 데이터를 조작하거나, 오류를 처리하는 기본 루틴으로 구성될 수 있으며, 객체 지향 언어인 자바의 API는 클래스 및 해당 클래스 메서드에 대한 사양을 제공한다.[20][21]
언어 바인딩도 API이다. 한 언어의 기능과 성능을 다른 언어로 구현된 인터페이스에 매핑함으로써, 언어 바인딩은 한 언어로 작성된 라이브러리 또는 서비스를 다른 언어로 개발할 때 사용할 수 있도록 한다.[24]
API는 소프트웨어 프레임워크와 관련될 수도 있다. 프레임워크는 여러 API를 구현하는 여러 라이브러리를 기반으로 할 수 있지만, API의 일반적인 사용과는 달리, 프레임워크에 내장된 동작에 대한 액세스는 프레임워크 자체에 플러그된 새로운 클래스로 콘텐츠를 확장하여 중재된다. 또한, 전반적인 프로그램 흐름은 제어 반전 또는 유사한 메커니즘에 의해 호출자의 제어에서 벗어나 프레임워크의 손에 들어갈 수 있다.[26][27]
4. 2. 운영 체제 API
POSIX는 POSIX 호환 운영 체제용으로 작성된 애플리케이션을 다른 POSIX 호환 운영 체제용으로 컴파일할 수 있도록 하는 공통 API 집합을 지정한다.[28] 리눅스와 버클리 소프트웨어 배포판은 POSIX API를 구현하는 운영 체제의 예이다.[29] 마이크로소프트는 윈도우 API (Win32) 라이브러리 내에서 이전 버전과의 호환성을 위한 API에 강한 노력을 보여왔으며, 이전 애플리케이션이 "호환 모드"라는 실행 파일별 설정을 사용하여 새로운 버전의 윈도우에서 실행될 수 있도록 한다.[30]4. 3. 원격 API
원격 API는 개발자가 통신 프로토콜을 통해 원격 리소스를 조작할 수 있도록 해주며, 이는 서로 다른 기술이 언어나 플랫폼에 관계없이 함께 작동할 수 있도록 하는 특정 통신 표준이다. 예를 들어, 자바 데이터베이스 연결 API를 사용하면 개발자가 동일한 기능 집합으로 여러 유형의 데이터베이스를 쿼리할 수 있으며, 자바 원격 메서드 호출 API는 자바 원격 메서드 프로토콜을 사용하여 원격으로 작동하지만 개발자에게는 로컬인 것처럼 보이는 함수의 원격 프로시저 호출을 허용한다.[33][34]따라서 원격 API는 객체 지향 프로그래밍에서 객체 추상화를 유지하는 데 유용하다. 프록시 객체에서 로컬로 실행되는 메서드 호출은 리모팅 프로토콜을 사용하여 원격 객체에서 해당 메서드를 호출하고, 반환 값으로 로컬에서 사용될 결과를 얻는다. 프록시 객체를 수정하면 원격 객체도 해당 수정 사항이 적용된다.[35]
API는 프로토콜의 구현일 수도 있다. 프로토콜은 공통 전송 수단을 기반으로 하는 요청과 응답의 표준적인 교환 방법을 정의한다. 한편, 프로토콜을 구현하지 않은 API는 라이브러리로 구현되어 직접 사용되는 것이 일반적이다. 따라서 API에는 "전송 수단"이 관여하지 않고 (원격 머신과의 물리적 정보 전송을 수행하지 않음), "함수 호출"에 의해 단순하게 정보 교환을 하며, 데이터는 특정 언어로 표현된 형식으로 교환된다.[82]
API가 프로토콜의 구현인 경우, 하위에 있는 통신 프로토콜을 사용하여 원격 호출을 수행하기 위한 프록시적 수단이 된다. 이 경우 API의 역할은 프로토콜의 세부 사항을 은폐하는 것이다. 예를 들어 Java RMI는 JRMP영어 프로토콜 또는 RMI-IIOP로서의 IIOP를 구현하고 있다.
4. 4. 웹 API
웹 API는 웹 애플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세를 말한다. 예를 들어, 블로그 API를 이용하면 블로그에 직접 접속하지 않고도 다른 방법으로 글을 올릴 수 있다.[36] 우체국의 우편번호 API, 구글과 네이버의 지도 API 등 유용한 API들이 많아, 최근에는 홈페이지 구축이나 개편 시 이러한 오픈 API를 활용하는 추세이다.웹 API는 기업과 애플리케이션 간의 상호 작용을 위한 인터페이스이며, 서비스 제공자와 API 사용자 간의 서비스 수준 계약(SLA)이기도 하다. API는 다양한 유형의 소비자에 서비스를 제공하는 애플리케이션에 프로그램 인터페이스를 제공하는 아키텍처 접근 방식이다.[36]
웹 개발 도구의 맥락에서, 웹 API는 일반적으로 하이퍼텍스트 전송 프로토콜(HTTP) 요청 메시지 집합과 XML 또는 JSON 형식의 응답 메시지 구조 정의로 구성된다. 예를 들어, 배송 회사의 API를 통해 전자 상거래 웹사이트 개발자는 배송 서비스를 주문하고 현재 배송 요금을 자동으로 포함할 수 있다.[37]
최근에는 웹 2.0의 추세에 따라 SOAP 기반 웹 서비스에서 REST 스타일의 웹 리소스 및 리소스 지향 아키텍처(ROA)로 이동하고 있다.[37] 이는 시맨틱 웹 운동과 관련이 있으며, 웹 API를 통해 여러 API를 매시업으로 결합할 수 있게 한다.[38]
소셜 미디어 영역에서 웹 API는 웹 커뮤니티 간 콘텐츠 및 데이터 공유를 용이하게 한다. 한 곳에서 생성된 콘텐츠는 웹의 여러 위치에 동적으로 게시되고 업데이트될 수 있다.[39] 예를 들어, 트위터의 REST API를 통해 개발자는 트위터 데이터에 접근할 수 있으며, 검색 API를 통해 트위터 검색 및 트렌드 데이터와 상호 작용할 수 있다.[40]
웹 API는 HTTP 요청 메시지와 JSON 형식 등의 응답 메시지로 구성된다. 웹 2.0에서는 SOAP 기반에서 REST 기반으로 변화하고 있다.[83] 웹 API는 매시업을 통해 여러 서비스를 결합하여 새로운 애플리케이션을 만드는 것을 가능하게 한다.[84]
웹 API 덕분에 다음과 같은 공유 방식이 가능하다.
- 사진은 Flickr나 Photobucket과 같은 사이트에서 페이스북(Facebook)이나 마이스페이스(Myspace)와 같은 소셜 네트워크 사이트로 공유된다.
- 콘텐츠를 임베드할 수 있다. 예를 들어, SlideShare의 프레젠테이션 자료를 LinkedIn 프로필에 임베드할 수 있다.
- 트위터(Twitter)의 트윗을 페이스북(Facebook) 게시물에 동시에 반영시키는 API도 있다.
- 동영상 콘텐츠도 다른 호스트상의 사이트에 임베드할 수 있다.
- 웹 커뮤니티의 사용자 정보를 외부 애플리케이션과 공유하고, 애플리케이션 업데이트를 웹에서 수행하는 기능도 오픈 API로 구현된다.
WebAPI는 다양한 스타일로 표현된다. 예를 들어, 리소스 표현 형식은 다음과 같다.
- URL 경로명: `https://API.internal./japan/tokyo/sinjuku`
- URL 쿼리 문자열: `https://API.internal./?country=japan&prefecture=tokyo&city=sinjuku`
- 요청 본문: `POST https://API.internal. Body {country: japan, prefecture: tokyo, city: sinjuku}`
널리 알려진 WebAPI 스타일은 다음과 같다.
5. API 설계 및 구현
API 설계는 사용성에 큰 영향을 미친다.[4] 정보 은닉 원칙에 따라 모듈의 구현 세부 사항을 숨겨 모듈 사용자가 내부 복잡성을 이해할 필요가 없도록 해야 한다.[41] 따라서 API 설계는 사용자가 기대하는 도구만 제공하는 것을 목표로 한다.[4]
윈도우는 API와 ABI에 하위 호환성이 있어, Visual C++와 Windows SDK를 사용하여 개발된 애플리케이션은 지정된 버전 이후의 모든 윈도우에서 작동한다.[86] 폐지된 API 함수 등을 사용하지 않는 한, 애플리케이션을 수정하거나 다시 빌드할 필요는 없다.
안드로이드에는 "API 레벨"이라는 개념이 존재하며, 안드로이드 OS의 버전마다 API 레벨 번호가 할당되어 있다. 예를 들어 안드로이드 10은 API 레벨 29에 해당한다. 특정 API 레벨에서 추가된 기능을 이용하려면, 애플리케이션 빌드 시 설정을 통해 값을 해당 API 레벨 번호 이후로 설정하고, 지정된 버전 이후의 안드로이드 SDK를 사용하여 빌드해야 한다.
5. 1. API 구현 방식 (일본 문서 내용)
POSIX 표준은 여러 시스템에서 공통 기능을 구현하기 위한 API를 정의한다. 예를 들어, macOS나 BSD 계열 시스템에서 구현되고 있다. 단, ABI나 실행 파일 형식은 표준화되지 않았기 때문에, POSIX 준수 프로그램을 다른 POSIX 준수 플랫폼에서 실행하려면 다시 컴파일해야 한다.[77]API 및 ABI에 호환성이 있는 시스템이라면 어디에서나 같은 바이너리를 그대로 실행할 수 있다. 이는 애플리케이션 소프트웨어 벤더와 사용자 모두에게 유익하다. 벤더는 호환 API/ABI가 구현되어 있다면 새로운 시스템이 등장해도 애플리케이션 제품을 수정·리빌드할 필요가 없고, 사용자도 오래된 소프트웨어를 하위 호환성을 갖춘 새 시스템에 설치하여 사용할 수 있다. 단, 이를 위해서는 일반적으로 각종 라이브러리가 필요한 API 군을 구현하고 있어야 한다.[77]
윈도우는 API/ABI에 하위 호환성이 있으며, Visual C++와 Windows SDK를 사용하여 개발된 애플리케이션은 지정한 버전 이후의 모든 윈도우에서 작동한다.[86] 폐지된 API 함수 등을 사용하지 않는 한, 애플리케이션을 수정·리빌드할 필요는 없다. 새로운 버전의 윈도우에서 추가된 기능을 사용하고 싶을 경우, 심볼[85]을 해당 버전에 맞춰 정의하거나, `LoadLibrary` 함수를 사용하여 동적으로 로드한다.[86]
윈도우 XP 이후에는 "호환 모드"가 준비되어 있다. 이는 시스템 측에서 반환하는 정보를 특정 버전의 윈도우의 것으로 위장하여, 애플리케이션을 속여 작동시키는 구제 조치이며[87][88][89], 원래는 애플리케이션 측에서 API 외부 사양에 따라 올바르게 수정하는 것이 바람직하다.
유닉스 계열 OS에서는 상호 관련성은 있지만 비호환적인 OS군이 동일 하드웨어상에서 작동하고 있다. 소프트웨어 업체가 동일 바이너리로 여러 OS에 대응할 수 있도록 API와 ABI를 공통화하려는 시도가 이루어져 왔지만, 모두 실패로 끝났다. 그러한 시도로서 리눅스에는 Linux Standard Base가 있다. BSD 계열 OS도 여러 종류가 있지만, 호환성의 수준은 다양하다.[77]
안드로이드에는 "API 레벨"이라는 개념이 존재하며, 안드로이드 OS의 버전마다 API 레벨 번호가 할당되어 있다. 예를 들어 안드로이드 10은 API 레벨 29에 해당한다. 특정 API 레벨에서 추가된 기능을 이용하려면, 애플리케이션의 빌드 시 설정[90][91]에서 값을 해당 API 레벨 번호 이후로 설정하고, 지정된 버전 이후의 안드로이드 SDK를 사용하여 빌드해야 한다. 또한, 설정[90][91]에 따라 애플리케이션의 설치 및 실행에 필요한 최소 시스템 버전을 지정할 수 있다. 이하의 기능은 (폐지된 것이 아닌 한) 무조건 사용할 수 있지만, 초과하는 버전에서 추가된 기능을 사용할 경우, [https://developer.android.com/reference/android/os/Build.VERSION android.os.Build.VERSION] 클래스의 필드 값에 따라 동적 분기하는 처리를 구현해야 한다.[77]
6. API 공개 정책
- 비공개: API는 회사 내부용으로만 사용된다.
- 파트너: 특정 비즈니스 파트너만 API를 사용할 수 있다. 예를 들어, 우버 및 리프트와 같은 차량 공유 서비스 회사는 승인된 제3자 개발자가 앱 내에서 직접 차량을 호출할 수 있도록 한다. 이를 통해 회사는 API에 접근할 수 있는 앱을 선별하여 품질 관리를 하고, 추가적인 수익원을 확보할 수 있다.[45]
- 공개: API는 일반 대중이 사용할 수 있다. 예를 들어, 마이크로소프트는 Windows API를 공개하고, 애플은 자사의 컴퓨팅 플랫폼을 위한 소프트웨어를 개발할 수 있도록 Cocoa API를 공개한다. 모든 공개 API가 모든 사람에게 접근 가능한 것은 아니다. 예를 들어, Cloudflare 또는 Voxility와 같은 인터넷 서비스 제공업체는 RESTful API를 사용하여 고객 및 리셀러가 인프라 정보, DDoS 통계, 네트워크 성능 또는 대시보드 제어에 접근할 수 있도록 한다.[46] 이러한 API에 대한 접근 권한은 "API 토큰" 또는 고객 상태 검증을 통해 부여된다.[47]
공개 API에서 중요한 요소는 "인터페이스 안정성"이다. API 변경, 예를 들어 함수 호출에 새로운 매개변수를 추가하는 것은 해당 API에 의존하는 클라이언트와의 호환성을 깨뜨릴 수 있다.[48]
공개 API의 일부가 변경될 수 있고 안정적이지 않은 경우, 해당 부분은 "불안정"으로 명시적으로 문서화되어야 한다. 예를 들어, 구글 구아바 라이브러리에서 불안정하다고 간주되어 곧 변경될 수 있는 부분은 자바 어노테이션 `@Beta`로 표시된다.[49]
공개 API는 때때로 자체의 일부를 ''사용 중단'' 또는 철회로 선언할 수 있다. 이는 일반적으로 API의 해당 부분이 제거되거나 이전 버전과 호환되지 않는 방식으로 수정될 가능성이 있음을 의미한다. 따라서 이러한 변경을 통해 개발자는 향후 제거되거나 지원되지 않을 API의 부분에서 벗어날 수 있다.[50]
API 공개와 관련하여 소니는 라이선스를 가진 개발자에게만 플레이스테이션 공개 API를 이용할 수 있도록 하고, 마이크로소프트는 계획적으로 API에 관한 정보를 공개하여 누구나 쉽게 Windows 플랫폼용 소프트웨어를 제작할 수 있도록 하는 등 자사 API를 엄중히 비공개하거나 널리 보급하는 두 가지 정책과 그 중간 형태가 존재한다.
6. 1. 사이버 보안 위협 (영어 문서 내용)
아카마이 테크놀로지스가 2020년 2월 19일에 발표한 연례 "인터넷 현황" 보고서에 따르면, 전 세계 금융 서비스의 공개 API 플랫폼을 노리는 사이버 범죄가 증가하는 추세를 보였다.[52] 2017년 12월부터 2019년 11월까지 아카마이는 854억 2천만 건의 자격 증명 위반 공격을 탐지했다. 이 중 약 20%인 165억 5천만 건은 API 엔드포인트로 정의된 호스트 이름을 대상으로 했다. 특히, 금융 서비스 부문 조직을 대상으로 한 공격은 4억 7350만 건에 달했다.[52]7. API 문서화
API 문서는 API가 제공하는 서비스와 해당 서비스를 사용하는 방법을 설명하며, 실제 목적으로 클라이언트가 알아야 할 모든 것을 다루는 것을 목표로 한다.[53]
API를 사용하는 애플리케이션을 개발하고 유지 관리하려면 문서화가 중요하다.[53] API 문서는 전통적으로 문서 파일에서 찾을 수 있지만, 블로그, 포럼, Q&A 웹사이트 등 소셜 미디어에서도 찾을 수 있다.[54]
기존 문서 파일은 Javadoc, Pydoc과 같이 일관된 모양과 구조를 가진 문서 시스템을 통해 표시되는 경우가 많다. 그러나 문서에 포함된 콘텐츠 유형은 API마다 다르다.[55]
API 문서에는 명확성을 위해 API의 클래스 및 메서드 설명뿐만 아니라 "일반적인 사용 시나리오, 코드 조각, 설계 근거, 성능 토론 및 계약"을 포함할 수 있다. 그러나 API 서비스 자체의 구현 세부 정보는 일반적으로 생략된다.
API 사용 방법에 대한 제한 및 제약 사항도 문서에서 다룬다. 예를 들어, API 함수에 대한 문서는 해당 매개변수가 null이 될 수 없거나, 함수 자체가 스레드 안전하지 않다는 점을 언급할 수 있다.[56] API 문서는 포괄적인 경향이 있으므로 작성자가 문서를 최신 상태로 유지하고 사용자가 주의 깊게 읽어 잠재적인 버그를 발견하는 것은 어려운 일이다.[48]
API 문서는 자바 어노테이션과 같은 메타데이터 정보로 풍부하게 만들 수 있다. 이 메타데이터는 컴파일러, 도구 및 "런타임" 환경에서 사용자 지정 동작 또는 사용자 지정 처리를 구현하는 데 사용할 수 있다.[57]
8. API와 저작권
2010년, 오라클은 안드로이드 운영 체제에 자바 API를 무단으로 사용했다는 이유로 구글을 고소했다.[59] 윌리엄 알섭 판사는 API는 미국에서 저작권으로 보호받을 수 없다고 판결했지만, 이 판결은 2014년 연방 순회 항소 법원에서 뒤집혔다. 다만, API 사용이 공정 이용에 해당하는지는 해결되지 않았다.[62][63]
2016년 재판에서 배심원단은 구글의 자바 API 재구현이 공정 이용에 해당한다고 결정했지만, 오라클은 항소했다. 결국 오라클이 항소에서 승리하여, 구글의 API 사용이 공정 이용에 해당하지 않는다고 판결되었다.[65] 2019년 구글은 미국 연방 대법원에 상고했고, 대법원은 심리를 허가했다.[66] 코로나19 범유행으로 인해 구두 변론은 2020년 10월로 연기되었다.[67] 이 사건은 대법원에서 구글의 승소로 결정되었다.[68]
일본에서는 저작권법 제10조 제3항에 따라 프로그램 인터페이스나 프로토콜이 저작물로 간주되지 않는다.[97]
호환성을 위해 API 구현을 분석하는 것은 일반적으로 합법적인 리버스 엔지니어링으로 간주된다.
8. 1. 한국의 API 저작권 관련 현황
2010년 미국 오라클과 구글 간의 Java API 저작권 소송은, 미국 내에서 API 저작권이 인정되는 계기가 되었으나, 2021년 대법원은 구글의 API 사용이 공정 사용에 해당한다고 판결하였다.[96]한국의 경우, 일본과 달리 프로그램 인터페이스에 대한 명확한 저작권법 규정은 없다. 하지만 오라클-구글 소송 이후, 한국 IT 업계에서도 API 저작권 보호 범위에 대한 논의가 활발하게 진행되고 있다. 더불어민주당은 API 저작권 보호와 기술 혁신 간의 균형점을 찾는 것이 중요하다고 강조한다.
9. API의 예
10. 유사 개념
- DDI (장치 드라이버 인터페이스)는 장치 드라이버를 개발하기 위한 소프트웨어 인터페이스로, Windows 및 Linux 용어이다.
- SPI (시스템 프로그래밍 인터페이스)는 시스템 제어 및 확장을 위한 인터페이스로, 애플리케이션 구축용이 아닌 시스템 제어를 위해 사용된다.[98][99][100]
- 펌웨어 인터페이스는 펌웨어를 개발하기 위한 소프트웨어 인터페이스로, UEFI 등이 있다.[101]
- ASPI는 SCSI 장치를 제어하기 위한 소프트웨어 인터페이스이다.
특히 DDI나 펌웨어 인터페이스를 사용하는 경우, 소프트웨어가 애플리케이션과 다른 환경에서 동작하여 API에 의존하는 라이브러리를 사용할 수 없는 경우가 있어 개발자는 자신이 무엇을 사용하고 있는지 인지할 필요가 있다.
11. 언어 바인딩과 인터페이스 생성기
언어 바인딩은 한 언어의 기능을 다른 언어에서 사용할 수 있도록 하는 API이다. 여러 고급 프로그래밍 언어에서 사용하기 위한 API는 문법적, 의미적으로 각 언어에 적합한 인터페이스를 API에 자동으로 매핑하는 기능을 제공하는데, 이를 언어 바인딩이라고 하며 그 자체도 API이다. 그 목적은 해당 API에 요구되는 기능의 대부분을 캡슐화하기 위해 각 언어에 얇은 계층을 두는 것이다.[102]
컴파일 시점에 언어와 API의 바인딩을 수행하는 인터페이스 생성기는 다음과 같다.
12. 비공식 API (일본 문서 내용)
애플리케이션이 시스템/서비스를 이용할 때, API를 통하지 않고 시스템/서비스의 현재 구현 및 내부 사양에 의존하는 방식을 비API라고 부른다.[77] 영어권에서는 non-API[78][79] 또는 non API[80]라고 한다. 이는 마치 사람이 직접 조작하는 것처럼 애플리케이션을 만들거나, 설정 파일을 읽는 방식 등이 해당된다.
시스템/서비스 제공자는 애플리케이션이 API 외의 사양에 의존하는지 알 수 없으며, 이를 보증하지도 않는다. 따라서 비API를 사용하면 시스템/서비스가 업데이트될 때 애플리케이션이 작동하지 않을 수 있다. 반면, API는 제공자가 호환성을 유지하므로 애플리케이션을 변경할 필요가 없다.
하지만 API는 사용 횟수 제한 등이 있을 수 있고,[78] 이러한 제한을 피하거나 API가 없는 시스템/서비스를 이용하기 위해 비API 기술이 필요할 때도 있다.
마이크로소프트 윈도우, macOS, iOS, 안드로이드 같은 OS에는 "숨겨진 API" 또는 "비공개 API"라고 불리는 비API가 존재한다. 이는 시스템 내부에서만 사용하도록 만들어졌으며, 자바나 .NET Framework에서는 리플렉션을 통해 호출할 수도 있다.
그러나 이러한 기능은 공식적으로 제공되는 것이 아니므로, 이를 사용한 애플리케이션의 동작은 보장되지 않으며, 호환성도 보장되지 않는다. 예를 들어, Windows API의 `timeBeginPeriod()`, `timeEndPeriod()` 함수는 내부적으로 `NtSetTimerResolution()`를 호출하는데,[103] `NtSetTimerResolution()`는 비API 함수이므로[104] 직접 사용하면 문제가 발생할 수 있다. Eclipse에서는 플러그인 개발 시 비API를 사용하면 오류가 발생하도록 설정할 수 있다.[105] 애플의 App Store에서는 비API를 사용한 애플리케이션의 게재를 거부한다.[106]
참조
[1]
서적
API Design for C++
https://books.google[...]
Elsevier Science
2011
[2]
서적
Building an API Product: Design, Implement, Release, and Maintain API Products that Meet User Needs
https://books.google[...]
Packt Publishing
[3]
서적
RESTful API Design
API-University Press
[4]
웹사이트
Measuring API Usability
http://www.drdobbs.c[...]
2004-07-29
[5]
서적
Designing Web APIs: Building APIs That Developers Love
https://books.google[...]
O'Reilly Media
[6]
서적
API Design Patterns
https://books.google[...]
Manning
[7]
서적
APIs: A Strategy Guide
https://books.google[...]
O'Reilly Media
[8]
강연
A Brief, Opinionated History of the API
https://www.infoq.co[...]
InfoQ
2018-08-08
[9]
사전
application program interface
[10]
학회
Data structures and techniques for remote computer graphics
https://www.computer[...]
Association for Computing Machinery
1968-12-00
[11]
서적
E. F. Codd and Relational Theory: A Detailed Review and Analysis of Codd's Major Database Writings
https://books.google[...]
Lulu.com
[12]
학회
The relational and network approaches: Comparison of the application programming interfaces
https://dl.acm.org/d[...]
Association for Computing Machinery
1975-01-00
[13]
보고서
Database architectures – a feasibility workshop
https://hdl.handle.n[...]
U.S. Department of Commerce, National Bureau of Standards
1981-04-00
[14]
서적
Analyzing Novell Networks
https://babel.hathit[...]
Van Nostrand Reinhold
1990
[15]
서적
Designing Web APIs
https://books.google[...]
O'Reilly Media
[16]
PhD
Architectural Styles and the Design of Network-based Software Architectures
https://www.ics.uci.[...]
2000
[17]
웹사이트
Intro to APIs: History of APIs
https://blog.postman[...]
2019-10-10
[18]
학술지
Semantic APIs: Scaling up towards the Semantic Web
2010-08-00
[19]
웹사이트
Combining Scala and Java
http://www.artima.co[...]
2008-12-10
[20]
학회
The design and implementation of a language for extending applications
https://www.lua.org/[...]
[21]
웹사이트
Just what is the Java API anyway?
https://www.infoworl[...]
2001-07-13
[22]
서적
Software engineering at Google: lessons learned from programming over time
O'Reilly Media
2020
[23]
학회
Use at your own risk: the Java unsafe API in the wild
Association for Computing Machinery
2015-10-23
[24]
웹사이트
Standards, APIs, Interfaces and Bindings
http://www.acm.org/t[...]
Acm.org
[25]
웹사이트
F2PY.org
http://www.f2py.org/
F2PY.org
[26]
웹사이트
Inversion Of Control
http://martinfowler.[...]
[27]
웹사이트
Object-Oriented Application Frameworks
http://www.dre.vande[...]
[28]
서적
POSIX Programmer's Guide
http://shop.oreilly.[...]
O'Reilly & Associates, Inc.
1991
[29]
학술지
Open source standardization: the rise of Linux in the network era
http://www.joelwest.[...]
2001
[30]
웹사이트
Support for Windows XP
http://www.microsoft[...]
Microsoft
2001-10-00
[31]
웹사이트
LSB Introduction
http://www.linuxfoun[...]
Linux Foundation
2012-06-21
[32]
웹사이트
Update on Standards
https://db.usenix.or[...]
USENIX
2005-04-00
[33]
학술지
API Protocol Compliance in Object-Oriented Software
https://www.cs.cmu.e[...]
2009-04-23
[34]
웹사이트
Get smart with proxies and RMI
https://www.infoworl[...]
2000-11-10
[35]
서적
Advanced CORBA Programming with C++
https://archive.org/[...]
Addison-Wesley
[36]
웹사이트
API-fication
https://www.hcltech.[...]
2014-08-01
[37]
논문
Services Mashups: The New Generation of Web Applications
https://www.computer[...]
IEEE
2019-10-01
[38]
간행물
So What Is an Enterprise Mashup, Anyway?
https://www.pcworld.[...]
2008-04-23
[39]
웹사이트
The Evolution of the Social Media API
http://mashable.com/[...]
2009-05-21
[40]
웹사이트
GET trends/place
https://developer.tw[...]
2020-04-30
[41]
논문
On the Criteria To Be Used in Decomposing Systems into Modules
https://www.win.tue.[...]
1972-01-01
[42]
논문
An Introduction to Software Architecture
https://www.cs.cmu.e[...]
1994-01-01
[43]
웹사이트
Business Ecosystem: Creating an Economic Moat
http://boostcompanie[...]
2015-10-10
[44]
웹사이트
Private, Partner or Public: Which API Strategy Is Best for Business?
http://www.programma[...]
2014-02-21
[45]
웹사이트
Car Service APIs Are Everywhere, But What's In It For Partner Apps?
https://www.adexchan[...]
2016-07-07
[46]
웹사이트
Cloudflare API v4 Documentation
https://api.cloudfla[...]
2020-02-25
[47]
웹사이트
Car Service APIs Are Everywhere, But What's In It For Partner Apps
https://www.smashing[...]
2018-01-17
[48]
논문
An Empirical Study on Evolution of API Documentation
https://www.research[...]
2011-01-01
[49]
Github
google/guava: Google Core Libraries for Java
https://github.com/g[...]
[50]
웹사이트
How and When to Deprecate APIs
http://docs.oracle.c[...]
[51]
논문
Empirical evidence of large-scale diversity in API usage of object-oriented software
https://hal.archives[...]
2013-01-01
[52]
웹사이트
Akamai: Cybercriminals are attacking APIs at financial services firms
https://venturebeat.[...]
2020-02-19
[53]
논문
Improving API Documentation Usability with Knowledge Pushing
2009-05-01
[54]
논문
Measuring API documentation on the web
https://www.xmedo.co[...]
2011-05-01
[55]
논문
Patterns of Knowledge in API Reference Documentation
https://www.cs.mcgil[...]
2012-09-01
[56]
논문
What should developers be aware of? An empirical study on the directives of API documentation
2011-12-03
[57]
웹사이트
Annotations
http://download.orac[...]
Sun Microsystems
[58]
논문
Mining subclassing directives to improve framework reuse
2010-01-01
[59]
웹사이트
Oracle and the End of Programming As We Know It
http://www.drdobbs.c[...]
DrDobbs
2012-05-01
[60]
웹사이트
APIs Can't be Copyrighted Says Judge in Oracle Case
https://tgdaily.com/[...]
TGDaily
2012-06-01
[61]
웹사이트
Oracle America, Inc. vs. Google Inc.
https://www.wired.co[...]
Wired
2012-05-31
[62]
웹사이트
Oracle Am., Inc. v. Google Inc., No. 13-1021, Fed. Cir. 2014
https://law.justia.c[...]
[63]
뉴스
Court sides with Oracle over Android in Java patent appeal
https://www.cnet.com[...]
2014-05-09
[64]
웹사이트
Google beats Oracle – Android makes "fair use" of Java APIs
https://arstechnica.[...]
2016-05-26
[65]
웹사이트
Oracle Wins Revival of Billion-Dollar Case Against Google
https://www.bloomber[...]
2018-03-27
[66]
웹사이트
Google asks Supreme Court to overrule disastrous ruling on API copyrights
https://arstechnica.[...]
2019-01-25
[67]
웹사이트
Google LLC v. Oracle America, Inc.
https://www.law.corn[...]
2020-09-28
[68]
웹사이트
Supreme Court of the United States, No. 18–956, GOOGLE LLC, PETITIONER v. ORACLE AMERICA, INC.
https://www.supremec[...]
2021-04-05
[69]
문서
인터페이스 표기법 통일 안내
[70]
웹사이트
API 정의 (IBM)
https://www.ibm.com/[...]
[71]
웹사이트
API - MDN Web Docs Glossary: Definitions of Web-related terms | MDN
https://developer.mo[...]
[72]
웹사이트
API
http://www.ocn.ne.jp[...]
2019-10
[73]
웹사이트
APIとは?初心者向けに分かりやすく解説|シナジー・マーケティング
https://www.synergy-[...]
[74]
웹사이트
Smalltalk環境の提供元Cincomによる見積サービスの説明
https://www.g2crowd.[...]
[75]
웹사이트
Update on Standards
http://c59951.r51.cf[...]
USENIX
2009-06-04
[76]
문서
TCP 또는 UDP 패킷 형식 또는 REST, SOAP와 같은 상위 프로토콜
[77]
웹사이트
Eclipse プラットフォーム API - 使用規則
https://www.ibm.com/[...]
2023-05-24
[78]
웹사이트
Non-API VS API Dropshipping Solution - What Should I Use When I Am Dropshipping on eBay?
https://www.autods.c[...]
2020-07-16
[79]
웹사이트
Prerequisites and limitations - Power Automate
https://learn.micros[...]
2023-02-28
[80]
웹사이트
KalDrop Guide
https://www.zikanaly[...]
2023-05-16
[81]
웹사이트
Inversion Of Control
http://martinfowler.[...]
2012-10-18
[82]
웹사이트
API vs Protocol
http://c2.com/cgi/wi[...]
2012-10-18
[83]
논문
Services Mashups: The New Generation of Web Applications
http://www.infosys.t[...]
Institute of Electrical and Electronics Engineers
2012-10-18
[84]
뉴스
So What Is an Enterprise Mashup, Anyway?
http://www.pcworld.c[...]
2008-04-23
[85]
웹사이트
WINVER および _WIN32_WINNT の変更 | Microsoft Docs
https://docs.microso[...]
[86]
문서
새로운 버전의 컴파일러 및 Windows SDK에서는 어느 정도 오래된 버전의 Windows 지원이 중단될 수도 있습니다.
[87]
웹사이트
121ware.com > 서비스&サポート > Q&A > 정보번호 003142
https://121ware.com/[...]
[88]
웹사이트
Windows 7の互換機能を使いこなす(互換モード編) | 日経 xTECH(クロステック)
https://xtech.nikkei[...]
[89]
웹사이트
Windows 8.1ミニTips(100) 「プログラム互換性アシスタント」を制御する●つの方法 | マイナビニュース
https://news.mynavi.[...]
[90]
웹사이트
[91]
웹사이트
ビルドを設定する | Android Developers
https://developer.an[...]
[92]
웹사이트
Oracle and the End of Programming As We Know It
http://www.drdobbs.c[...]
DrDobbs
2012-05-01
[93]
웹사이트
Jury clears Google of infringing on Oracle's patents
http://www.zdnet.com[...]
2012-05-23
[94]
웹사이트
Google wins crucial API ruling, Oracle’s case decimated
http://arstechnica.c[...]
2012-05-31
[95]
웹사이트
米最高裁がGoogleの訴えを却下、OracleとのJava著作権訴訟で
https://xtech.nikkei[...]
ITPro
2015-06-30
[96]
웹사이트
[速報]10年にわたる著作権訴訟でGoogleがオラクルに勝訴、米連邦最高裁判所で判決。Java SEのコードのコピーはフェアユースの範囲
https://www.publicke[...]
Publickey
2021-04-06
[97]
웹사이트
知的財産権(特許・商標・著作権)の基礎講座
http://www.furutani.[...]
知的財産権(特許・商標・著作権)の基礎講座
[98]
웹사이트
Programming Interface (System Interface Guide)
https://docs.oracle.[...]
2024-12-13
[99]
웹사이트
Introduction to system programming commands
https://www.ibm.com/[...]
2024-12-13
[100]
웹사이트
Job scheduler System Programming Interfaces (SPI)
https://www.ibm.com/[...]
2024-12-13
[101]
웹사이트
UEFI firmware requirements | Microsoft Docs
https://docs.microso[...]
[102]
웹사이트
F2PY.org
http://www.f2py.org/
F2PY.org
[103]
웹사이트
Sysinternals Freeware - Inside Windows NT High Resolution Timers
http://mirrors.arcad[...]
[104]
웹사이트
NTAPI Undocumented Functions
https://undocumented[...]
[105]
웹사이트
API エラーおよび警告に関する設定
https://www.ibm.com/[...]
2023-05-24
[106]
웹사이트
Apple rejects Unity games on the App Store
https://www.engadget[...]
2023-05-24
[107]
문서
C++14の規格書の最終草案
http://open-std.org/[...]
[108]
문서
C11の規格書の最終草案
http://www.open-std.[...]
[109]
서적
API Design for C++
https://www.google.c[...]
Elsevier Science
2011
[110]
웹인용
Intro to APIs: History of APIs
https://blog.postman[...]
2020-09-18
[111]
웹인용
LSB Introduction
http://www.linuxfoun[...]
Linux Foundation
2015-03-27
[112]
웹인용
Update on Standards
https://db.usenix.or[...]
USENIX
2009-06-04
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com