API 란 무엇입니까? 응용 프로그래밍 인터페이스 설명

API는 명령 줄 도구에서 엔터프라이즈 Java 코드, Ruby on Rails 웹 앱에 이르기까지 모든 곳에 적용되는 개념 인 애플리케이션 프로그래밍 인터페이스를 의미합니다. API는 별도의 소프트웨어 구성 요소 또는 리소스와 프로그래밍 방식으로 상호 작용하는 방법입니다.

처음부터 모든 한 줄의 코드를 작성하지 않는 한, 각각 자체 API를 사용하여 외부 소프트웨어 구성 요소와 상호 작용하게됩니다. 완전히 처음부터 무언가를 작성하더라도 잘 설계된 소프트웨어 응용 프로그램에는 코드를 구성하고 구성 요소를보다 재사용 가능하게 만드는 데 도움이되는 내부 API가 있습니다. 그리고 웹을 통해 다른 곳에서 개발 된 기능을 활용할 수있는 수많은 공용 API가 있습니다.

API 란 무엇입니까?

API는 소프트웨어 구성 요소와의 가능한 상호 작용 사양으로 정의됩니다. 그게 정확히 무슨 뜻입니까? 글쎄, 자동차가 소프트웨어 구성 요소라고 상상해보십시오. 그것의 API에 대한 정보 포함 할 것입니다 무엇을 그것은 또한에 대한 정보를 포함 할 것 등이 할-가속화 할 수 있습니다, 브레이크, 라디오를 켜고, 어떻게 당신이 그 일을 만들 수 있습니다. 예를 들어 가속하려면 발을 가속 페달에 얹고 밉니다.

API는 가속기에 발을 댈 때 엔진 내부에서 일어나는 일을 설명 할 필요가 없습니다. 그렇기 때문에 내연 기관으로 자동차를 운전하는 법을 배웠다면 완전히 새로운 기술을 배우지 않고도 전기 자동차의 운전을 할 수 있습니다. 자동차 자체와는 분리 된 추상적 인 API 정의 에서 정보가 함께 제공 되는 내용방법 .

명심해야 할 한 가지는 일부 API의 이름은 상호 작용 사양과 상호 작용하는 실제 소프트웨어 구성 요소를 모두 참조하는 데 자주 사용된다는 것입니다. 예를 들어 "Twitter API"라는 문구는 프로그래밍 방식으로 Twitter와 상호 작용하기위한 일련의 규칙을 의미 할뿐만 아니라 일반적으로 "우리가받은 트윗에 대한 분석을 수행하고 있습니다. Twitter API.”

추상화 계층으로서의 API

소프트웨어와 관련하여 API는 말 그대로 어디에나 있습니다. API는 컴퓨터 과학에서 가장 기본적인 개념 중 하나 인 추상화와 함께 사용됩니다. 추상화는 복잡한 작업을 간단한 방법으로 처리 할 수 ​​있도록 시스템의 복잡성을 구성하는 방법입니다. 이러한 추상화를 아마존에서 스테이플을 주문하는 데 사용할 수있는 배터리로 작동되는 푸시 버튼 회로 기판 인 Amazon Dash Buttons와 비슷하다고 생각하십시오. 다음과 같이 생겼습니다.

Amazon에서 대시 버튼을 주문하고 스마트 폰의 앱을 사용하여 Wi-Fi 네트워크, Amazon 계정 및 좋아하는 종이 타월 브랜드와 같은 제품과 연결합니다. 그런 다음 더 많은 종이 타월을 주문할 때마다 버튼을 누르기 만하면됩니다. 대시 버튼은 인터넷에 연결되어 귀하의 계정에 주문을하라는 메시지를 보냅니다. 며칠 후 종이 타월이 문앞에 도착합니다.

