API
API는 Appication Programming Interface의 약자로 직역하면 응용 프로그래밍 인터페이스이다.
위키피디아에서는 다음과 같이 정의한다.
컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다.
단순히 사전적 정의로만 API를 파악하기엔 어려움이 크기 때문에 풀어서 하나씩 알아보자.
여기서 말하는 인터페이스란 뭘까?
인터페이스는 상호 간의 소통을 위해 만들어진 접점이라고 한다.
예를 들면,
내가 차문을 열고 싶을 때, 자동차 문을 열기 위해서는 '스마트 키'의 오픈 기능을 사용할 수 있다.
이렇게 자동차(사물)와 나(사람)의 소통을 위한 접점역할을 해주는 친구가 스마트키이면서 이게 바로 인터페이스라 할 수 있다.
하나 더 예를 들면,
사용자와 스마트폰 사이의 소통을 도와주는 인터페이스를 User Interface, 즉 UI라고 한다.
그러면 API는 다시 말해 이렇게 정의할 수 있다.
응용프로그램에서 소통하기 위한 접점이고
역기서 말하는 응용프로그램이란 운영체제에서 실행되는 모든 소프트웨어를 말하고
안드로이드면 다양한 애플리케이션들,
윈도면 메모장, 브라우저, 파워포인트 등이 될 수 있다.
안드로이드를 배우는 입장에서 API를 다시 쉽게 설명하면
애플리케이션에서 데이터를 읽거나 쓰기 위해 사용하는 인터페이스
라고도 할 수 있다.
접근방식에 따른 API 분류
- Open API ( = Public API )
회사 내부에서 사용하는 API를 외부에서 다른 개발자들이 이용할 수 있도록 오픈한 것을 Open API라고 한다.
이런 API를 통해서 많은 개발자들이 독창적이고 재밌는 애플리케이션을 만들 수도 있다.
궁극적으로 회사 서비스 또는 커뮤니티에 많은 기여를 하기 때문에 이런 Open API를 만들어 놓는다.
예로는 카카오 API, 유튜브 API, 공공데이터포털에서 제공하는 API, 네이버 API 등등이 있다.
- Private API
Private API는 회사 내부 API로, 회사 개발자가 자사품과 서비스 개선을 위해 내부적으로 발행한 것이며 제삼자에게는 노출되지 않는 특징을 갖는다.
- Partner API
Partner API는 기업이 데이터 공유에 동의한 특정인들만 사용할 수 있다. 비즈니스관계에서 사용하는 편이고, 종종 파트너 회사 간 소프트웨어를 통합하기 위해 사용하기도 한다.
아키텍처 스타일에 따른 API 분류
- RPC API ( Remote Procedure Call API )
원격 프로시저 호출 API
클라이언트는 원격 프로시저를 호출하고 매개 변수와 추가 정보를 직렬화하여 생성한 메시지를 서버로 보낸다.
서버에서는 받은 메시지를 역직렬화하여 요청받은 작업을 실행하고, 그 결과를 다시 클라이언트에 보낸다.
궁극적으로 클라이언트에서 처리한 것처럼 보여준다.
- Soap API ( Simple Object Access Protocol API )
다른 언어로 다른 플랫폼에서 빌드된 애플리케이션이 통신할 수 있도록 설계된 최초의 표준 프로토콜이다.
요청이 수신되면 XML문서형식으로 SOAP 메세지를 반환한다. SOAP API에 대한 완료된 요청은 브라우저에서 캐시할 수 없어서 API를 재전송하지 않으면 이후에는 액세스 할 수 없다.
- Rest API ( Representational State Transfer API )
아키텍처 스타일 중 하나인 REST방식의 API
REST 방식이라 하면
HTTP URL을 통해 자원을 명시하고, HTTP Method(POST, GET, PUT, PATCH 등)를 통해 해당 자원에 대한 CRUD operation을 적용하고, 서버가 그에 대한 응답을 주는 방식
- GraphQL API ( Graph Query Language API )
GraphQL은 페이스북에서 만든 API를 위한 쿼리 언어이다.
RESTful API로는 다양한 기종에서 필요한 정보들을 일일이 구현하는 것이 힘들었고( 페이스북에서 GraphQL의 탄생배경 이유 : iOS와 Android에서 필요한 정보들이 조금씩 달랐고, 그 다른 부분마다 API를 구현하는 것이 힘들었다.)
이 때문에 정보를 사용하는 측에서 원하는 대로 정보를 가져올 수 있고, 보다 편하게 정보를 수정할 수 있도록 하는 표준화된 Query Language를 만든 것임.
내가 배우고 정리하고 싶은 내용들을 앞으로 포스팅할 것이다.
아마, 다음 포스팅은 REST API, OPEN API 활용 예시에 대해서 포스팅할 예정이다.
'개발지식' 카테고리의 다른 글
[개발지식] 스레드(Thread), 싱글 스레드(Single Thread), 멀티 스레드(Multi Thread) (0) | 2024.05.08 |
---|---|
[JSON] JSON은 도대체 뭐지? (0) | 2024.01.17 |
[통신] HTTP란? (0) | 2024.01.16 |
[Gradle] Gradle이란? (0) | 2024.01.12 |
[API] REST, REST API, RESTful 정리 (1) | 2024.01.11 |