좋은 rest API란 무엇인가

좋은 rest API란 무엇인가

0. 서론

1. API

API(Application Programming Interface)는 소프트웨어 프로그램들이 서로 통신하고 데이터를 주고받을 수 있도록 해주는 인터페이스입니다. 쉽게 말해, API는 서로 다른 소프트웨어 시스템들이 상호작용할 수 있게 해 주는 매개체라고 할 수 있습니다.
예를 들어, 우리가 스마트폰에서 날씨 앱을 사용할 때, 날씨 앱은 API를 통해 날씨 정보를 제공하는 서버와 통신하여 현재 날씨 데이터를 가져옵니다. 이처럼 API는 사용자와 서버 사이에서 정보를 교환하는 중요한 역할을 합니다.
또 다른 예시를 들어봅시다. 데이터베이스를 도서관, API를 도서관 사서라고 예를 들어봅시다. 도서관 사서는 도서관 이용자들이 원하는 책을 찾도록 도와주며, 필요한 정보를 제공합니다. 도서관 이용자(애플리케이션 A)는 특정 책을 찾기 위해 도서관 사서에게 질문을 합니다. “안녕하세요, 저는 ‘JavaScript 프로그래밍’ 책을 찾고 있습니다.” 도서관 사서는 애플리케이션 A가 도서관의 정식 이용자인지 확인합니다. 이 과정은 액세스 자격 증명을 체크하는 과정입니다. 도서관 사서는 이용자 카드의 유효성을 확인한 후, 도서관에서 ‘JavaScript 프로그래밍’ 책을 검색해서 찾은 후 애플리케이션 A에게 전달합니다. 이때 또다른 도서관 이용자(애플리케이션 B)가 도서관 사서에게 다른 정보를 요청합니다. “저는 ‘Python 프로그래밍’에 대한 정보를 알고 싶어요.” 도서관 사서는 애플리케이션 B의 이용자 카드를 확인하고, 동일한 절차를 거쳐 책을 찾아 전달합니다. 이렇듯 API는 애플리케이션들이 데이터베이스와 원활하게 소통할 수 있도록 도와주는 역할을 합니다.

1-1. API의 유형

API는 사용 사례별로 분류할 수 있습니다.
데이터 API : 데이터베이스와 상호작용하며 애플리케이션과 데이터베이스 관리 시스템을 연결하는 API입니다. 예를 들어, 특정 사용자의 정보를 가져오거나, 새로운 데이터를 삽입하는 등의 작업을 데이터 API를 통해 수행할 수 있습니다.
운영체제 API : 애플리케이션이 운영체제가 제공하는 서비스 및 리소스를 사용할 수 있게 하는 API입니다. 예를 들면 Windows API, POSIX API 등이 운영체제 API입니다. 개발자는 운영체제 API를 통해 시스템 자원에 접근하고 제어할 수 있습니다.
원격 API : 네트워크를 통해 다양한 디바이스 애플리케이션이 다른 시스템과 상호작용하는 API입니다. 클라이언트와 서버와 네트워크를 통해 통신하며, 일반적으로 REST, SOAP와 같은 프로토콜을 사용합니다. 이 API는 서로 다른 위치에 있는 시스템 간의 데이터 교환을 가능하게 합니다.
웹 API : 웹 애플리케이션 간의 상호작용을 위한 API입니다. HTTP/HTTPS 프로토콜을 사용하여 데이터와 기능을 노출합니다. RESTful API, GraphQL API 등이 웹 API의 대표적인 예입니다. 웹 API는 주로 JSON, XML 형식의 데이터를 주고받으며, 웹 브라우저, 모바일 애플리케이션, 서버 간의 통신에 널리 사용됩니다.

1-2. API 프로토콜, 아키텍처 스타일 및 언어

1-2-1. SOAP
SOAP(Simple Object Access Protocol)은 XML을 사용하여 메시지를 교환하는 프로토콜입니다. 주로 엔터프라이즈 환경에서 많이 사용되며, 강력한 보안과 트랜잭션 관리 기능을 제공합니다. SOAP는 표준화된 메시징 프로토콜로, 다양한 플랫폼과 언어에서 지원되며 높은 확장성을 가지고 있습니다. 그러나 복잡한 XML 구조와 상대적으로 높은 오버헤드로 인해 경량화된 서비스에는 적합하지 않을 수 있습니다.
1-2-2. 원격 프로시저 호출(RPC)
RPC(Remote Procedure Call)은 네트워크 상의 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 해 주는 프로토콜입니다. RPC는 로컬 프로시저 호출처럼 단순하게 사용할 수 있지만, 네트워크 지연이나 오류 처리에 대한 고려가 필요합니다. 주요 구현 방식으로는 JSON-RPC와 XML-RPC가 있으며, 상대적으로 단순한 구조를 가지고 있습니다
1-2-3. 웹 소켓(WebSocket)
참고