moesif/moesif-symfony

Moesif Symphony 集成包

v1.0.0 2024-03-29 13:39 UTC

This package is auto-updated.

Last update: 2024-09-04 13:28:40 UTC


README

Moesif 提供,Moesif 是一个 API 分析API 赚钱 平台。

Moesif 的官方 PHP Symfony SDK 允许您自动捕获 API 流量并将其发送到 Moesif API 分析平台

如果您是 Moesif 的初学者,请参阅 我们的入门资源 以快速开始使用。

支持的 Symfony 版本

该 SDK 目前支持所有 Symfony 5.x 版本。

先决条件

在开始使用此 SDK 之前,请确保您有以下内容

获取您的 Moesif 应用程序 ID

登录到 Moesif 门户 后,您可以在入门步骤中获取您的 Moesif 应用程序 ID。登录后,您可以随时按照以下步骤从 Moesif 门户获取应用程序 ID

  1. 选择账户图标以显示设置菜单。
  2. 选择 安装API 密钥
  3. 收集器应用程序 ID 字段复制您的 Moesif 应用程序 ID。

Accessing the settings menu in Moesif Portal

安装 SDK

Moesif Symfony SDK 通过 Composer 提供,它是 PHP 的依赖管理器。在安装 Composer 后,执行以下命令

$ composer require moesif/moesif-symfony

否则,请手动将 moesif/moesif-symfony 添加到您的 composer.json 文件 中。

启用 SDK

按照以下步骤启用 SDK

  1. 在您的项目 config/packages 目录中,添加一个 moesif.yaml 文件。此文件包含您的配置选项。

  2. 配置文件要求您至少 指定您的 Moesif 应用程序 ID。以下是一个示例

    moesif:
      moesif_application_id: 'YOUR_MOESIF_APPLICATION_ID.'
      debug: false
      options:
        max_queue_size: 50
        max_batch_size: 25
      hooks_class: 'App\Configuration\MyMoesifHooks'

有关更多配置选项,请参阅 YAML 配置选项

配置 SDK

查看可用的 配置选项,了解如何根据您的用例配置 SDK。

故障排除

有关帮助您解决常见问题的通用故障排除指南,请参阅 服务器故障排除指南

其他故障排除支持

配置选项

以下部分描述了您可以在 moesif.yaml 中定义的可用的配置选项。

applicationId(必需)

一个字符串,用于标识您的应用程序。

debug

设置为 true 以将调试消息打印到调试和错误日志中。这可以帮助您解决集成问题。

options

如果设置,则包含各种选项,用于配置 SDK 以超出默认设置。

在此对象中,您可以设置以下选项

max_queue_size

如果设置,则覆盖在发送数据到 Moesif 之前默认的 max_queue_size

max_batch_size

如果设置,则覆盖发送到 Moesif 的默认 max_batch_size

hooks_class

如果设置了,则必须是指定 MoesifHooksInterface 的实现

用户钩子类选项

您可以使用钩子覆盖并自定义插件中的某些功能。例如,创建一个名为 MyMoesifHooks.php 的文件并实现 MoesifHooksInterface

use Moesif\MoesifBundle\Interfaces\MoesifHooksInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class MyMoesifHooks implements MoesifHooksInterface {
   // your implementation of every method follows.
}

请参考 示例实现

请确保将配置选项 hooks_class 设置为您的实现文件路径。

您需要实现的 MoesifHooksInterface 的方法如下

identifyUserId

可选。

此函数接受 $request$response 参数并返回一个用户 ID 字符串。这使 Moesif 能够将 API 请求归因于单个唯一用户,以便您了解谁调用您的 API。您可以使用此功能与 identifyCompanyId 同时使用,以跟踪个人客户以及他们所属的公司。

identifyCompanyId

可选。

