ipaas/gapp-laravel

为 Laravel 提供的 IPaaS 包,支持 Google App Engine 的日志记录和处理

v4.0.4 2022-08-08 15:50 UTC

This package is auto-updated.

Last update: 2024-09-08 20:29:01 UTC


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-Keypartner_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;