有没有办法在不同的开发生命周期环境中使用 SendGrid 模板版本控制?

Is there a way to use SendGrid Template Versioning with different development life-cycle environments?

SendGrid 中的版本控制允许 API 客户端仅通过 here 记录的模板 ID 发出模板请求,但是,一次只能 "Active" 模板的一个版本。显然,用于我们的生产应用程序的模板需要始终设置为活动的,但是如何添加我们在即将发布的版本中使用的新模板版本呢?我如何利用模板版本在我们的测试环境中测试此 "Inactive" 版本? 该问题已被讨论 here,但当您开始关注链接时,它似乎只是关闭并丢失了。

如果无法指定版本控制,则只剩下几个选项需要创建特定于环境的模板并在发布完成后将它们提升为特定于生产的模板,或者为不同的 SDLC 创建单独的帐户环境并随着流程的推进迁移它们。

这里也讨论了关于语言版本控制的问题,但它确实对我的问题没有帮助。

考虑到 SendGrid API 提供的工具来利用版本控制,最佳实践是什么?拥有不同的 SDLC 步骤命名模板似乎是维护数百个模板(更不用说每个环境的多个)的灾难了。在转移到生产环境时进行测试时,管理多个帐户就像一场噩梦。我只是错过了一些非常明显的东西吗?

我与 SendGrid 的技术代表进行了交谈,他们的 API 或 UI 不提供此功能。一次只能有一个模板 "activated"。每个环境都需要一个单独的模板,或者模板需要由 API 消费者管理。如果有人读到这篇文章并对不同的解决方案有疑问,请随时 post 我会解释我是如何解决这个问题以满足我的应用程序需求的。

我想通过实施小型电子邮件活动来扩展

正如 CodeKiller 所写,一种可能的解决方法是 You need a separate template for every environment

问题是应用程序通过 ID 引用模板,但是在将模板从 env 移动到 env 时无法保留模板 ID。

您可以保留模板名称。 SendGrid API 不允许按名称检索模板,但您可以检索所有模板并按名称查找一个模板。

var templatesRaw = await client.RequestAsync(
            BaseClient.Method.GET,
            null,
            "{'page_size': 200, 'generations': 'dynamic'}",
            "templates");
var templatesJson = await templatesRaw.DeserializeResponseBodyAsync(templatesRaw.Body);
var templates = (JArray)templatesJson["result"];

var template = templates.Single(templ => templ["name"].ToString() == name);
return template["id"].ToString();

为什么我不建议将它用于 medium/big 广告系列:

  1. 无服务器的成本。当您需要发送一封电子邮件时,您将为处理所有模板所需的资源付费
  2. 性能。每次您需要发送一封电子邮件,用户正在等待处理所有模板
  3. 当模板为 created/updated
  4. 时,手动将模板从 env 复制粘贴到 env
  5. KISS 违规。当您拥有 <200 个模板时,它看起来很简单,否则您必须处理从分页 API 查询所有模板、可能的 OutOfMemory 异常、批处理电子邮件请求以防止高 cost/performance 率最终会使应用程序复杂化。