API가 무엇인지 간단하게 알아보도록 합시다.
API(application programming interface 애플리케이션 프로그래밍 인터페이스, 응용 프로그램 프로그래밍 인터페이스)는 컴퓨터나 컴퓨터 프로그램 사이의 연결이다.
위키피디아(https://ko.wikipedia.org/wiki/API)에선 위와 같이 API를 정의하고 있다. 그런데 이렇게만 봐서는 무슨 말인지 감이 잘 오지 않는다.
클라이언트와 서버 간의 요청 및 응답 측면에서 API 통신에 대해 생각하는 것이 유용하다. 요청을 제출하는 애플리케이션은 클라이언트이며 서버가 응답을 제공한다. API는 이들 간의 연결을 설정하는 다리다.
많이 사용하는 레스토랑의 웨이터 비유로 한 번 알아보자.
레스토랑에 가면 손님(사용자)은 직접 주방에 가서 요리를 하지 않고, 웨이터(중간 역할)에게 메뉴를 주문한다. 웨이터는 주문을 주방(서버)에 요청하고, 완성된 음식을 받아와 손님에게 제공한다.
날씨를 알려주는 어플을 통해 한 가지 예시를 더 들어보자.
1. 사용자가 날씨 정보를 요청하면 정보를 얻기 위한 API 호출이 전송됨.
2. API가 애플리케이션(클라이언트)으로부터 유효한 요청을 받고, 날씨 데이터를 제공하는 서버를 호출.
3. 서버는 API에 날씨 정보를 담은 응답을 보냄.
4. API는 데이터를 애플리케이션(클라이언트)으로 전송함.
위 예시들을 통해 알 수 있는 점은 개발자는 서버 내부 구조를 몰라도 API를 통해 필요한 데이터를 요청하고 받을 수 있다는 것입니다.
그럼 이제 기본적인 API의 구조에 대해 알아보도록 하자.
API의 주요 요소로는 아래 세 가지가 있다.
- 요청 방식(method)
- 어떤 자료를 요청할지(endpoint)
- 자료 요청에 필요한 추가 정보
제가 좋아하는 유튜버인 취요남님의 유튜브 영상 링크를 통해 알아보겠습니다.
https://www.youtube.com/watch?v=fSVYFNeUYls&t=911s
1. 요청 방식 -> 웹 브라우저에서 URL을 입력하면 기본적으로 GET 방식이 사용됨.
2. 어떤 자료를 요청할지 -> https://www.youtube.com/watch 이 부분은 URI에서 어떤 리소스를 요청하는지를 나타내는 부분이다. 유튜브의 동영상 페이지를 요청하는 엔드포인트다.
3. 자료 요청에 필요한 추가 정보 -> ? 뒤에 오는 부분은 추가적인 정보를 제공하는 쿼리 파라미터다.
v=fSVYFNeUYls -> 유튜브에서 특정 영상을 식별하는 동영상 ID
t=911s -> 영상 시작 시간, 911초(15분 11초)부터 재생한다는 뜻이다.
API는 사용 사례에 따라 여러 유형으로 나뉜다.
웹 API는 HTTP 프로토콜을 사용하여 인터넷을 통해 데이터와 기능을 전송할 수 있게 한다.
오늘날 대부분의 API는 웹 API다. 웹 API는 인터넷을 통해 애플리케이션의 데이터와 기능을 노출하는 일종의 원격 API(즉, API가 프로토콜을 사용하여 외부 리소스를 조작한다는 의미)다.
웹 API의 주요 유형 네 가지를 알아보자.
1. Open APIs
누구나 접근할 수 있는 공개 API로 public API라고도 한다. 정해진 엔드포인트와 요청/응답 형식을 따른다. 대부분은 무료 제공이지만 호출수에 따라 비용이 발생하기도 한다. 아래에 Open API 사이트 몇 군데를 예시로 첨부한다.
공공데이터 포털, 네이버 API, 카카오 API
2. Partner APIs
특정 비즈니스 파트너 간 연동을 위한 API다. 파트너 API에 액세스하려면 온보딩 프로세스를 완료하고 로그인 자격 증명을 얻어야 한다.
3. Internal APIs
private API라고도 하며 외부 사용자에게 숨겨져 있다. 내부 팀 간 협업과 생산성 향상을 위해 사용한다.
4. Composite APIs
여러 데이터 또는 서비스 API를 결합한다. 이를 통해 프로그래머는 한 번의 호출로 여러 엔드포인트에 액세스할 수 있다. 마이크로서비스 아키텍처에서 유용하다.
기타 덜 일반적인 유형의 API로는 Data (or database) APIs, Operating system (or local) APIs, Remote APIs가 있다.
참고 자료
https://www.ibm.com/think/topics/api
https://www.youtube.com/watch?v=ckSdPNKM2pY