시작하기

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

소개

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

시작하기 전에

Google 계정 만들기

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

도서에 익숙해지기

Google 도서 개념에 익숙하지 않은 경우 코딩을 시작하기 전에 이 문서를 읽고 사용자 인터페이스를 사용해 보아야 합니다. 이 문서에서는 사용자가 웹 프로그래밍 개념 및 웹 데이터 형식에 익숙하다고 가정합니다.

요청 승인 및 애플리케이션 식별에 대해 알아보세요.

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

특히 Google Books API의 '내 라이브러리'에 있는 모든 작업은 비공개로 간주되며 인증과 승인을 거쳐야 합니다. 또한 Google 도서 데이터를 수정하는 모든 작업은 해당 데이터를 소유한 사용자만 수행할 수 있습니다.

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

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

Books API 배경

도서 개념

Google 도서는 네 가지 기본 개념을 바탕으로 제작되었습니다.

  • 볼륨: 볼륨은 Google 도서에서 호스팅하는 책이나 잡지 관련 데이터를 나타냅니다. Books API의 기본 리소스입니다. 이 API의 다른 모든 리소스는 볼륨을 포함하거나 주석을 추가합니다.
  • Bookshelf: 서가는 여러 권의 책을 모은 것입니다. Google 도서는 각 사용자에게 사전 정의된 서가 집합을 제공합니다. 그 중 일부는 사용자가 전적으로 관리하고, 일부는 사용자 활동에 따라 자동으로 채워지며, 일부는 혼합되어 있습니다. 사용자는 항상 권으로 가득 찬 다른 서가를 만들거나 수정 또는 삭제할 수 있습니다. 서가는 사용자가 비공개 또는 공개로 설정할 수 있습니다.

    참고: 현재 Google 도서 사이트를 통해서만 서가 생성 및 삭제와 서가의 공개 범위 설정을 수정할 수 있습니다.

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

Books API 데이터 모델

리소스는 고유 식별자를 갖는 개별 데이터 항목입니다. Books API는 위에서 설명한 개념에 따라 두 가지 유형의 리소스에서 작동합니다.

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

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

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

Google에서는 각 사용자에게 다음과 같이 사전 정의된 서가를 제공합니다.

  • 즐겨찾기: 변경 가능한 서가
  • 구매: 사용자가 구매한 도서로 채워집니다. 사용자는 볼륨을 수동으로 추가하거나 삭제할 수 없습니다.
  • 읽을 파일: 변경 가능한 서가입니다.
  • 지금 읽기: 변경 가능한 서가입니다.
  • 이미 읽음: 변경 가능한 서가
  • 검토됨: 사용자가 검토한 도서로 채워집니다. 사용자는 볼륨을 수동으로 추가하거나 삭제할 수 없습니다.
  • 최근에 본 도서: 사용자가 웹 리더에서 최근에 연 볼륨으로 채워졌습니다. 사용자는 볼륨을 수동으로 추가할 수 없습니다.
  • 내 eBook: 변경 가능한 서가 구매한 도서는 자동으로 추가되지만 직접 삭제할 수도 있습니다.
  • 추천 도서: 맞춤 도서 추천으로 채워집니다. 사용자를 위한 권장사항이 없으면 이 서가는 존재하지 않습니다.

서가 예시:

  • '즐겨찾기'
    • '해리 포터'
  • '내 eBook'
    • "전환해 줘"
    • '트와일라잇'
    • 'The Girl with the Dragon Tattoo'

Books API 작업

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

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

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

리소스 유형
지원되는 작업
list 삽입 가져오기 업데이트 삭제
볼륨 예*
서가 예* 예, 인증됨 예* 예, 인증됨 예, 인증됨
읽기 위치 예, 인증됨 예, 인증됨 예, 인증됨 예, 인증됨

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

호출 스타일

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에서 REST (JSON-P라고도 함)를 사용하여 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를 참조하세요.