此函数接受 $request$response 参数并返回一个公司 ID 字符串。如果您有 B2B 业务,此方法使 Moesif 能够将 API 请求归因于特定的公司或组织,以便您了解哪些账户调用您的 API。您可以使用此功能与 identifyUserId 同时使用,以跟踪个人客户以及他们所属的公司。

identifySessionToken

可选。

一个接受 $request$response 参数并返回会话或身份验证令牌字符串的函数。Moesif 通过处理您的 API 数据自动创建会话,但您可以通过 identifySessionId 方法覆盖此功能,如果您对结果不满意。

maskRequestHeaders

可选。

一个接受请求头参数的函数。参数是一个关联数组。该方法返回一个关联数组,其中包含移除或屏蔽的敏感请求头。

maskRequestBody

可选。

一个接受请求体参数的函数。参数是 JSON 的关联数组表示。该方法返回一个关联数组,其中包含任何请求体信息。

maskResponseHeaders

可选。

maskRequestHeaders 相同,但用于 HTTP 响应。

maskResponseBody

可选。

maskResponseBody 相同,但用于 HTTP 响应。

getMetadata

可选。

一个接受 $request$response 参数并返回 $metadata 的函数。$metadata 是 JSON 的关联数组表示。

skip

可选。

一个接受 $request$response 参数的函数。如果返回 true,则表示要跳过事件。跳过事件意味着 Moesif 不会记录该事件。

示例实现

以下示例展示了具有 MoesifHooksInterface 实现的 MyMoesifHooks.php 文件可能的样子。

<?php

namespace App\Configuration;

use Moesif\MoesifBundle\Interfaces\MoesifHooksInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;


class MyMoesifHooks implements MoesifHooksInterface {

  public function __construct() {
  }

  public function identifyUserId(Request $request, Response $response): string|null
  {
    return 'nihao1';
  }

  public function identifyCompanyId(Request $request, Response $response): string|null
  {
    return $request->headers->get('X-Company-Id');
  }

  public function identifySessionToken(Request $request, Response $response): string|null
  {
    return null;
  }

  public function getMetadata(Request $request, Response $response): ?array
  {
      return null;
  }

  public function skip(Request $request, Response $response): bool
  {
      return false;
  }

  public function maskRequestHeaders(array $headers): array
  {
      return $headers;
  }

  public function maskResponseHeaders(array $headers): array
  {
      return $headers;
  }

  public function maskRequestBody($body)
  {
      // this can be a string or array object.
      // because prior to php 8, can not declare union type (such as string|array)
      return $body;
  }

  public function maskResponseBody($body)
  {
      // this can be a string or array object.
      // because prior to php 8, can not declare union type (such as string|array)
      return $body;
  }
}

示例

以下示例演示了如何添加和更新客户信息。

更新单个用户

以下示例展示了如何使用 updateUser 函数在 Moesif 中创建或更新用户配置文件。

metadata 字段可以包含任何您希望存储的客户人口统计信息或其他信息。

只需提供 user_id 字段即可。

有关更多信息,请参阅 有关更新单个用户的 PHP API 参考文档

<?php
use Moesif\MoesifBundle\Service\MoesifApiService;

private $moesifApiService;

public function __construct(MoesifApiService $moesifApiService)
{
    $this->moesifApiService = $moesifApiService;
}

// metadata can be any custom object
$data->metadata = array(
    "email" => "john@acmeinc.com",
    "first_name" => "John",
    "last_name" => "Doe",
    "title" => "Software Engineer",
    "sales_info" => array(
        "stage" => "Customer",
        "lifetime_value" => 24000,
        "account_owner" => "mary@contoso.com"
    )
);

$userData = [
    'user_id' => $data['userId'],
    'user_email' => $data['userEmail'],
    'company_id' => $data['companyId'],
    'metadata' => $data['metadata'] ?? [], // Include metadata if provided
    // Add more fields as needed
];

$this->moesifApiService->updateUser($userData);

批量更新用户

您可以使用 updateUsersBatch 函数批量更新用户列表。

