Делюсь рецептом использования Google APIs Client Library for PHP, в частности для сервиса Google Cloud Storage.
Я использую Cloud Storage как дешевое/бесплатное, высокопроизводительное хранилище статических файлов (картинок, js, css и пр.) в своих новых проектах, этакий CDN, что позволяет разгрузить, очистить основной сервер сайта/приложения от этой задачи.
Итак, направляемся в Google Developers Console (надеюсь у вас уже есть аккаунт в Google 🙂
Projects → Create Project, к примеру «My Project»
Создаем bucket
Заходим в только что созданный «My Project». Добавляем bucket, к примеру «My bucket»
Storage → Cloud Storage → Storage browser → Add bucket
Bucket являются основными контейнерами, содержащими ваши данные. Все, что вы храните в Google Cloud Storage, должны содержаться в bucket. Вы можете использовать bucket, чтобы организовать свои данные и контролировать доступ к вашим данным, но в отличие от каталогов и папок, вы не можете создавать вложенные bucket. Bucket относятся к одному проекту и не могут быть распределены между другими проектами. Нет ограничения на количество bucket, которые можно создать в проекте.
Создаем Client Id и «крендельки» OAuth 2.0
OAuth 2.0 позволяет пользователям обмениваться конкретными данными с вами (например, списки контактов), сохраняя при этом их логины, пароли и другую информацию приватной.
В меню нашего «My Project» → APIs & auth → Credentials → OAuth → Create new Client ID → Service account → Configure consent screen
Сохраните .p12-файл ключ, он понадобится (хотя позже можно сгенерировать другой, нажав Generate new P12 key), также понадобятся данные из появившейся таблицы Service Account (CLIENT ID, EMAIL ADDRESS)
В чем различия APPLICATION TYPE
Web application — доступ через браузер, авторизация через ввода логина/пароля аккаунта в гугл и редиректа к приложению.
Service account — доступ через вызовы Google APIs, без действий юзера, например PHP-скриптом как у нас.
Installed application — для десктопных или мобильных приложений.
Все необходимое есть, теперь подключаем гугловскую либу
и вводим параметры доступа Service Account
require_once 'google-api-php-client/autoload.php'; // or wherever autoload.php is located $client = new Google_Client(); $client->setApplicationName('My App Name'); $client->setClientId('CLIENT ID'); // имеет вид 12345678910-fb2vu7ipertbg3t73shtu2m30b838756.apps.googleusercontent.com, получили ранее $client->setScopes('https://www.googleapis.com/auth/devstorage.full_control'); $privateKey = file_get_contents('P12_KEY_FILE_PATH_.p12'); // получаем контент .p12 файла, который получили ранее $client->setAssertionCredentials(new Google_Auth_AssertionCredentials( 'EMAIL ADDRESS', // имеет вид 12345678910-fb2vu7ipertbg3t73shtu2m30b838756@developer.gserviceaccount.com, получили ранее array('https://www.googleapis.com/auth/devstorage.full_control'), $privateKey ));
Создаем объект Google_Service_Storage
и получаем его «objects»
$storageService = new Google_Service_Storage($client); $objects = $storageService->objects;
Objects — понятие в Google Cloud Storage как и bucket, отдельные части данных, которые вы храните в Cloud Storage. Объекты имеют две составляющие: объект данных (data), и метаданные объекта (metadata ). Компонент данных объекта, как правило, файл, который вы хотите хранить в Google Cloud Storage. Компонент объект метаданные представляет собой набор пар имя-значение, которые описывают различные свойства объекта. Objects принадлежат bucket и не могут быть распределены между разными bucket. Нет ограничения на количество objects, которые можно создать в bucket.
Создаем объект Object и вставляем его в bucket
$object = new Google_Service_Storage_StorageObject(); $object->setName('FILE_NAME'); // имя файла в bucket $r = $objects->insert( 'My bucket', $object, array( 'data' => file_get_contents('FILE_PATH'), // контент файла 'uploadType' => 'media', 'contentEncoding' => CFileHelper::getMimeType('FILE_PATH'), // MIME-тип файла, в этом примере для этого используется класс CFileHelper из Yii2 'mimeType' => CFileHelper::getMimeType('FILE_PATH'), // то же самое, так же вы можете установить универсальный application/octet-stream 'predefinedAcl' => 'publicread' // присваиваем предопределенный ACL public-read ) );
Google Cloud Storage использует списки контроля доступа (ACL) для управления bucket и доступа к объектам. Списки контроля доступа (ACL) — механизм, для разграничения доступа к bucket и objects.
public-read (publicRead) — права на чтение всем пользователям, в том числе без аутентификации.