API와 마찬가지로 대시 버튼은 모든 종류의 복잡성을 숨겨주는 행복하고 단순한 인터페이스입니다. 주문한 제품의 ID는 일부 데이터베이스에서 검색해야합니다. 배송 주소는 계정에서 가져와야합니다. 종이 타월을 보관하는 가장 가까운 주문 처리 센터를 확인한 다음 사용 가능한 재고에서 항목을 제거하고 포장하도록 알려야합니다. 마지막으로, 패키지는 모든 패키지가 목적지에 효율적으로 도달 할 수 있도록 다른 패키지와 함께 비행기, 트럭 및 밴의 일부 조합을 통해 라우팅되어야합니다.

이제 고객으로서 이러한 모든 것을 조정해야한다고 상상해보십시오. 종이 타월은 너무 복잡하고 시간이 많이 걸리고 더 좋은 일이 있기 때문에 절대 주문하지 않습니다. 운 좋게도 전체 시련은 당신에게서 추상화됩니다. 종이 타월이 문앞에 나타나게하는 컴퓨터 시스템과 인간 프로세스의 길고 상호 연결된 체인이 있지만 생각해야 할 것은 버튼을 누르는 것뿐입니다.

이것이 프로그래머를위한 API입니다. 그들은 압도적 인 복잡성을 가지고 있으며 모든 것을 스스로하는 대신 활용할 수있는 비교적 간단한 상호 작용 집합을 정의합니다. 모든 소프트웨어 프로젝트에서 수백 개는 아니더라도 수십 개의 API를 직접 사용하고 이러한 각 API는 다른 API 등에 의존합니다.

공용 API 및 API 통합

API는 컴퓨터 프로그래밍의 오랜 개념이며 수년간 개발자 도구 세트의 일부였습니다. 전통적으로 API는 동일한 시스템에서 실행되는 코드 구성 요소를 연결하는 데 사용되었습니다. 유비쿼터스 네트워킹의 부상과 함께 개방형 API 라고도하는 점점 더 많은 공용 API를 사용할 수있게되었습니다. 공용 API는 외부를 향하고 인터넷을 통해 액세스 할 수 있으므로 다른 공급 업체의 코드와 온라인으로 상호 작용하는 코드를 작성할 수 있습니다. 이 프로세스를 API 통합이라고합니다.

이러한 종류의 코드 매시업을 사용하면 사용자가 자신의 시스템에서 여러 공급 업체의 기능을 혼합하고 일치시킬 수 있습니다. 예를 들어 마케팅 자동화 소프트웨어 인 Marketo를 사용하는 경우 여기에서 Salesforce CRM 기능과 데이터를 동기화 할 수 있습니다.

이 문맥에서 "공개"또는 "공개"는 "무료"를 의미하는 것으로 해석되어서는 안됩니다. 이 작업을 수행하려면 여전히 Marketo 및 Salesforce 고객이어야합니다. 그러나 이러한 API의 가용성으로 인해 통합 프로세스가 다른 경우보다 훨씬 더 간단 해집니다. ( 알아야 할 훌륭한 공개 API 목록이 있습니다.)

웹 서비스 및 API

2000 년대 초반의 w eb 서비스 라는 용어를 떠 올릴 수 있으며 개방형 API의 개념이 매우 비슷하다고 생각할 수 있습니다. 실제로 웹 서비스는 XML 변형 인 WSDL (Web Services Description Language)로 지정된다는 점을 포함하여 상당히 엄격한 사양 집합을 충족하는 특정 종류의 개방형 API입니다.

웹 서비스는 서비스 지향 아키텍처 (SOA)의 일부로 사용됩니다. Nordic API 블로그에서 설명했듯이 SOA는 잠재력을 충분히 발휘하지 못하기 때문에 웹 서비스에 나쁜 이름을 부여했습니다. 서비스 간 통신에 사용되는 기술 (특히 더 가볍고 유연한 REST)의 발전으로 인해 웹 서비스는 공용 API 세계에서 다소 뒤쳐졌습니다.

REST API

