gitlab-it/google-workspace-sdk

此包的最新版本(2.8.31)没有可用的许可证信息。

Google Workspace API SDK for Laravel

2.8.31 2022-08-31 17:32 UTC

This package is not auto-updated.

Last update: 2024-09-26 04:42:11 UTC


README

概览

Google Workspace SDK 是由 GitLab IT Engineering 开发的开源 Composer 包,用于 GitLab Access Manager Laravel 应用程序,以便连接到 Google API 端点,以提供用户、组、组成员和其他相关功能的配置和撤销配置。

免责声明:这不是 Google 或 GitLab 产品和开发团队维护的官方包。这是我们 GitLab IT 部门使用的内部工具,我们将其开源作为我们公司价值观的一部分。

请自行承担风险,并为我们遇到的任何错误创建问题。

我们不维护社区功能请求路线图,但我们邀请您贡献,我们很乐意审查您的合并请求。

依赖项

注意:此包需要 glamstack/google-auth-sdk 包才能运行。这已在 composer.json 文件中配置为必需的包,并在安装此包时自动加载。

默认情况下,此包的所有配置都将配置在 glamstack-google-workspace.php 文件中,当安装此包时将加载该文件。有关进一步指导,请参阅安装文档

维护者

名称GitLab 处理
Dillon Wheeler@dillonwheeler
Jeff Martin@jeffersonmartin

工作原理

此包利用 glamstack/google-auth-sdk 包创建 Google JWT Web Token 以认证 Google Workspace API。

有关 glamstack/google-auth-sdk 的更多信息,请参阅 Google Auth SDK README.md

此包并非旨在提供 Google Workspace API 的每个端点的功能。端点将根据需要构建。如果您希望添加任何其他端点,请参阅 CONTRIBUTING

如果所需的端点尚未创建,我们已经提供了可以执行 GET、POST、PUT 和 DELETE 请求的 REST 类,这些请求是对您在 Google Workspace API 的文档 中找到的任何端点的请求,该类将处理 API 响应、错误处理和分页。

:warning: PATCH 请求目前不起作用,但将在将来实现。

此包建立在 Laravel HTTP Client 的简单性之上,该客户端由 Guzzle HTTP 客户端提供动力,以提供对 Google Workspace API 响应的“最后一行代码解析”,以改善开发者体验。

// Initialized Client with `connection_key` parameter
$google_workspace_api = new \Glamstack\GoogleWorkspace\ApiClient('workspace');
  
// Retrieves a paginated list of either deleted users or all users in a domain.  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/list  
$records = $google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users');  
  
// Retrieves a paginated list of either deleted users or all users in a domain  
// with query parameters included.  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/list  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/list#OrderBy  
// https://developers.google.com/admin-sdk/directory/v1/guides/search-users  
$records = $google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users',[  
    'maxResults' => '200',
    'orderBy' => 'EMAIL',
    'query' => [
        'orgDepartment' => 'Test Department'
    ]
]);  
  
// Get a specific user from Google Workspace  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/get  
$user_key = 'klibby@example.com';  
$record = $google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users/'.$user_key);  
  
// Create new Google Workspace User  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/insert  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users#User  
$record = $google_workspace_api->rest()->post('https://admin.googleapis.com/admin/directory/v1/users', [
    'name' => [
        'familyName' => 'Libby',
        'givenName' => 'Kate'
    ],
    'password' => 'ac!dBurnM3ss3sWithTheB4$t',
    'primaryEmail' => 'klibby@example.com'
]);  
  
// Update an existing Google Workspace User  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/update  
$user_key = 'klibby@example.com';  
$record = $google_workspace_api->rest()->put('https://admin.googleapis.com/admin/directory/v1/users/'.$user_key, [  
    'name' => [
        'givenName' => 'Libby-Murphy'
    ]
]);  
  
// Delete a Google Workspace User  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/delete  
$user_key = 'klibby@example.com';  
$record = $google_workspace_api->rest()->delete('https://admin.googleapis.com/admin/directory/v1/users/'.$user_key);  

