功能标志 - 它们是否应该暴露给客户端应用程序?

问题描述 投票:3回答:1

我正在考虑在具有javascript / html和移动本机客户端的基于Web的应用程序中使用Feature Flags,并且我正在尝试对以下内容做出明智的决定:

功能标志应该暴露给客户端应用程序吗?

在与其他人讨论时,出现了两种方法,即客户如何处理功能标志,这些方法是:

1) Clients know nothing about feature flags at all.

响应数据的服务器端端点将包括额外的数据,以说明功能是打开还是关闭。

例如对于虚构的端点,/posts,数据可以像这样返回

启用增强的ui功能:

{
  enhanced_ui: true,
  [1,2,3,4,5]
}

增强的ui功能已禁用:

{
  enhanced_ui: false,
  [1,2,3,4,5]
}

2) Clients can access an endpoint, and ask for feature flag states.

例如/flagstates

{
  'enhanced_ui:true
}

客户端然后使用它来隐藏或显示所需的功能。

Some thoughts:

方法#1具有较少的移动部件 - 根本不需要客户端库来实现门。

问题出现了 - 当动态标志更新时,客户如何知道?我们可以实现pub / sub来接收通知并重新加载客户端,然后他们会自动获取新的最新数据。

方法#2感觉可能更容易管理监听标志更新,因为它是返回功能的单个端点,并且状态更改可以轻松推出。

flags feature-selection
1个回答
3
投票

这是我感兴趣的东西,我需要在我正在处理的产品中实现功能标志/开关。过去一周我一直在研究这个领域,我将分享我的发现和想法(我并不认为它们是最佳实践)。这些发现和想法将主要基于ASP.Net ZeroASP.Net Boilerplate,因为我发现这些是我正在寻找的示例实现的最接近的匹配。

功能标志应该暴露给客户端应用程序吗?

是的,不是。如果您正在构建一个软件即服务产品(可能具有多租户),那么您很可能必须拥有管理员用户可以管理(CRUD /启用/禁用)功能的某种管理ui。这意味着如果您正在构建SPA,您显然必须在api中实现端点(当然是适当的安全),前端可以使用它来检索有关功能及其当前状态的详细信息以进行编辑。这可能如下所示:

"features": [
    {
      "parentName": "string",
      "name": "string",
      "displayName": "string",
      "description": "string",
      "defaultValue": "string",
      "inputType": {
        "name": "string",
        "attributes": {
          "additionalProp1": {},
          "additionalProp2": {},
          "additionalProp3": {}
        }, 
      ....

当然,功能模型可以根据您的问题域而有所不同,但上面的内容应该让您了解用于保存功能定义的通用模型。

现在,正如您所看到的,除了布尔标志之外,还有更多功能,无论是否启用 - 它可能具有围绕它的属性。这对我来说根本不是很明显,因为我只是在相当简单的特征(真/假)的背景下考虑我的问题,实际上,可能存在更复杂的特征。

最后,当您的用户将浏览您的应用时,如果您为已启用EnhancedUI功能的租户呈现UI,则需要知道该功能是否已启用。在ASP.Net Zero中,这是通过使用名为IPermissionService的东西完成的, /api/services/app/Permission/GetAllPermissions在前端和后端都实现。在后端,许可服务基本上将检查是否允许用户访问某些资源,这在特征切换上下文中意味着检查是否为给定租户启用了该功能。在前端(Angular)中,权限服务检索这些权限({ "items": [ { "level": 0, "parentName": "string", "name": "string", "displayName": "string", "description": "string", "isGrantedByDefault": true } ] } ):

RouteGuard

然后可以使用它来创建某种qazxswpoi,如果某些内容未启用或不允许,您可以适当地重定向到例如升级版本页面。

希望这能给你一些思考的想法。

© www.soinside.com 2019 - 2024. All rights reserved.