Skip to content

Latest commit

 

History

History
49 lines (41 loc) · 1.44 KB

middleware.md

File metadata and controls

49 lines (41 loc) · 1.44 KB

请求中间件

了解如何拦截 SDK 发起的请求,并统一添加额外的逻辑。

UCloud SDK 为请求提供了请求中间件的特性。

该特性允许在 请求/响应 的生命周期中添加自定义的逻辑。

例如,Client 级别的中间件,可以拦截参数/响应字典:

use UCloud\Core\Middleware\Context;
use UCloud\Core\Middleware\Middleware;
use UCloud\Core\Request\Request;
use UCloud\Core\Response\Response;

class LogMiddleware extends Middleware
{
    public function handleRequest(Context $ctx): Request
    {
        $req = $ctx->getRequest();
        $logger = $ctx->getConfig()->getLogger();
        if ($logger != null) {
            $logger->info(sprintf("[request] %s", json_encode($req->toArray())));
        }
        return $req;
    }

    public function handleResponse(Context $ctx): Response
    {
        $resp = $ctx->getResponse();
        $logger = $ctx->getConfig()->getLogger();
        if ($logger != null) {
            $body = $resp->toArray();
            $logger->info(sprintf("[response: %s] %s", $resp->getRequestId(), json_encode($body)));
        }
        return $resp;
    }

    public function handleException(Context $ctx)
    {
        $e = $ctx->getException();
        $logger = $ctx->getConfig()->getLogger();
        if ($logger != null) {
            $logger->error(sprintf("[response: %s] %s Error: %s", $e->getRequestId(), $e->getType(), $e->getMessage()));
        }
    }
}