包初始化

此软件包通过配置初始化,请参阅如何使用配置文件初始化,了解两种初始化方法的说明。

安装

要求

要求版本
PHP>=8.0
Laravel>=9.0

添加Composer包

此软件包使用日历版本控制

我们建议始终在您的composer.json文件中使用特定版本,并查看变更日志,以了解每个发布版本中的重大变更,在假设最新版本适合您的项目之前。

composer require glamstack/google-workspace-sdk

如果您正在为此软件包做贡献,请参阅贡献,了解如何配置具有符号链接的本地composer包的说明。

发布配置文件

php artisan vendor:publish --tag=glamstack-google-workspace

版本升级

如果您已升级到该软件包的新版本,应备份现有的配置文件,以避免您的自定义配置被覆盖。

cp config/glamstack-google-workspace.php config/glamstack-google-workspace.php.bak

php artisan vendor:publish --tag=glamstack-google-workspace

日历版本控制

GitLab IT工程团队使用日历版本控制(CalVer)的修改版,而不是语义版本控制(SemVer)。CalVer有YY(例如2021 => 21),但对我们来说,版本21.xx感觉不太直观。由于我们团队从2021年开始,我们决定只使用年份的最后一位整数(2021 => 1.x,2022 => 2.x等)。

版本号代表以vY.M.D格式表示的发布日期。

为什么我们不使用语义版本控制

  1. 我们持续向main/master/production发布,并在大多数发布中进行破坏性更改,因此对我们来说,具有语义向后兼容的版本号是不直观的。
  2. 我们不喜欢争论如何称呼我们的发布/里程碑,以及它是否是主要版本、次要版本还是补丁版本。我们只是编写代码,编写变更日志,然后在完成的那一天发布。变更日志的发布日期成为标签版本号(例如,2022-02-01v2.2.1)。我们可能对更大的版本号(例如,v2.2)进行引用,但这仅用于每月里程碑计划和规范目的。所有代码标签都包括发布日期(例如,v2.2.1)。
  3. 这使我们能够使用GitLab CI/CD自动化基于管道作业运行日期的版本标记过程。
  4. 我们在预定更改窗口期间更新我们的项目composer.json文件,该文件使用此软件包,将其更新为特定或新版本号,而无需担心与“保持最新版本”的差异和/或破坏性更改。我们不维护任何分叉或分支。
  5. 我们的软件包使用您现有的Laravel应用程序中的底层软件包,因此保持您的Laravel应用程序版本更新可以解决大多数安全问题。

初始化SDK

API客户端的初始化可以通过传递(字符串)连接密钥或传递(数组)连接配置来完成。

Google API身份验证

该软件包利用glamstack/google-auth-sdk软件包来创建Google JWT Web Token,以用于认证Google Cloud API端点

有关 glamstack/google-auth-sdk 的更多信息,请参阅 Google Auth SDK README.md

连接密钥

我们使用 连接密钥 的概念,它指的是 config/glamstack-google-workspace.php 中的配置数组,允许您预配置一个或多个 API 连接。

每个连接密钥都与一个 GCP 服务帐户 JSON 密钥相关联。这可以用来配置不同的认证范围连接和权限,针对您使用的 API 调用,对您的 GCP 组织或不同的 GCP 项目(s)。这允许对特定 API 调用具有最小权限,您还可以配置具有相同 GCP 项目和不同权限级别的多个连接。

示例连接密钥初始化

// Initialize the SDK using the `test` configuration from `glamstack-google-workspace.php`
$client = new Glamstack\GoogleWorkspace\ApiClient('test');

示例连接密钥配置

