시작하기

이 문서에서는 Google Books API를 사용하는 데 필요한 배경 지식을 자세히 설명합니다.

소개

이 문서는 Google Books API와 상호작용할 수 있는 애플리케이션을 작성하려는 개발자를 대상으로 합니다. Google 도서는 전 세계의 도서를 디지털화한다는 비전을 가지고 있습니다. Google 도서 API를 사용하여 콘텐츠를 검색하고, 인증된 사용자의 개인 라이브러리를 정리하고 수정할 수도 있습니다.

시작하기 전에

Google 계정 만들기

테스트 목적으로 Google 계정이 필요합니다. 이미 테스트 계정이 있는 경우 Google 도서 사용자 인터페이스를 방문하여 테스트 데이터를 설정, 수정 또는 볼 수 있습니다.

도서 알아보기

Google 도서 개념이 익숙하지 않다면 코드 작성을 시작하기 전에 이 문서를 읽고 사용자 인터페이스를 둘러보세요. 이 문서에서는 사용자가 웹 프로그래밍 개념과 웹 데이터 형식에 익숙하다고 가정합니다.

요청 승인 및 애플리케이션 식별 알아보기

애플리케이션에서 비공개 데이터를 요청할 때 해당 데이터에 액세스할 수 있는 인증된 사용자가 요청을 승인해야 합니다.

특히 Google Books API의 '내 보관함'에 있는 모든 작업은 비공개로 간주되며 인증 및 승인이 필요합니다. 또한 Google 도서 데이터를 수정하는 작업은 해당 데이터를 소유한 사용자만 실행할 수 있습니다.

애플리케이션에서 공개 데이터를 요청할 때 요청을 승인할 필요는 없지만 API 키와 같은 식별자가 있어야 합니다.

요청을 승인하고 API 키를 사용하는 방법에 대한 자세한 내용은 API 사용 문서의 요청 승인 및 애플리케이션 식별을 참고하세요.

Books API 배경

도서 개념

Google 도서는 다음 네 가지 기본 개념을 기반으로 합니다.

  • 볼륨: 볼륨은 Google 도서에서 호스팅하는 책 또는 잡지에 관한 데이터를 나타냅니다. Books API의 기본 리소스입니다. 이 API의 다른 모든 리소스는 볼륨을 포함하거나 주석을 답니다.
  • 서가: 서가는 볼륨 모음입니다. Google 도서는 각 사용자에게 사전 정의된 서가를 제공하며, 이 중 일부는 사용자가 완전히 관리하고 일부는 사용자 활동에 따라 자동으로 채워지며 일부는 혼합됩니다. 사용자는 항상 수동으로 도서로 채워지는 다른 서가를 생성, 수정 또는 삭제할 수 있습니다. 서가는 사용자가 비공개 또는 공개로 설정할 수 있습니다.

    참고: 서재를 만들고 삭제하는 것은 물론 서재의 공개 범위 설정 수정은 현재 Google 도서 사이트를 통해서만 가능합니다.

  • 리뷰: 볼륨 리뷰는 별표 평점 또는 텍스트의 조합입니다. 사용자는 볼륨당 하나의 리뷰를 제출할 수 있습니다. 리뷰는 외부 소스에서도 제공되며 적절하게 출처가 표시됩니다.
  • 읽기 위치: 읽기 위치는 사용자가 볼륨에서 마지막으로 읽은 위치를 나타냅니다. 사용자는 볼륨당 하나의 읽기 위치만 가질 수 있습니다. 사용자가 이전에 해당 볼륨을 열지 않은 경우 읽기 위치가 존재하지 않습니다. 읽기 위치는 단어 해상도까지 자세한 위치 정보를 저장할 수 있습니다. 이 정보는 항상 사용자에게 비공개입니다.

Books API 데이터 모델

리소스는 고유 식별자를 갖는 개별 데이터 항목입니다. Books API는 위에 설명된 개념을 기반으로 두 가지 유형의 리소스를 기반으로 작동합니다.

  • 볼륨 리소스: 볼륨을 나타냅니다.
  • 서가 리소스: 특정 사용자의 단일 서가를 나타냅니다.

Books API 데이터 모델은 컬렉션이라고 하는 리소스 그룹을 기반으로 합니다.