웹 서비스는 원래 HTTP를 통해 XML 문서를 전송하는 메시징 프로토콜 인 SOAP (Simple Object Access Protocol)를 사용하여 통신하도록 설계되었습니다. 그러나 오늘날 대부분의 웹 기반 API는 REST (Representational State Transfer)를 아키텍처 스타일로 사용합니다.

REST는 2000 년에 Roy Fielding이 박사 학위 논문에서 공식적으로 소개했습니다. REST는 모든 종류의 미디어 (텍스트, 비디오 등)를 포함하는 분산 시스템을 구축하는 데 사용되는 일련의 아키텍처 구성 요소, 디자인 원칙 및 상호 작용입니다. 핵심에서 REST는 범용 구성 요소를 쉽게 구축하는 데 필요한 구조를 제공하면서 웹을 통해 유연한 통신 및 정보 표시를 허용하는 시스템 구축 스타일입니다.

REST API에서 리소스 는 거의 모든 것이 될 수 있지만 예제에는 사용자, 트윗 목록 및 현재 트윗 검색 결과가 포함됩니다. 이러한 각 리소스는 리소스 식별자 에서 주소 지정이 가능하며 웹 기반 REST API의 경우 일반적으로 //api.twitter.com/1.1/users/show?screen_name=twitterdev와 같은 URL입니다. 애플리케이션이 식별자를 사용하여 리소스를 요청하면 API 는 애플리케이션이 사용할 수있는 형식 (예 : JPEG 이미지, HTML 페이지 또는 JSON)으로 해당 리소스 의 현재 표현 을 애플리케이션에 전달합니다 .

REST의 가장 큰 차이점 중 하나는 요청하는 애플리케이션에 데이터를 전송한다는 것입니다. 이는 뛰어난 유연성을 제공하여 애플리케이션이 데이터로 원하는 모든 작업을 수행 할 수 있도록하지만 효율성을 희생합니다. 처리를 위해 웹을 통해 데이터를 전송하는 것은 데이터가 상주하는 처리를 수행 한 다음 결과를 전송하는 것에 비해 상당히 느립니다.

물론 "효율적인"접근 방식의 문제점은 데이터를 호스팅하는 시스템이 응용 프로그램이 데이터로 무엇을 원하는지 미리 알아야한다는 것입니다. 따라서 범용 사용 성과 유연성을 갖춘 API를 구축하려면 REST가 필요합니다.

API 예

상호 작용할 수있는 많은 공개 API가 있으며, 많은 업계 거물들이 있습니다. API를 통해 프로그래밍 방식으로 일부 플랫폼 회사의 코드에 액세스 할 수있는 기능은 본질적으로 플랫폼을 만드는 것입니다. 몇 가지 주요 API 예는 다음과 같습니다.

  • Google API- 지도에서 번역에 이르는 모든 Google 서비스에 코드를 연결할 수 있습니다. API는 Google에 매우 중요하여 선도적 인 API 관리 플랫폼 인 Apigee를 인수했습니다.
  • Facebook API : Facebook의 소셜 그래프 및 마케팅 도구에 프로그래밍 방식으로 액세스 할 수 있습니다. (회사는 Cambridge Analytica 및 기타 스캔들에서 나온 결과에서 이러한 API를 통해 액세스 할 수있는 사용자 데이터 만 제한하고 있습니다.)

API가 어떻게 작동하는지 실제로 이해하기 위해 Java 개발자가 Java 플랫폼과 상호 작용하는 데 사용하는 Java API와 소셜 네트워크와 상호 작용하는 데 사용할 공용 API 인 Twitter API에 대해 자세히 알아 보겠습니다. 네트워킹 서비스.

자바 API