return [
    'connections' => [
        'test' => [
            'api_scopes' => [
                'https://www.googleapis.com/auth/admin.directory.group',
                'https://www.googleapis.com/auth/admin.directory.user'
            ],
            'json_key_file_path' => storage_path(env('GOOGLE_WORKSPACE_TEST_JSON_KEY_FILE_PATH')),
            'log_channels' => ['single'],
            'customer_id' => env('GOOGLE_WORKSPACE_TEST_CUSTOMER_ID'),
            'domain' => env('GOOGLE_WORKSPACE_TEST_DOMAIN'),
            'subject_email' => env('GOOGLE_WORKSPACE_TEST_SUBJECT_EMAIL'),
            'test_group_email' => env('GOOGLE_WORKSPACE_TEST_GROUP_EMAIL')
        ],
    ]
]

动态连接配置数组

如果您不想预先配置您的连接,而是希望动态使用存储在您的数据库中的连接变量,您可以通过传递数组(见 示例连接配置数组初始化)来使用 connection_config 数组,这是 ApiClient 构造方法的第二个参数,从而获得所需的配置。

所需参数

类型描述
api_scopes数组需要用于 API 的 API 范围数组
customer_id字符串Google Workspace 客户端 ID
domain字符串API 将在其中使用的 Google Workspace 域
json_key_file_path字符串选项 1 - 提供到 .json 密钥文件的路径
json_key字符串选项 2 - 提供存储在您的数据库中的 JSON 密钥内容

在文件系统中使用 JSON 密钥文件

$client = new Glamstack\GoogleWorkspace\ApiClient(null, [
    'api_scopes' => [
        'https://www.googleapis.com/auth/admin.directory.group',
        'https://www.googleapis.com/auth/contacts'
    ],
    'customer_id' => config('tests.connections.test.customer_id'),
    'domain' => config('tests.connections.test.domain'),
    'json_key_file_path' => storage_path('keys/glamstack-google-workspace/test.json'),
    'log_channels' => ['single'],
    'subject_email' => config('tests.connections.test.subject_email')
]);

在数据库中使用 JSON 密钥字符串

安全警告:您绝对不应将服务帐户密钥(JSON 内容)作为变量提交到源代码中,以避免泄露您的 GCP 组织或项目的凭证。

建议在加密之前将 JSON 密钥转换为 base 64 编码的字符串,因为这是 GCP 服务帐户 API 中 privateKeyData 字段使用的格式。

// Get service account from your model (`GoogleServiceAccount` is an example)
$service_account = \App\Models\GoogleServiceAccount::where('id', '123456')->firstOrFail();

// Get JSON key string from database column that has an encrypted value
$json_key_string = decrypt(json_decode($service_account->json_key));

$client = new \Glamstack\GoogleWorkspace\ApiClient(null, [
    'api_scopes' => [
        'https://www.googleapis.com/auth/admin.directory.group',
        'https://www.googleapis.com/auth/contacts'
    ],
    'customer_id' => config('tests.connections.test.customer_id'),
    'domain' => config('tests.connections.test.domain'),
    'json_key' => $json_key_string,
    'log_channels' => ['single'],
    'subject_email' => config('tests.connections.test.subject_email')
]);

以下示例显示了存储在您的数据库中的 JSON 密钥的值。

// Get service account from your model (`GoogleServiceAccount` is an example)
$service_account = \App\Models\GoogleServiceAccount::where('id', '123456')->firstOrFail();

