API는 응용 프로그램(애플리케이션)에서 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 말한다.
인터페이스란 게 내부의 구현된 건 가리고 외부에 노출된 경로만 가지고 이용한다는 뜻을 가진다.
즉, API는 리모컨과 점원처럼 애플리케이션과 운영체제 그리고 애플리케이션과 프로그래밍 언어가 제공하는 기능 사이의 '상호 작용'을 도와준다.
파일 제어, 창 제어, 화상 처리, 문자 제어 등등 Web API로 SOAP
, REST
가 있다.
REST는 자원(URL)의 표현으로 상태를 주고받는 것을 표방한 네트워크 아키텍쳐
란 뜻이다.
그 REST 아키텍쳐를 구성하는 조건이 아래와 같다.
Client-Server
: 서버와 클라이언트 작업을 분리함으로써 서로 의존하지 않게 별도로 진화할 수 있다. 이렇게 하면, 클라이언트는 서버의 리소스 URI만 알면 되기에 구성을 단순화하고 확장성도 단순화할 수 있다.
Stateless
: 클라이언트에서 서버로의 각 요청에는 그 요청을 이해하는 데 필요한 모든 정보가 포함된다. 따라서 요청에 대한 정보는 전적으로 클라이언트만 가지고 있어야 하며 서버는 그 정보를 취하지 않게 한다.
cache
: 클라이언트는 서버의 응답을 Cache할 수 있어야 한다.
클라이언트가 Cache를 통해서 응답을 재사용할 수 있어야 하며, (cache-control 헤더를 통하여 캐시 여부 명시가 가능하다.) 이는 서버의 부하를 낮춘다.
layered system(계층화)
: 서버와 클라이언트 사이에 방화벽, 게이트웨이, Proxy 등 다양한 계층 형태로 구성이 가능해야 하며, 이를 확장 할 수 있어야 한다.
uniform interface(인터페이스 일관성)
: 전체적인 시스템 아키텍처를 간단하고 잘 파악할 수 있도록 하기 위한 약속된 Interface, 해당 규약을 REST를 사용자들이 지켜야 한다.
code-on-demand(선택적)
: 서버가 클라이언트에 보내는 Code, StatusCode를 보내는 것을 말한다. 선택적이다.
REST API를 이해하기 앞서 대비되는 SOAP 개념도 알아두면 도움이 된다.
REST와 SOAP는 각기 다른 두 가지의 온라인 데이터 전송 방식이다.
SOAP(Simple Object Access Protocol)란
SOAP은 일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등을 통해
XML
기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜이다. SOAP은 웹 서비스에서 기본적인 메시지를 전달하는 기반이 된다. - 위키백과
SOAP는 프로토콜이지만, REST는 프로토콜이 아니라는 점 그리고 전송포멧으로 SOAP는 xml
, REST는 json
을 사용하는 것이 주요 차이점이다.
일반적으로 API는 활용 사례와 개발자의 선호에 따라 REST 또는 SOAP 중 하나를 준수한다고 한다.
출처 : https://www.redhat.com/ko/topics/integration/whats-the-difference-between-soap-rest
REST(Representational State Transfer: 자원의 상태 전달) API
는 웹상에서 사용되는 여러 리소스를 HTTP URI로 표현하고, 해당 리소스에 대한 행위를 HTTP Method로 정의하는 방식을 사용하여 JSON
과 같은 다양한 형식으로 메시지를 반환할 수 있는 API를 위한 아키텍쳐 스타일이다.
이러한 이유로, 달리 어떠한 프로그래밍 언어로든 읽을 수 있고, 인간과 기계가 모두 읽을 수 있으며, 경량화되어 있기 때문에 선호되는 메시지 형식이라 할 수 있다.
리소스(HTTP URI로 정의됨)를 어떻게 하겠다(HTTP Method + Payload)를 구조적으로 깔끔하게 표현하는 방법이라 생각하면 쉽게 이해가 된다.
RESTful API는 REST API 설계 가이드를 따른 API을 말한다.
즉, REST API의 철학대로
API를 RESTful 하게 만든다는 것은 그 자체만으로도 API의 목적이 무엇인지 명확하게 하는 바
라는 걸 이해해야 한다.
REST API 설계 가이드에 따라 API를 만들어서 웹 서비스를 제공하면 해당 웹 서비스는 RESTful
하다고 하는 것이다.
/(슬래시)
는 계층 관계
를 나타낼때 사용합니다. http://restapi.example.com/houses/apartments
http://restapi.example.com/animals/mammals/whales
URI 마지막 문자에 /(슬래시)를 사용하지 않습니다.
http://restapi.example.com/houses/apartments/ (X)
http://restapi.example.com/houses/apartments (0)
_(underscore)
는 사용하지 않도록 합니다. 또한 영어 대문자보다는 소문자
를 씁니다.-(하이픈)
를 씁니다. URI에 동사는 GET, POST, PUT, DELETE와 같은 HTTP Method
를 표현하기 때문이다.
URI 자원은 동사가 아니라 명사
로 표기한다.
URI에 파일의 확장자(예를들어 .json , .JPGE)를 포함 시키지 않습니다.
http://restapi.example.com/members/soccer/345/photo.jpg (X)
동기적
통신 방식이다.stateless
특징을 가지고 있다.