다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의한 것
Application Programming Interface의 약어. 애플리케이션은 고유한 기능을 가진 모든 소프트웨어를 나타낸다. 인터페이스는 두 애플리케이션 간의 약속, 규칙이라고 할 수 있다. 이 약속은 요청과 응답을 사용해 두 애플리케이션이 서로 통신하는 방법을 정의 한다. API 문서에 개발자가 요청과 응답을 구성하는 방법에 대한 정보가 들어있다.
API 아키텍처는 일반적으로 클라이언트와 서버 측면에서 설명된다.
요청을 보내는 애플리케이션은 클라이언트, 응답을 보내는 애플리케이션은 서버.
SOAP(Simple Object Access Protocol) API
단순 객체 접근 프로토콜. 클라이언트-서버는 XML을 사용해 메시지를 교환한다. 과거 많이 사용되었고 표준들이 복잡하다. 하지만 그만큼 높은 신뢰성을 가지고 자체적 기준을 통해 데이터 손상을 줄여주는 장점을 가진다.
RPC API
원격 프로시저 호출. 클라이언트가 서버에서 함수나 <프로시저>를 완료하면 서버가 출력을 클라이언트로 다시 전송한다.
프로시저: 특정한 로직을 처리하기만 하고 결과 값을 반환하지 않는 서브 프로그램
Websocket API
JSON 객체를 사용해 데이터를 전달하는 최신 웹 API 개발. 클라이언트 앱과 서버 간의 양방향 통신을 지원한다. 서버가 연결된 클라이언트에 콜백 메시지를 전송 할 수 있어 REST API 보다 효율적이다.
REST(REpresentational State Transfer) API
현재 가장 많이 사용되고 보편화 된 API. 클라이언트가 서버에 요청을 데이터로 전송한다. 서버가 클라이언트 입력을 사용해 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환한다.
API 자체는 사양만을 정의하고 구현과는 독립적이다. 소프트웨어 개발에서 호환성을 위해 지켜야 할 추상적 원칙을 말한다. 기본적으로 프로그래밍 인터페이스이기 때문에 주로 프로그램 내부 단에서 이뤄진다. 하지만 네트워크와 웹에 맞춰진 API 통신 아키텍처가 REST.
네트워크에서 ‘데이터’를 받아오기 위한 것으로 프로그램에서 API는 코드, 나아가 코드 덩어리인 라이브러리를 받아오기 위해 쓰는 것이다. 따라서 개발자 입장에서 구분하자면 HTTP 요청을 보내서 JSON 또는 XML 형식으로 데이터 묶음을 응답 받게 되면 보통 REST API라고 보면 되고, 기업에서 설명하는 방식대로 자신의 코드에 import 해 특정 함수나 메소드를 쓸 수 있다면 일반적인 의미의 API라고 보면 된다.
클라이언트와 서버가 인터넷을 통해 자원을 교환하기 위해 사용하는 인터페이스
API에서 '대표적인'이란 말은 어떤 자원의 특정 시점 상태를 반영하고 있는 정보를 말한다. 하나의 representation은 representation data와 representation metadata로 구성된다.
// representation metadata
Content-Type: text/plain
Content-Language: en
// representation data
hello
REST는 REpresentational State Transfer의 줄임말이다. “State”는 웹 애플리케이션 의 상태를 의미하며, “Transfer”는 이 상태의 전송을 의미한다.
웹 브라우저로 웹 사이트를 이용하는 예를 들어보면, 웹 페이지 A를 보고 있던 사용자가 웹 페이지 B로 이동하는 링크를 클릭. 웹 브라우저는 링크가 가리키는 웹 페이지 B를 렌더링해서 보여줄 것이다.
위의 상황에서 웹 애플리케이션은? 웹 브라우저와 웹 서버가 연결되어 사용자에게 가치를 제공하는 애플리케이션이다. 웹 서버가 웹 애플리케이션인 것이 아니라, 웹 브라우저가 웹 서버에 접속해야 웹 애플리케이션이다. 두 명의 사용자가 각각 자신의 웹 브라우저로 같은 웹 서버에 접속한다면, 두 개의 웹 애플리케이션이 실행되고 있는 것이다.
링크를 클릭함으로써 브라우저가 보여주던 페이지가 A에서 B로 바뀔 때. 웹 애플리케이션의 상태가 변경된 것이다. 이 상태의 변경은 representation의 전송(Transfer)을 통해 이루어졌다. 이것이 REpresentational State Transfer이다.
위의 예에서 Transfer가 의미하는 것은 network component 사이에서의 전송을 말한다. 서버에서 클라이언트로의 웹 페이지 전송을 의미하는 것.
리소스의 상태와 애플리케이션의 상태는, 둘 다 동일하게 state라는 단어로 표현되고 있긴 하지만, 본질적으로 완전히 다른 것이다. representation이란 “어떤 리소스의 특정 시점의 상태(state)를 반영하고 있는 정보”라고 말했다. 그것은 리소스의 상태지 애플리케이션의 상태는 아니다. 애플리케이션의 상태란, 웹 애플리케이션이 웹 페이지 A를 렌더링하다가 B를 렌더링하는 것으로 바뀐 그 상태를 말하는 것.
균일한 인터페이스
URI로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다. HTTP 표준인 URL과 응답 코드, 요청-응답 메소드 등을 사용한다.
무상태
상태 정보를 저장하지 않는다. 이용자가 누구인지 어디서 접근하는지 관계 없이 결과가 무조건 동일해야 한다. 이는 필연적으로 오픈 될 수 밖에 없는 구조로 보안에 취약하다.
캐시 가능
HTTP를 비롯한 네트워크 프로토콜에서 제공하는 캐싱 기능을 제공 할 수 있어야 한다.
자체 표현 구조
별도의 문서 없이 REST API 메시지만 보고도 쉽게 이해 할 수 있어야 한다.
클라이언트 - 서버 분리
의존성 없는 구조로 서로 영향을 주지 않아야 한다.
계층형 구조
요청된 정보를 검색하는데 있어 계층 구조로 분리되어야 한다. 클라이언트로서 REST API 서버만 호출한다. 그러나 서버는 다중 계층으로 구성될 수 있다. 순수 비즈니스 로직을 수행하는 API 서버와 그 앞단에 사용자 인증, 암호화, 로드 밸런싱을 하는 계층을 추가해 구조상 유연성을 둘 수 있다.
REST에서 중요한 설계 규칙은 URI로 자원을 표현하고, 자원에 대한 행위는 HTTP Method를 사용하는 것이다. 각 구성 요소들의 역할이 명확하게 분리되어 있어야 한다. RESTful의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이다.
자원 : 서버에 존재하는 데이터의 총칭, 모든 자원은 고유의 URI를 가진다.
행위 : 클라이언트가 HTTP Method를 이용해 자원을 조작하는 것.
표현 : 서버의 응답(JSON, XML 등).
참고
https://aws.amazon.com/ko/what-is/api
https://aws.amazon.com/ko/what-is/restful-api
https://www.crocus.co.kr/1410