dd(decrypt(json_decode($service_account->json_key));
// {
//     "type": "service_account",
//     "project_id": "project_id",
//     "private_key_id": "key_id",
//     "private_key": "key_data",
//     "client_email": "xxxxx@xxxxx.iam.gserviceaccount.com",
//     "client_id": "123455667897654",
//     "auth_uri": "https://#/o/oauth2/auth",
//     "token_uri": "https://oauth2.googleapis.com/token",
//     "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
//     "client_x509_cert_url": "some stuff"
// }

自定义日志配置

默认情况下,我们使用在您的应用程序的 config/logging.php 文件中配置的 single 通道发送所有日志。这会将所有 Google Workspace 日志消息发送到 storage/logs/laravel.log 文件。

如果您希望在不相关的日志消息中看到单独的日志文件,以便更容易进行故障排除,您可以创建自定义日志通道。例如,我们建议使用 glamstack-google-workspace 的值,但是您可以选择任何您喜欢的名称。

将自定义日志通道添加到 config/logging.php

    'channels' => [  
        // Add anywhere in the `channels` array  
        'glamstack-google-workspace' => [
            'name' => 'glamstack-google-workspace',
            'driver' => 'single',
            'level' => 'debug',
            'path' => storage_path('logs/glamstack-google-workspace.log')
        ]
    ],  

更新 channels.stack.channels 数组以包括您的自定义通道的数组键(例如,glamstack-google-workspace)。请确保将 glamstack-google-workspace 添加到现有数组值中,而不是替换现有值。

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => [
                'single','slack', 'glamstack-google-workspace'
            ],
            'ignore_exceptions' => false
        ]
    ],  

REST API 请求

您可以向 Google Workspace Admin SDK 目录文档 中的任何资源端点发出 API 请求。

内联使用

// Initialize the SDK  
$api_client = new \Glamstack\GoogleWorkspace\ApiClient('workspace');
$response = $api_client->rest()->get('https://admin.googleapis.com/admin/directory/v1/users');

GET 请求

使用REST类时,端点需要完整的URL。

例如,列出Google Workspace用户 API文档显示了端点

GET https://admin.googleapis.com/admin/directory/v1/users  

使用SDK,您可以使用get()方法和Google Workspace用户的端点。

$google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users');  

您还可以使用变量或数据库模型来获取构建端点所需的数据。

$endpoint = 'https://admin.googleapis.com/admin/directory/v1/users';  
$records = $google_workspace_api->rest()->get($endpoint);  

以下是使用端点的更多示例。

// Get a list of Google Workspace Users  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/list  
$records = $google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users');  
  
// Get a specific Google Workspace User  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/get  
$user_key = 'klibby@example.com';  
$record = $google_workspace_api->get('https://admin.googleapis.com/admin/directory/v1/users/' . $userKey);  

带有查询字符串参数的GET请求

get()方法的第二个参数是一个可选的参数数组,由SDK和Laravel HTTP客户端解析,并以查询字符串的形式自动添加?&进行渲染。

// Retrieves a paginated list of either deleted users or all users in a domain  
// with query parameters included.  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/list  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/list#OrderBy  
// https://developers.google.com/admin-sdk/directory/v1/guides/search-users  
$records = $google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users',[  
    'maxResults' => '200',
    'orderBy' => 'EMAIL'
]);  
  
// This will parse the array and render the query string  
// https://admin.googleapis.com/admin/directory/v1/users?maxResults='200'&orderBy='EMAIL'  

POST请求

post()方法几乎与get()请求相同,都有一个参数数组,但是参数作为使用application/json内容类型的表单数据传递,而不是作为查询字符串在URL中传递。这是行业标准,并非特定于SDK。

您可以在Laravel HTTP客户端文档中了解更多关于请求数据的信息。

// Create new Google Workspace User  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/insert  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users#User  
$record = $google_workspace_api->rest()->post('https://admin.googleapis.com/admin/directory/v1/users', [  
    'name' => [
        'familyName' => 'Libby',
        'givenName' => 'Kate'
    ],
    'password' => 'ac!dBurnM3ss3sWithTheB4$t',
    'primaryEmail' => 'klibby@example.com'
]);  

PUT请求

put()方法用于更新现有记录(类似于PATCH请求)。您需要确保在第一个参数(URI)中提供您要更新的记录的ID。

在大多数应用程序中,这将是从您的数据库或其他位置获取的变量,而不是硬编码的。

// Update an existing Google Workspace User  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/update  
$user_key = 'klibby@example.com';  
$record = $google_workspace_api->rest()->put('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key, [
    'name' => [
        'givenName' => 'Libby-Murphy'
    ]
]);  

DELETE请求