볼륨 수집
볼륨 컬렉션은 Google 도서에서 관리하는 모든 볼륨 리소스의 컬렉션입니다. 따라서 모든 볼륨 리소스를 나열할 수는 없지만 검색어 집합과 일치하는 모든 볼륨을 나열할 수는 있습니다.
서가 컬렉션
bookshelf collection은 Google Books에서 관리하는 모든 bookshelf resources로 구성됩니다. 서가는 항상 특정 사용자의 라이브러리 컨텍스트에서 참조해야 합니다. 서가에는 0개 이상의 볼륨이 포함될 수 있습니다.

Google은 각 사용자에게 사전 정의된 서가를 제공합니다.

  • 즐겨찾기: 변경 가능한 서가입니다.
  • Purchased(구매됨): 사용자가 구매한 볼륨으로 채워집니다. 사용자는 볼륨을 수동으로 추가하거나 삭제할 수 없습니다.
  • 읽기: 변경 가능한 서가
  • 지금 읽기: 변경 가능한 책장
  • 읽음: 변경 가능한 서가
  • 검토됨: 사용자가 검토한 볼륨으로 채워집니다. 사용자는 볼륨을 수동으로 추가하거나 삭제할 수 없습니다.
  • 최근에 본 항목: 사용자가 최근에 웹 리더에서 연 콘텐츠로 채워집니다. 사용자는 볼륨을 수동으로 추가할 수 없습니다.
  • 내 eBook: 변경 가능한 책장 구매한 책은 자동으로 추가되지만 수동으로 삭제할 수 있습니다.
  • 맞춤 도서: 맞춤 도서 추천으로 채워집니다. 사용자에게 추천이 없는 경우 이 책장은 존재하지 않습니다.

예시 서가:

  • '즐겨찾기'
    • '해리 포터'
  • '내 eBook'
    • '전환'
    • '트와일라잇'
    • '밀레니엄: 여자를 증오한 남자'

Books API 작업

다음 표에 설명된 대로 도서 API의 컬렉션 및 리소스에 대해 다섯 가지 메서드를 호출할 수 있습니다.

작업 설명 REST HTTP 매핑
list 컬렉션 내에서 지정된 리소스 하위 집합을 나열합니다. 컬렉션 URI에 대한 GET 권한입니다.
insert 컬렉션에 새 리소스를 삽입합니다 (새 리소스 생성). POST(컬렉션 URI에서) 새 리소스의 데이터를 전달합니다.
get 특정 리소스를 가져옵니다. 리소스 URI에 대한 GET 권한입니다.
업데이트 특정 리소스를 업데이트합니다. 업데이트된 리소스의 데이터를 전달하는 리소스 URI에 대한 PUT
삭제 특정 리소스를 삭제합니다. 리소스 URI에 대한 DELETE입니다. 삭제할 리소스의 데이터를 전달합니다.

다양한 리소스 유형에 지원되는 작업은 아래 표에 요약되어 있습니다. 사용자의 비공개 데이터에 적용되는 작업을 '내 보관함' 작업이라고 하며, 이러한 작업에는 모두 인증이 필요합니다.

리소스 유형
지원되는 작업
list insert get update delete
볼륨 예*
책장 예* 예, 인증됨 예* 예, 인증됨 예, 인증됨
읽기 위치 예, 인증됨 예, 인증됨 예, 인증됨 예, 인증됨

*이러한 작업의 인증된 버전과 인증되지 않은 버전을 모두 사용할 수 있습니다. 인증된 요청은 사용자의 비공개 '내 보관함' 데이터에서 작동하고 인증되지 않은 요청은 공개 데이터에서만 작동합니다.

호출 스타일

API를 호출하는 방법에는 여러 가지가 있습니다.

  • REST 직접 사용
  • JavaScript에서 REST 사용 (서버 측 코드 필요 없음)

REST

REST는 데이터 요청 및 수정에 대한 간편하고 일관성 있는 접근 방식을 제공하는 소프트웨어 아키텍처 스타일입니다.

REST는 'Representational State Transfer'의 줄임말로, Google API의 맥락에서 REST는 HTTP 동사를 사용하여 Google이 저장한 데이터 표현을 검색 및 수정하는 방법을 의미합니다.

RESTful 시스템에서는 리소스가 데이터 저장소에 저장되고, 클라이언트는 서버에서 특정 작업(리소스 생성, 검색, 업데이트, 삭제 등)을 수행하라는 요청을 전송하며, 서버는 작업을 수행하고 응답을 전송합니다. 이 응답은 지정된 리소스 표현의 형식을 취하는 경우가 많습니다.

