public static function make(
        array $serverParams = null,
        array $cookieParams = null,
        array $queryParams = null,
        array $uploadedFiles = null,
        array $attributes = null,
        $parsedBody = null,
        $body = null,
        array $headers = null,
        $uri = null,
        $method = null,
        $protocol = null
    ) {
        $cookies = $cookieParams ? $cookieParams : $_COOKIE;
        $server  = $serverParams ? $serverParams : $_SERVER;

        $files = UploadedFilesFactory::make($uploadedFiles);

        $attributes = array_merge((array) $attributes, $_ENV);

        $query      = $queryParams ? $queryParams : $_GET;
        $parsedBody = $parsedBody  ? $parsedBody  : $_POST;

        $body     = $body     ? $body     : InputFactory::make();
        $uri      = $uri      ? $uri      : UriFactory::make($server);
        $headers  = $headers  ? $headers  : HeadersFactory::make($server);
        $method   = $method   ? $method   : RequestMethodFactory::make($server);
        $protocol = $protocol ? $protocol : RequestProtocolFactory::getVersion($server);

        return new ServerRequest(
            $server,
            $cookies,
            $query,
            $files,
            $attributes,
            $parsedBody,
            $body,
            $headers,
            $uri,
            $method,
            $protocol
        );
    }