delete()方法用于根据您提供的ID销毁资源的操作。

请注意,delete()方法的返回状态码将根据供应商而有所不同(例如,200、201、202、204等)。Google Workspace API将返回204状态码表示成功删除资源。

// Delete a Google Workspace User  
// https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/delete  
$user_key = 'klibby@example.com';  
$record = $google_workspace_api->rest()->delete('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key);  

类方法

上面的示例显示了适用于大多数用例的基本内联用法。如果您更喜欢使用类和构造函数,下面的示例将提供有用的示例。

<?php  
  
use Glamstack\GoogleWorkspace\ApiClient;  
  
class GoogleWorkspaceUserService  
{  
    protected $google_workspace_api;  
    public function __construct() {
        $this->google_workspace_api = new \Glamstack\GoogleWorkspace\ApiClient();
    }  
    
    public function listUsers(array $query = []) : object
    {
        $users = $this->google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users', $query);
        return $users->object;
    }
    
    public function getUser(string $user_key, array $query = []) : object
    {
        $user = $this->google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key, $query);
        return $user->object;
    } 
    
    public function storeUser(string $user_key, array $request_data = []) : object
    {
        $response = $this->google_workspace_api->rest()->post('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key, $request_data);
        return $response->object;
    }

    public function updateUser(string $user_key, array $request_data = []) : object
    {
        $response = $this->google_workspace_api->rest()->put('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key, $request_data);
        return $response->object;
    } 

    public function deleteUser(string $user_key) : bool
    {
        $response = $this->google_workspace_api->rest()->delete('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key);
        return $response->status->successful;
    }
}  

API响应

此SDK使用GLAM堆栈标准进行API响应格式化。

// API Request  
$response = $this->google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key);  
  
// API Response  
$response->headers; // object  
$response->json; // json  
$response->object; // object  
$response->status; // object  
$response->status->code; // int (ex. 200)  
$response->status->ok; // bool  
$response->status->successful; // bool  
$response->status->failed; // bool  
$response->status->serverError; // bool  
$response->status->clientError; // bool  

API响应头

$response = $this->google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key);  
$response->headers;  
{  
    +"ETag": ""nMRgLWac8h8NyH7Uk5VvV4DiNp4uxXg5gNUd9YhyaJE/MgKWL9SwIVWCY7rRA988mR8yR-k""
    +"Content-Type": "application/json; charset=UTF-8"    
    +"Vary": "Origin X-Origin Referer"    
    +"Date": "Thu, 20 Jan 2022 16:36:03 GMT"    
    +"Server": "ESF"    
    +"Content-Length": "1257"    
    +"X-XSS-Protection": "0"    
    +"X-Frame-Options": "SAMEORIGIN"    
    +"X-Content-Type-Options": "nosniff"    
    +"Alt-Svc": "h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43""
}  

API响应特定头

$headers = (array) $response->headers;  
$content_type = $headers['Content-Type'];  
application/json  

API响应JSON

$response = $this->google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key);  
$response->json;  
{
    "kind":"admin#directory#user","id":"1111111111111",
    "etag":"\"nMRgLWac8h8NyH7Uk5VvV4DiNp4uxXg5gNUd9YhyaJE\/MgKWL9SwIVWCY7rRA988mR8yR-k\"",
    "primaryEmail":"klibby@example.com",
    "name":{
        "givenName":"Kate",
        "familyName":"Libby",
        "fullName":"Kate Libby"
    },
    "isAdmin":true,
    "isDelegatedAdmin":false,
    "lastLoginTime":"2022-01-18T15:26:16.000Z",
    "creationTime":"2021-12-08T13:15:43.000Z",
    "agreedToTerms":true,
    "suspended":false,
    "archived":false,
    "changePasswordAtNextLogin":false,
    "ipWhitelisted":false,
    "emails":[
        {
            "address":"klibby@example.com",
            "type":"work"
        },
        {
            "address":"klibby@example.com",
            "primary":true
        },
        {
            "address":"klibby@example.com.test-google-a.com"
        }
    ],
    "phones":[
        {
            "value":"5555555555",
            "type":"work"
        }
    ],
    "languages":[
        {
            "languageCode":"en",
            "preference":"preferred"
        }
    ],
    "nonEditableAliases":[
        "klibby@example.com.test-google-a.com"
    ],
    "customerId":"C000aaaaa",
    "orgUnitPath":"\/",
    "isMailboxSetup":true,
    "isEnrolledIn2Sv":false,
    "isEnforcedIn2Sv":false,
    "includeInGlobalAddressList":true
} 

