API란?
- application programming interface는 컴퓨터나 컴퓨터 프로그램 사이의 연결이며 일종의 소프트웨어 인터페이스, 다른 종류의 소프트웨어에 서비스 제공
- 컴퓨터<->인간을 연결시키는 사용자 인터페이스와는 반대로 컴퓨터나 소프트웨어를 서로 연결
- 프로그래머가 사용할 수 있는 도구나 서비스 역할을 하고 이러한 부분들 중 하나를 사용하는 프로그램이나 프로그래머는 API의 해당 부분을 호출한다고 함
- API를 구성하는 호출들은 서브루틴, 메소드, 요청, 통신 엔드포인트라고 부름
- API사양 : 이 호출들을 정의, 다시 말해 이들을 어떻게 사용하거나 구현하는지를 설명한다는 것을 의미
API의 목적
- 시스템이 동작하는 방식에 관한 내부의 세세한 내용을 숨기는 것
- 내부의 세세한 부분이 나중에 변경되더라도 프로그래머가 유용하게 사용할 수 있고 일정하게 관리할 수 있는 부분들만 노출
API vs 라이브러리 vs 프레임워크
- API의 핵심은 정의된 프로토콜을 기반으로 상호 작용을 할 수 있도록 일종의 약속된 시스템
- 라이브러리는 API들을 기반으로 개발자에게 기능을 제공할 수 있도록 실제로 구현된 구현체
- 프레임워크는 명확하게 정의된 대량의 라이브러리가 있다는 점에서 API와 비슷하지만 일반적인 API는 전체 제어 구조를 호출하는 쪽에서 원하는대로 진행할 수 있지만 프레임워크에서는 그럴 수가 없다
RESTful API
- '네트워크'와 '웹'에 맞춰진 API 통신 아키텍쳐
- 소위 네트워크는 '인터넷'이라고 부르는 HTTP 기반 네트워크이므로 REST API라고 하면 HTTP에 쓰이는 걸 의미하는 경우가 많음
- REST를 잘 준수하는 API를 RESTful API라 부름
RESTful API vs API
- RESTful API는 네트워크에서 '데이터'를 받아오기 위한 것이고 프로그램에서의 API는 '코드', 나아가 '라이브러리'를 받아오기 위해 쓰는 것
API의 예
명령어에 창에 "Hello, world!"라는 문자열을 출력하는 프로그램을 c언어로 작성한다고 할 때, API가 없다면 메모리 영역부터 내려가 H부터 느낌표까지 문자열 하나하나 문자열 구조체를 만들어 담고 이를 출력하도록 운영체제에 명령을 보내야 한다
- 윈도 API
- 마이크로소프트 윈도우의 다이렉트엑스
- 단일 유닉스 규격
- Java SE API
- 스칼라 API
- OpenGL
- OpenAL
- OpenCL
- c++의 표준 템플릿 라이브러리 STL