Google의 RESTful API에서는 클라이언트가 POST, GET, PUT 또는 DELETE 등의 HTTP 동사를 사용하여 작업을 지정합니다. 다음과 같은 형식의 전역적으로 고유한 URI를 사용하여 리소스를 지정합니다.

https://www.googleapis.com/apiName/apiVersion/resourcePath?parameters

모든 API 리소스에는 HTTP에서 액세스할 수 있는 고유 URI가 있으므로 REST는 데이터 캐싱을 지원하며 웹의 분산형 인프라와의 연동성이 뛰어납니다.

HTTP 1.1 표준 문서의 메서드 정의를 확인하면 유용합니다. 문서에 GET, POST, PUT, DELETE의 사양이 포함되어 있습니다.

Books API의 REST

지원되는 Books 작업은 Books API 작업에 설명된 대로 REST HTTP 동사에 직접 매핑됩니다.

Books API URI의 구체적인 형식은 다음과 같습니다.

https://www.googleapis.com/books/v1/{collectionName}/resourceID?parameters

여기서 resourceID은 볼륨 또는 책장 리소스의 식별자이고 parameters은 쿼리에 적용할 매개변수입니다. 자세한 내용은 쿼리 매개변수 참조를 참고하세요.

resourceID 경로 확장 프로그램 형식을 사용하면 현재 작업 중인 리소스를 식별할 수 있습니다. 예를 들면 다음과 같습니다.

https://www.googleapis.com/books/v1/volumes
https://www.googleapis.com/books/v1/volumes/volumeId
https://www.googleapis.com/books/v1/mylibrary/bookshelves
https://www.googleapis.com/books/v1/mylibrary/bookshelves/shelf
https://www.googleapis.com/books/v1/mylibrary/bookshelves/shelf/volumes
...

URI에 mylibrary이 있는 작업은 현재 인증된 사용자의 비공개 라이브러리 데이터에만 적용됩니다. API에서 지원되는 각 작업에 사용되는 전체 URI 집합은 Books API 참조 문서에 요약되어 있습니다.

다음은 도서 API의 작동 방식에 대한 몇 가지 예시입니다.

퀼트에 대해 검색합니다.

GET https://www.googleapis.com/books/v1/volumes?q=quilting

볼륨 s1gVAAAAYAAJ에 관한 정보를 가져옵니다.

GET https://www.googleapis.com/books/v1/volumes/s1gVAAAAYAAJ

JavaScript의 REST

callback 쿼리 매개변수와 콜백 함수를 사용하여 JavaScript (JSON-P라고도 함)에서 REST를 사용하여 Books API를 호출할 수 있습니다. 이를 통해 서버 측 코드를 작성하지 않고도 도서 데이터를 표시하는 다양한 애플리케이션을 작성할 수 있습니다.

참고: access_token 매개변수를 사용하여 OAuth 2.0 토큰을 전달하여 인증된 메서드를 호출할 수 있습니다. JavaScript에서 사용할 OAuth 2.0 토큰을 가져오려면 클라이언트 측 웹 애플리케이션용 OAuth 2.0에 설명된 안내를 따르세요. API 콘솔의 'API 액세스' 탭에서 웹 애플리케이션의 클라이언트 ID를 설정하고 토큰을 가져올 때 해당 OAuth 2.0 사용자 인증 정보를 사용해야 합니다.

다음 예에서는 이 방법을 사용하여 '해리 포터'의 검색 결과를 표시합니다.

<html>
  <head>
    <title>Books API Example</title>
  </head>
  <body>
    <div id="content"></div>
    <script>
      function handleResponse(response) {
      for (var i = 0; i < response.items.length; i++) {
        var item = response.items[i];
        // in production code, item.text should have the HTML entities escaped.
        document.getElementById("content").innerHTML += "<br>" + item.volumeInfo.title;
      }
    }
    </script>
    <script src="https://www.googleapis.com/books/v1/volumes?q=harry+potter&callback=handleResponse"></script>
  </body>
</html>

데이터 형식

JSON

JSON(JavaScript Object Notation)은 특정 언어에 의존하지 않는 일반적인 데이터 형식으로, 임의의 데이터 구조를 간단한 텍스트로 표현할 수 있습니다. 자세한 내용은 json.org를 참조하세요.