ipaas / gapp-laravel
为 Laravel 提供的 IPaaS 包,支持 Google App Engine 的日志记录和处理
Requires
- php: >=7.2
- google/cloud: >=0.132
- google/cloud-error-reporting: >=0.16
- google/cloud-logging: >=1.20
- laravel/framework: 5.*|6.*|7.*|8.*
Requires (Dev)
README
此包包含
- Google 堆栈日志的驱动程序
- Google 错误报告的异常处理器
- Log-info (
iLog
) 助手- 通过 Laravel 服务容器接口收集运行时信息
- 将收集到的信息渲染并附加到每个日志上下文中
- 中间件
- 用于认证请求
- 捕获初始请求以供记录器使用
- 请求
- 提供与请求相关的额外方法
- 异常
- 使用 Log-info 上下文报告异常
- 根据 iPaaS 设定的标准渲染异常
- 响应
- 与响应相关的所有上下文信息
- 根据 iPaaS 设定的标准渲染错误和响应
- 其他助手
- 转换器
- [即将推出更多内容]
设置
i. 添加包
添加 composer 包后运行 composer update
ipaas/gapp-laravel: ~1.1.0
或者 通过运行
composer require ipaas/gapp-laravel // considering v2+
确保
ENV: GAPP_SECURE 设置为 true
;并且
ENV: gcloud 环境中的 LOG_CHANNEL 设置为 stack-driver
;
ii. 迁移和 Artisan 命令
如果您使用的是 2.0 或更高版本,您将能够访问迁移和 artisan 命令
php artisan vendor:publish --tag=gapp
命令将中间件推送到应用程序,并且进一步使用将 GAPP_SECURE
设置为 true
,将应用安全。
php artisan migrate
命令将在您的应用程序中创建一个新的 partner_apps
表,该表将用于在传递中间件 partner
时验证 X-Api-Key
。
php artisan create-partner-app {provider}
命令将在新的 partner_apps
表中创建一个新行,并使用提供者名称作为可选参数。
API 文档
Log-info (ilog)
向所有日志条目添加上下文信息的助手。
一旦将上下文添加到 ilog,它将附加到所有未来的日志条目。ilog 会随着每个请求刷新,并具有与 request() 相同的生命周期。
ilog()
是一个返回单例类 Ipaas\Gapp\Logger\Client.php
的助手方法。要添加上下文信息,只需调用 ilog()
并链式调用任何可用的方法。以下是一些可用的方法:
iLog([data-set])
可以用于重新初始化 * 日志数据。* 可以用于将 log-info 传递到队列作业
示例 以下示例将使用所有提供的上下文在 GCloud Logging 中写入日志
/* ------ Class A ------- */ function validateUser(Request $request){ // validate request $request->validate(['user_id'=>'integer|required']); // get user details $user = User::get($data->user_id); if ($user) { /********LOG-INFO PROVIDER*******/ iLog() // add user details to context ->setClientId($user->id) // client id to context ->setClientKey($user->key); // client key to context // add request details context iLog()->setType('Validate user name'); // Calling other class to resolve request return ClassB::validateUserName($user); } } /* ------ Class B ------- */ // all set context still exist function validateUserName(User $user){ // log event info // will be logged with context Log::info('Validating user name') // validate user name $name = $user->name; if(empty($name) || is_null($name)) { // log warning that name is not valid // will be logged all context Log::warning('Name is null or empty'); return false; } }
中间件
验证
默认情况下,此库尝试通过检查头部来验证请求
- X-Api-Key(在
partner_apps
表上设置)系统将尝试将头部X-Api-Key
与partner_apps
表匹配。要启用,只需在您想要的路径上添加中间件partner
Route::get('foo', FooController@bar)->middleware('partner')
日志记录
默认情况下,库尝试翻译并记录以下详细信息
$request->header('Authorization') // Authorization value from header $request->header('X-Api-Key') // Client ID from header $request->header('Gapp-Request-ID') // Gapp Request ID from header $request->uuid // request uuid $request->dateFrom // date from $request->dateTo // date to
请求
使用 Ipass/Request
控制器解析请求以使用,请参阅以下示例
use Ipaas\Gapp\Request; use Ipass\Response; class Accounts extends Response; { public function index(Request $request) { $rules = ['name' => 'required|string']; $request->validate($rules); } }
所有给定函数在使用扩展方法时都是可链式的
$request ->boolify('EnablePaymentsToAccount') ->arrify('Type') ->validate($rules);
验证 根据 给定的规则集验证请求。
// $rules is laravel validation rule set Func: validate(array $rules) Return: REQUEST if all sucessfull Throw: Unprocessable Entity (422) if validation fails
Arrify 将请求 csv 参数转换为 php 数组。
// $item is request csv param Func: arrify(string $item) Return: modified REQUEST
Boolify 将请求字符串 'true/false' 参数转换为 php 布尔值。
// $item is request string 'true/false' Func: boolify(string $item) Return: modified REQUEST
Requestify 替换请求给定的参数值。
// $item is request parameter name // $value is new value Func: requestify(string $item, mixed $value) Return: modified REQUEST
响应
响应助手
iresponse
或通过扩展基本控制器[YOUR CONTROLLER] extends Ipaas/Response.php
使用,使用此助手,您还可以访问 sendError() 方法,使异常更容易。
设置元数据 设置响应元数据的可链式函数
return $this->meta(['client_id' => 'unknown'])->sendResponse($data);
设置头部 可链式函数用于设置响应头部数据
return $this->header(['content-type' => 'application/json'])->sendResponse($data);
其他辅助函数
转换器
Ipaas/Helper/Converter-Helpers
标准化名称 将ASCII空格Unicode替换为
空格。
输入: te \n sting
响应: te sting
// $name is unicode string Func: normalizedName(string $name) Return: normalized string
布尔列表 将给定的字符串 'true/false' 参数转换为提供的数组中的PHP布尔值。
输入: ['true', 'false', 'TRUE', 'FALSE', true, false, TRUE, FALSE, 0, 1, '0', '1', '', ' test']
响应: [true, false, true, false, true, false, true, false, false, true, false, true, false, true]
// $list is haystack array // $item is needle name Func: boolifyList(array $list, string $item) Return: modified list
注意
ps. 运行在谷歌应用引擎Flex环境中需要 google/cloud 包
故障排除 - 升级 v1.* 到 v2.*
ilog()->data()
已更改为ilog()->appendData()
;iresponse()
方法已被移除,请使用Ipaas\Gapp\Response()
代替;- 您不再需要实例化提供者
Ipaas\IpaasServiceProvider::class
,现在它将由composer自动注入; stackdriver
日志通道已更改为stack-driver
- 所有
ilog()
设置器都已更改- 客户端现在使用 setClientId;
- 密钥现在使用 setClientKey;
- 类型现在使用 setType;
- 日期从现在使用 setDateFrom;
- 日期到现在使用 setDateTo;
- UUID现在使用 setUuid;
- 所有异常辅助函数都已移除
- iThrow;
- UnauthorizedException;
- BadRequestException;
- TooManyRequestException;
- NotFoundException;
- InternalServerException;
- 所有响应辅助函数都已移除
- errorValidation;
- errorUnauthorized;
- errorBadRequest;
- errorTooManyRequest;
- errorNotFound;
- errorNotImplemented;
- errorInternalServer;