glamstack / google-workspace-sdk
Google Workspace API SDK for Laravel
Requires
- php: ^8.0
- doctrine/annotations: ^1.13
- glamstack/google-auth-sdk: ^2.5
- illuminate/contracts: ^9.0
- spatie/laravel-package-tools: ^1.9.2
- symfony/options-resolver: ^6.0
- symfony/validator: ^6.0
Requires (Dev)
- ext-dom: *
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- pestphp/pest-plugin-mock: ^1.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- spatie/laravel-ray: ^1.26
- dev-main
- 3.0.x-dev
- 2.8.31
- 2.2.7
- dev-33-bug-sdk-reauths-before-each-api-call
- dev-32-feature-add-google-vault-resources
- dev-26-feature-add-calendar-resources
- dev-30-feature-bug-allow-for-excluding-either-domain-or-customer-request-parameters-of-post-request
- dev-25-feature-bug-allow-for-excluding-either-domain-or-customer-request-parameters-of-get-request
- dev-dev
- dev-11-update-package-scaffolding-to-allow-for-adding-additional-resources
- dev-10-bug-logresponse-in-getnextpageresults-method-passing-in-incorrect-object-type
- dev-3-create-apiclient-class-for-package
- dev-1-add-package-scaffolding
This package is auto-updated.
Last update: 2024-09-07 23:15:16 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。
如果您需要的端点尚未创建,我们已提供 REST 类,该类可以执行对您在 Google Workspace API 文档 中找到的任何端点的 GET、POST、PUT 和 DELETE 请求。该类将为您处理 API 响应、错误处理和分页。
:warning:
PATCH请求目前不起作用,但将在未来实现。
本软件包基于Laravel HTTP客户端的简洁性,该客户端由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
如果您正在为这个包做出贡献,请参阅CONTRIBUTING以获取配置本地Composer包的symlinks的说明。
发布配置文件
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格式的发布日期。
为什么我们不使用语义版本控制
- 我们持续向
main/master/production发布,并在大多数版本中做出破坏性更改,因此对我们来说,具有语义向后兼容的版本号是不直观的。 - 我们不喜欢就我们的发布/里程碑命名进行辩论,也不喜欢它是一个主要版本、次要版本还是修补程序版本。我们只是编写代码,编写变更日志,并在完成的那天发布。变更日志的发布日期成为标记版本号(例如,
2022-02-01是v2.2.1)。我们可能对更大版本的发布(例如,v2.2)进行引用,但这仅用于月度里程碑规划和规范目的。所有代码标记都包括发布日期(例如,v2.2.1)。 - 这使我们能够使用GitLab CI/CD自动化基于管道作业运行日期的版本标记过程。
- 在计划变更窗口期间,我们更新了所有使用此包的项目
composer.json文件,指定或使用新版本号,而不用担心与“保持最新版本”的差异和/或破坏性更改。我们不维护任何分叉或分歧分支。 - 我们的包使用您现有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密钥相关联。这可以用于配置不同的认证范围连接和权限,针对您的GCP组织或不同的GCP项目(根据您使用的API调用)。这允许针对特定API调用进行最小权限设置,并且您还可以配置与同一GCP项目关联的多个连接,这些连接具有不同权限级别的不同API令牌。
示例连接密钥初始化
// 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')
],
]
]
动态连接配置数组
如果您不想预先配置连接,并希望动态使用存储在数据库中的连接变量,您可以通过数组传递所需的配置(参见示例连接配置数组初始化),在ApiClient构造方法的第二个参数中使用connection_config数组。
必需参数
| 键 | 类型 | 描述 |
|---|---|---|
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文件。
如果您希望将Google Workspace日志放入一个单独的日志文件中,以便在没有无关日志消息的情况下更容易地进行故障排除,您可以创建一个自定义日志通道。例如,我们建议使用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 Directory文档中的任何资源端点发出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,您可以使用端点调用Google Workspace用户的get()方法。
$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错误,则GoogleWorkspaceApiClient的handleException方法将返回响应。
有关SDK如何处理错误和日志记录的更多信息,请参阅下面的日志输出。
日志输出
错误消息的输出显示在
README中,以便搜索引擎可以索引这些消息以支持开发人员调试。任何5xx错误消息都将作为Symfony\Component\HttpKernel\Exception\HttpException或配置错误返回,包括在ApiClient::setApiConnectionVariables()方法中的任何错误。
问题跟踪和错误报告
请访问我们的问题跟踪器并创建一个问题或对现有问题发表评论。
贡献
请参阅CONTRIBUTING.md以了解更多关于如何贡献的信息。