Migração da API Drive

Neste documento, descrevemos como migrar o código para a API Data Studio usando a API Drive para gerenciar permissões. Também mostramos o código correspondente da API Data Studio para endpoints comuns da API Drive.

Arquivos

A API Data Studio tem apenas um endpoint equivalente ao endpoint Files: list dos arquivos da API Drive.

Lista

API Método Endpoint
Drive POST /drive/v3/files/fileId/permissions
Data Studio GET /v1/assets:search

Comparação:

Drive

const oAuthToken = '123' // This should be replaced with a valid OAuth token.
fetch(`https://www.googleapis.com/drive/v3/files`, {
  headers: {
    Authorization: `Bearer ${oAuthToken}`
  },
  method: "POST",
})

Data Studio

const oAuthToken = '123' // This should be replaced with a valid OAuth token.
fetch(`https://datastudio.googleapis.com/v1/assets:search?assetTypes={ASSET_TYPE}`, {
  headers: {
    Authorization: `Bearer ${oAuthToken}`
  }
})

Veja os recursos de pesquisa.

Permissões

Create, delete e get

API Método Endpoint
Drive POST /drive/v3/files/fileId/permissions
Drive DELETE /drive/v3/files/fileId/permissions/permissionId
Drive GET /drive/v3/files/fileId/permissions/permissionId

Não há endpoints correspondentes na API Data Studio para gerenciar vários objetos Permissions. Existe apenas um objeto de permissões para um recurso do Data Studio, que precisa estar sempre presente.

Lista

Não há uma correspondência exata entre as APIs Drive e Data Studio, mas os endpoints têm metas semelhantes. A principal diferença é que um arquivo da API Drive pode ter muitos objetos de permissões, e a API Data Studio só tem um.

API Método Endpoint
Drive GET /drive/v3/files/fileId/permissions
Data Studio GET /v1/assets/assetId/permissions

Comparação:

Drive

Com o código abaixo, é possível visualizar todos os objetos de permissões da API Drive. Dependendo do código, você pode chamar esse método várias vezes usando tokens de paginação, conforme mostramos a seguir, para garantir que todas as permissões definidas para um arquivo sejam exibidas.

const fileId = '123'; // This should be replaced with a valid Drive ID.
const oAuthToken = '123'; // This should be replaced with a valid OAuth token.
let nextPageToken = undefined;
let permissions = [];
do {
  const permissionsData = await fetch(`https://www.googleapis.com/drive/v3/files/${fileId}/permissions`, {
    headers: {
      Authorization: `Bearer ${oAuthToken}`
    }
  });
  nextPageToken = permissionsData.nextPageToken;
  permissions = permissions.concat(permissionsData.permissions)
} while (nextPageToken !== undefined);

Data Studio

Como há apenas um objeto de permissão para um recurso do Data Studio, não é preciso considerar a paginação.

const oAuthToken = '123' // This should be replaced with a valid OAuth token.
const assetId = '123' // This should be replaced with a valid asset ID.
fetch(`https://datastudio.googleapis.com/v1/assets/{ASSET_ID}/permissions`, {
  headers: {
    Authorization: `Bearer ${oAuthToken}`
  }
}

Consulte as permissões get.

Atualizar

As APIs Data Studio e Drive funcionam de forma muito semelhante para atualizar permissões. A principal diferença é que não é possível definir um expirationTime no Data Studio.

API Método Endpoint
Drive PATCH /drive/v3/files/fileId/permissions/permissionId
Data Studio PATCH /v1/assets/assetId/permissions

Comparação:

Drive

const fileId = '123'; // This should be replaced with a valid Drive ID.
const oAuthToken = '123'; // This should be replaced with a valid OAuth token.
const newPermissionsObject = {
  expirationTime: '...',
  role: 'owner', // Or any other option
}
fetch(`https://www.googleapis.com/drive/v3/files/${fileId}/permissions/permissionId`, {
  headers: {
    Authorization: `Bearer ${oAuthToken}`
  },
  method: "PATCH",
  body: JSON.stringify(newPermissionsObject)
})

Data Studio

const oAuthToken = '123' // This should be replaced with a valid OAuth token.
const assetId = '123' // This should be replaced with a valid asset ID.
const newPermissionsObject = {
  permissions: {
    //...
  }
}

fetch(`https://datastudio.googleapis.com/v1/assets/${assetId}/permissions`, {
  headers: {
    Authorization: `Bearer ${oAuthToken}`
  },
  method: "PATCH",
  body: JSON.stringify({
    assetId: assetId,
    permissions: newPermissionsObject
  })
})

Para ver outros casos de uso, consulte: