API는하드웨어 독립성을 보장하기 위해서 생겨난 개념인데,
서로 다른 하드웨어 부품에 맞는 프로그래밍을 각각 하기보다는,
추상화 계층을 통해 한번만 작성한 코드를
여러 곳에서 공통적으로 사용할 수 있도록 하기 위해서 생겨났다.
API는 개인 컴퓨터가 나오기 이전부터 존재한 개념으로 대체로 운영 체제의 라이브러리 개념으로 사용되어서 시스템에서 로컬로 작동했다.
그러나 시간이 지나며 API는 로컬에서 분리되어서 원격 API가 나타나게 되었다.
원격이란 API에 의해 조작되는 리소스가 요청을 보내는 컴퓨터의 외부에 있는 것을 의미하는데, 대부분 커뮤니케이션을 할 때 인터넷을 사용하기 때문에 대부분의 원격 API는 웹 API라고 할 수 있다.
Web API는 HTTP 요청 메세지 - XML/JSON 형식의 응답 메세지 형식을 가진다.
XML/JSON 형식은 쉽게 조작할 수 있는 데이터 표현 방식으로
서버에서 제공하는 Web API를 통해 각기 다른 기기(iOS, Android)에서 동일한 서버의 데이터를 읽어오거나 업데이트할 수 있다.
API는 Application Programing Interface의 약자로,
다른 소프트웨어 시스템과 통신하기 위해 따라야하는 규칙을 정의한다.
이렇게 통신의 규칙을 정하므로써 좋은 점은 뭘까?
-> 세세한 구현 방식을 알지 못하는 제품이나 서비스와 통신이 가능해지기 때문에 개발 시간과 비용을 간소화할 수 있다.
API는 또한 특정한 요청과 응답의 형식을 갖춘 "상호간 계약"으로 비유되기도 하는데
한쪽에서 특정한 방식으로 요청을 보내면, 다른 쪽에서 이에 응답을 다시 보내준다.
이러한 계약의 여러 형식들중 가장 보편적으로 쓰이는 방식이 REST인 것이다. (REST 이전에는 SOAP라는 프로토콜을 통해 XML을 주고 받았었다.)
Representational State Transfer의 약자로, API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처이다. 여러 아키텍처로 API를 설계할 수 있는데, REST는 그 방식들중 한가지이다.
모든 요청은 다른 요청들과 분리되어 서버는 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료한다.
이렇게 하면 과거의 클라이언트 요청 정보를 유지할 필요가 없기 때문에 성능을 향상시킬 수 있다.
클라이언트와 서버 사이의 다른 중개자에게 연결될 수 있고, 서버는 요청을 다른 서버로 전달할 수 있다. 이러한 계층은 클라이언트에겐 보이지 않는 상태로 유지된다.
서버 응답 시간을 개선하기 위해 첫번째 응답 이후에 해당 이미지를 캐싱하여 다음 응답시 사용한다.
최근 Open API는 REST API를 정의하는 공통 표준으로 부상하여서 사용자는 별다른 추측 없이도 이를 이해할 수 있다.
완전한 클라이언트 - 서버 분리를 통해 각 부분이 독립적으로 발전할 수 있다. 예를 들어 서버의 기술 변경은 클라이언트에 영향을 주지 않는다.
REST API는 사용되는 기술과 독립적이므로 API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 작성 가능하다.
https://www.redhat.com/ko/topics/api/what-are-application-programming-interfaces