只需提供 user_id 字段即可。

有关更多信息,请参阅 有关批量更新用户的 PHP API 参考文档

<?php
use Moesif\MoesifBundle\Service\MoesifApiService;

private $moesifApiService;

public function __construct(MoesifApiService $moesifApiService)
{
    $this->moesifApiService = $moesifApiService;
}

// metadata can be any custom object
$data->metadata = array(
    "email" => "john@acmeinc.com",
    "first_name" => "John",
    "last_name" => "Doe",
    "title" => "Software Engineer",
    "sales_info" => array(
        "stage" => "Customer",
        "lifetime_value" => 24000,
        "account_owner" => "mary@contoso.com"
    )
);

$userDataA = [
    'user_id' => $data['userIdA'],
    'user_email' => $data['userEmailA'],
    'company_id' => $data['companyIdA'],
    'metadata' => $data['metadata'] ?? [], // Include metadata if provided
    // Add more fields as needed
];

$userDataB = [
    'user_id' => $data['userIdB'],
    'user_email' => $data['userEmailB'],
    'company_id' => $data['companyIdB'],
    'metadata' => $data['metadata'] ?? [], // Include metadata if provided
    // Add more fields as needed
];

$users = array($userDataA, $userDataB)
$this->moesifApiService->updateUsersBatch($user);

更新单个公司

在Moesif中创建或更新公司资料,请使用updateCompany函数。

metadata字段可以包含任何您想存储的公司人口统计或其他信息。

仅需要company_id字段。

更多信息,请参阅PHP API 参考关于更新单个公司

<?php
use Moesif\MoesifBundle\Service\MoesifApiService;

private $moesifApiService;

public function __construct(MoesifApiService $moesifApiService)
{
    $this->moesifApiService = $moesifApiService;
}

// metadata can be any custom object
$data->metadata = array(
    "org_name" => "Acme, Inc",
    "plan_name" => "Free",
    "deal_stage" => "Lead",
    "mrr" => 24000,
    "demographics" => array(
        "alexa_ranking" => 500000,
        "employee_count" => 47
    )
);

// Prepare company data for Moesif
$companyData = [
    'company_id' => $data['companyId'],
    'company_domain' => $data['companyDomain'],
    'metadata' => $data['metadata'] ?? [], // Include metadata if provided
    // Add more fields as needed
];

$this->moesifApiService->updateCompany($companyData);

批量更新公司

要批量更新公司列表,请使用updateCompaniesBatch函数。

仅需要company_id字段。

更多信息,请参阅PHP API 参考关于批量更新公司

<?php
use Moesif\MoesifBundle\Service\MoesifApiService;

private $moesifApiService;

public function __construct(MoesifApiService $moesifApiService)
{
    $this->moesifApiService = $moesifApiService;
}

// metadata can be any custom object
$data->metadata = array(
    "org_name" => "Acme, Inc",
    "plan_name" => "Free",
    "deal_stage" => "Lead",
    "mrr" => 24000,
    "demographics" => array(
        "alexa_ranking" => 500000,
        "employee_count" => 47
    )
);

// Prepare company data for Moesif
$companyDataA = [
    'company_id' => $data['companyIdA'],
    'company_domain' => $data['companyDomainA'],
    'metadata' => $data['metadata'] ?? [], // Include metadata if provided
    // Add more fields as needed
];

$companyDataB = [
    'company_id' => $data['companyIdB'],
    'company_domain' => $data['companyDomainB'],
    'metadata' => $data['metadata'] ?? [], // Include metadata if provided
    // Add more fields as needed
];

$companies = array($companyDataA, $companyDataB)

$this->moesifApiService->updateCompaniesBatch($companies);

如何获取帮助

如果您在使用此SDK时遇到任何问题,请尝试故障排除指南。如需进一步帮助,请联系我们的支持团队

探索其他集成选项

探索Moesif的其他集成选项