5

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

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

此处还讨论了有关语言版本控制的问题,但这确实对我的问题没有帮助。

鉴于 SendGrid 的 API 提供的工具来利用版本控制,最佳实践是什么?拥有不同的名为模板的 SDLC 步骤似乎是使用数百个模板维护的灾难(更不用说每个环境的多个模板了)。在进入生产阶段进行测试时,管理多个帐户似乎是一场噩梦。我只是在这里遗漏了一些完全明显的东西吗?

4

2 回答 2

5

我与 SendGrid 的技术代表交谈过,他们的 API 或 UI 不提供此功能。一次只能“激活”一个模板。您需要为每个环境使用单独的模板,或者需要从 API 使用者管理模板。如果有人阅读本文并对不同的解决方案有疑问,请随时发布,我将解释我是如何解决这个问题以满足我的应用程序需求的。

于 2019-08-16T06:11:53.627 回答
0

我想通过我们对小型电子邮件活动的实施来扩展实际答案

正如 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();

为什么我不建议将它用于中/大型广告系列:

  1. 如果你去无服务器,成本。当您需要发送一封电子邮件时,您需要为处理所有模板所需的资源付费
  2. 表现。每次您需要发送一封电子邮件时,用户都在等待处理所有模板
  3. 创建/更新模板时,手动将模板从 env 复制粘贴到 env
  4. KISS 违规。当您拥有 <200 个模板时看起来很简单,否则您必须处理从分页 API 查询所有模板、可能的 OutOfMemory 异常、批处理电子邮件请求以防止最终使应用程序复杂化的高成本/性能率。
于 2021-11-02T19:23:16.653 回答