API는 "Application Programming Interface"의 약자로, 소프트웨어나 애플리케이션 간의 상호작용을 가능하게 하는 도구와 규약의 집합입니다.
쉽게 말해, API는 한 프로그램이 다른 프로그램의 기능이나 데이터를 사용할 수 있도록 하는 방법을 제공합니다.
인터페이스 제공: API는 명확하게 정의된 메소드나 명령의 집합을 통해 프로그램이나 서비스의 기능에 접근할 수 있게 해줍니다.
상호작용 용이화: 다른 애플리케이션, 서비스 또는 시스템 간의 상호작용을 용이하게 하여, 복잡한 기능을 쉽게 통합할 수 있습니다.
보안 유지: API는 사용자의 전체 시스템에 접근할 필요 없이 필요한 정보만을 제공함으로써 보안을 유지합니다.
플랫폼 중립성: API는 특정 프로그래밍 언어나 기술에 구애받지 않고 다양한 환경에서 사용될 수 있습니다.
웹 API: 인터넷을 통해 서비스를 제공하는 API입니다. 예를 들어, 소셜 미디어 데이터에 접근하거나, 지도 서비스를 웹사이트에 통합하는 경우에 사용됩니다.
라이브러리/프레임워크 API: 특정 프로그래밍 언어 또는 플랫폼에 특화된 API입니다. 이들은 개발자가 특정 기능을 쉽게 구현할 수 있도록 도와줍니다.
개발자들은 API를 활용하여 효율적이고 빠른 개발을 진행할 수 있으며, 기존의 코드나 서비스를 재사용할 수 있습니다.
RESTful API는 REpresentational State Transfer의 원리를 기반으로 하는 웹 API입니다. 이는 자원(데이터 또는 서비스)을 중심으로 설계되며, HTTP 메소드(GET, POST, PUT, DELETE 등)를 사용하여 해당 자원에 대한 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 수행합니다.
예를 들어, 소셜 미디어 플랫폼의 사용자 정보를 관리하는 RESTful API가 있다고 가정해봅시다. 이 API는 다음과 같은 HTTP 요청을 사용할 수 있습니다:
GraphQL은 페이스북에 의해 개발된 데이터 쿼리 및 조작 언어입니다. 클라이언트는 필요한 데이터의 구조를 정의한 쿼리를 서버에 보내고, 서버는 정확히 그 구조로 데이터를 반환합니다.
동일한 소셜 미디어 플랫폼에서 GraphQL을 사용하는 경우, 클라이언트는 다음과 같은 쿼리를 보낼 수 있습니다:
query {
user(id: "1") {
name
email
friends {
name
}
}
}
이 쿼리는 ID가 1인 사용자의 이름, 이메일, 그리고 친구들의 이름을 요청합니다. 서버는 정확히 이 정보만을 포함하여 응답합니다.
RESTful API는 각 리소스에 대한 별도의 엔드포인트를 가지며, 클라이언트가 여러 엔드포인트를 호출해야 하는 경우가 많습니다. 이는 때때로 "오버페칭"(필요 이상의 데이터를 받는 것)과 "언더페칭"(필요한 데이터를 한 번에 받지 못하는 것)의 문제를 발생시킬 수 있습니다.
GraphQL은 클라이언트가 정확히 필요한 데이터를 요청할 수 있게 해줍니다. 하지만 복잡한 쿼리는 서버 측에서 성능 문제를 일으킬 수 있습니다.
개발 프로젝트에서는 이러한 특징들을 고려하여 두 기술 중 적합한 것을 선택하게 됩니다.