Java API는 Java Development Kit를 설치 한 모든 사람이 "즉시"사용할 수있는 소프트웨어 구성 요소 라이브러리입니다. 이러한 구성 요소는 프로그래머가 매번 처음부터 시작할 필요가 없기 때문에 일반적인 작업을 구현하고 일반적으로 생산성을 높입니다. 소프트웨어에서 사용되는 기본 구성 요소 중 하나는 예상대로 항목 목록을 추적하는 목록이라는 것입니다. 자바 API를 정의하는 것을 당신이 목록으로 수행 할 수있는 항목은 또한 지정 등, 목록에있는 경우 추가 항목 종류의 목록을 결정 하는 방법 그 작업을 수행 할 수 있습니다. 목록을 정렬하려면 알파벳순, 숫자 내림차순, 가장 밝은 색에서 가장 흐릿한 색 등 목록 정렬 방법을 지정해야합니다.

Twitter API

Twitter API는 개발자가 프로그래밍 방식으로 Twitter 데이터와 상호 작용할 수 있도록하는 웹 기반 JSON API입니다. Java Development Kit에 포함 된 Java API와 달리 Twitter API는 웹 기반 API입니다. 트위터가 호스팅하는 서비스에 인터넷을 통해 요청하여 액세스해야합니다.

Twitter와 같은 웹 기반 API를 사용하면 애플리케이션이 웹 브라우저와 마찬가지로 HTTP 요청을 보냅니다. 그러나 응답이 웹 페이지로 전달되는 대신 인간의 이해를 위해 애플리케이션이 쉽게 구문 분석 할 수있는 형식으로 반환됩니다. 이를 위해 다양한 형식이 존재하며 Twitter는 JSON이라는 인기 있고 사용하기 쉬운 형식을 사용합니다. (JSON에 익숙하지 않은 경우 여기에서 몇 분 정도 읽어 보는 것이 좋습니다.)

Twitter의 기본 요소 중 하나는 트윗입니다. 트위터 API를 알려줍니다 무엇 트윗을 검색, 트윗, 즐겨 찾는 트윗을 만들 : 당신이 트윗과 함께 할 수 있습니다. 또한 이러한 작업을 수행 하는 방법 을 알려줍니다 . 트윗을 검색하려면 검색 기준을 지정해야합니다 : 검색 할 용어 또는 해시 태그, 위치 정보, 언어 등.

API 설계

API 디자인은 API의 "무엇"과 "어떻게"가 공식화되는 프로세스입니다. 생성 할 수있는 다른 모든 것과 마찬가지로 다양한 수준의 생각과주의가 API 설계에 적용되어 다양한 수준의 API 품질이 생성됩니다. 잘 설계된 API는 일관된 동작을 가지고 있으며 컨텍스트를 고려하며 사용자의 요구를 염두에 둡니다.

API 내에서 일관된 동작은 학습 속도와 프로그래머가 사용할 때 실수 할 가능성에 큰 영향을 미칩니다. 일반적으로 유사한 작업을 수행하는 API는 기술적 차이에 관계없이 비슷하게 작동해야합니다. 일관되지 않은 API의 예를 들어 Java의 List에 항목을 추가하는 두 가지 방법을 살펴 보겠습니다.

목록에 항목을 추가하는 두 가지 방법이 동일한 작업을 수행하더라도 반환 유형 (boolean 및 void)은 다릅니다. 이 API를 사용하는 개발자는 이제 어떤 메서드가 어떤 유형을 반환하는지 추적해야하므로 API를 배우기가 더 어렵고 사용 오류가 더 발생하기 쉽습니다. 또한 요소를 추가하는 방식을 전환하려면 변경해야하기 때문에 이러한 메서드를 사용하는 코드의 유연성이 떨어집니다.

컨텍스트를 고려하는 것은 API 외부 요인과 관련이 있지만 일관성의 또 다른 형태입니다. 소프트웨어가 아닌 훌륭한 예는 도로 규칙 (오른쪽 교통 또는 왼쪽 교통)이 다른 국가의 자동차 디자인에 어떻게 영향을 미치는지입니다. 자동차 설계자는 운전석을 자동차의 오른쪽 또는 왼쪽에 배치 할 때 이러한 환경 적 요인을 고려합니다.