API响应对象

$response = $this->google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key);  
$response->object;  
{#1256  
  +"kind": "admin#directory#user"
  +"id": "1111111111111"  
  +"etag": ""nMRgLWac8h8NyH7Uk5VvV4DiNp4uxXg5gNUd9YhyaJE/MgKWL9SwIVWCY7rRA988mR8yR-k""  
  +"primaryEmail": "klibby@example.com"  
  +"name": {#1242  
    +"givenName": "Kate"    
    +"familyName": "Libby"    
    +"fullName": "Kate Libby"  
  }  
  +"isAdmin": true  
  +"isDelegatedAdmin": false  
  +"lastLoginTime": "2022-01-18T15:26:16.000Z"  
  +"creationTime": "2021-12-08T13:15:43.000Z"  
  +"agreedToTerms": true  
  +"suspended": false  
  +"archived": false  
  +"changePasswordAtNextLogin": false  
  +"ipWhitelisted": false  
  +"emails": array:3 [
    0 => {#1253  
      +"address": "klibby@example.com"      
      +"type": "work"    
    }  
    1 => {#1258  
      +"address": "klibby@example.com"      
      +"primary": true  
    }  
    2 => {#1259  
      +"address": "klibby@example.com.test-google-a.com"
    }  
  ]  
  +"phones": array:1 [    
    0 => {#1247  
      +"value": "5555555555"      
      +"type": "work"    
    }  
  ]  
  +"languages": array:1 [    
    0 => {#1250  
      +"languageCode": "en"      
      +"preference": "preferred"    
    }  
  ]
  +"nonEditableAliases": array:1 [  
    0 => "klibby@example-test.com.test-google-a.com"  
  ]  
  +"customerId": "C000aaaaa"  
  +"orgUnitPath": "/"  
  +"isMailboxSetup": true  
  +"isEnrolledIn2Sv": false  
  +"isEnforcedIn2Sv": false  
  +"includeInGlobalAddressList": true  
}  

API响应状态

请参阅Laravel HTTP客户端文档了解有关不同状态布尔值的更多信息。

$response = $this->google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key);  
$response->status;  
{  
  +"code": 200  
  +"ok": true  
  +"successful": true  
  +"failed": false  
  +"serverError": false  
  +"clientError": false  
}  

API响应状态码

$response = $this->google_workspace_api->rest()->get('https://admin.googleapis.com/admin/directory/v1/users/' . $user_key);  
$response->status->code;  
200  

错误处理

API响应的HTTP状态码包含在每个日志条目的消息和JSON status_code中。任何内部SDK错误也包括等效的状态码,具体取决于错误的类型。message包括SDK友好的消息。如果抛出异常,则reference

如果API返回一个5xx错误,则GoogleWorkspaceApiClienthandleException方法将返回一个响应。

请参阅下面的日志输出了解SDK如何处理错误和日志记录。

日志输出

错误消息的输出显示在README中,以便搜索引擎可以索引这些消息以支持开发人员调试。任何5xx错误消息将作为Symfony\Component\HttpKernel\Exception\HttpException或配置错误返回,包括在ApiClient::setApiConnectionVariables()方法中出现的任何错误。

问题跟踪和错误报告

请访问我们的问题跟踪器并创建一个问题或对现有问题发表评论。

贡献

请参阅CONTRIBUTING.md以了解更多关于如何贡献的信息。