Выбор определенных полей Google Drive API v3 - PullRequest
1 голос
/ 23 мая 2019

Я наконец-то получил Google Drive API V3 для работы со служебной учетной записью.

Теперь для извлечения всех файлов с накопителя я использую следующее:

$optParams = [
    'corpora' => 'drive',
    'driveId' => env('GOOGLE_DRIVE_ID'),
    'includeItemsFromAllDrives' => true,
    'supportsAllDrives' => true,
    'fields' => 'files(name,mimeType,trashed,parents,version,webContentLink,webViewLink,createdTime,modifiedTime,size)'
];

$this->googleDrive->files->listFiles($optParams);

Поэтому я специально спрашиваюдля определенных полей в массиве файлов.Проблема в том, что все остальные поля все еще там (за исключением того, что все они имеют значение null ).Это нормальное поведение?Потому что, если я пытаюсь получить от 20 до 50 файлов, которые все еще переносят несколько бесполезных килобайт.

Пример ответа:

  +"files": array:2 [▼
    0 => Google_Service_Drive_DriveFile {#279 ▼
      #collection_key: "spaces"
      +appProperties: null
      #capabilitiesType: "Google_Service_Drive_DriveFileCapabilities"
      #capabilitiesDataType: ""
      #contentHintsType: "Google_Service_Drive_DriveFileContentHints"
      #contentHintsDataType: ""
      +copyRequiresWriterPermission: null
      +createdTime: "2019-05-22T11:41:25.852Z"
      +description: null
      +driveId: null
      +explicitlyTrashed: null
      +exportLinks: null
      +fileExtension: null
      +folderColorRgb: null
      +fullFileExtension: null
      +hasAugmentedPermissions: null
      +hasThumbnail: null
      +headRevisionId: null
      +iconLink: null
      +id: null
      #imageMediaMetadataType: "Google_Service_Drive_DriveFileImageMediaMetadata"
      #imageMediaMetadataDataType: ""
      +isAppAuthorized: null
      +kind: null
      #lastModifyingUserType: "Google_Service_Drive_User"
      #lastModifyingUserDataType: ""
      +md5Checksum: null
      +mimeType: "application/zip"
      +modifiedByMe: null
      +modifiedByMeTime: null
      +modifiedTime: "2019-05-22T11:41:25.852Z"
      +name: "<something>"
      +originalFilename: null
      +ownedByMe: null
      #ownersType: "Google_Service_Drive_User"
      #ownersDataType: "array"
      +parents: array:1 [▶]
      +permissionIds: null
      #permissionsType: "Google_Service_Drive_Permission"
      #permissionsDataType: "array"
      +properties: null
      +quotaBytesUsed: null
      +shared: null
      +sharedWithMeTime: null
      #sharingUserType: "Google_Service_Drive_User"
      #sharingUserDataType: ""
      +size: "455778"
      +spaces: null
      +starred: null
      +teamDriveId: null
      +thumbnailLink: null
      +thumbnailVersion: null
      +trashed: false
      +trashedTime: null
      #trashingUserType: "Google_Service_Drive_User"
      #trashingUserDataType: ""
      +version: "2"
      #videoMediaMetadataType: "Google_Service_Drive_DriveFileVideoMediaMetadata"
      #videoMediaMetadataDataType: ""
      +viewedByMe: null
      +viewedByMeTime: null
      +viewersCanCopyContent: null
      +webContentLink: "<something>"
      +webViewLink: "<something>"
      +writersCanShare: null
      #internal_gapi_mappings: []
      #modelData: []
      #processed: []
    }
    1 => Google_Service_Drive_DriveFile {#269 ▶}

1 Ответ

1 голос
/ 23 мая 2019

В google drive api v3 реализовано что-то под названием Частичный ответ На самом деле большинство API-интерфейсов Google имеют это поля - необязательный параметр.

По умолчанию сервер отправляет обратно полное представление ресурса после обработки запросов.Для повышения производительности вы можете попросить сервер отправить только те поля, которые вам действительно нужны, и вместо этого получить частичный ответ.

ИМО не всегда хорошо документирован, поскольку вышеприведенное утверждение верно.

Диск v3 по умолчанию НЕ отправляет обратно полное представление.В этом основное отличие накопителя v3, и по умолчанию другие API-интерфейсы по умолчанию возвращают все и выполняют частичный ответ только в том случае, если разработчик запрашивает его, используя поля parm.

Ответ диска files.list содержит список файлов, и он только по умолчанию возвращает вам следующие 4 поля.

{
   "kind": "drive#file",
   "id": "hzqXfMiOiFlrYdQCx3Rram0vuf9lmXa",
   "name": "Sayak",
   "mimeType": "application/vnd.google-apps.folder"
  }

Вероятно, вы видите нулевые значения.исходя из библиотеки, которую вы используете, анализируя пустые значения объекта как ноль.

, если вы сделаете

$optParams = [
    'corpora' => 'drive',
    'driveId' => env('GOOGLE_DRIVE_ID'),
    'includeItemsFromAllDrives' => true,
    'supportsAllDrives' => true,
    'fields' => '*'
];

Это фактически заполнит все поля для вас.

...