添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
搜索

创建开发者门户

download PDF
Red Hat 3scale API Management 2.7

良好的开发者门户是确保 API 使用的关键。快速创建您的内容。

Red Hat Customer Content Services

摘要

本指南记录了 Red Hat 3scale API Management 2.7 上的开发人员门户。

第 1 章 开发人员门户

在本节结束时,您应熟悉开发人员门户,包括其结构、使用和功能。 您可以自定义整个开发人员门户的外观和感觉,使其符合您自己的品牌。您已完全控制门户的每个元素,因此您可以尽可能轻松控制,以便开发人员了解如何使用您的 API。成功的 API 开发人员门户将有助于开发人员随时将概念过渡到工作应用程序。

1.1. 开发人员门户概述

开发者门户由几个元素组成: 可访问 Content, Drafts, Redirects, Groups, Feature Visibility, ActiveDocs, 法律条款, Settings 和 Liquid 文档的左菜单。 包含上述部分详情的主要区域。

开发人员门户页面概述

1.2. 内容

这是开发人员门户系统查看最重要的部分。content 部分显示站点结构和层次结构,并在同一个页面中提供编辑功能。这意味着您可以管理站点结构、页面和其他存储在它的资产。门户的层次结构以目录树的形式显示。 上面的镜像显示了 content 部分中其中一个页面的示例视图。如上所示,它会显示所有文件(页面、镜像、样式表、JavaScript 等)保留站点的路径层次结构。如以前一样,部分的功能与目录完全相同。 在右侧,您可以看到编辑页面视图。您可以在此处看到页面名称(它还代表了它是标准还是内置页面)以及将新元素添加到内容的按钮(页面、布局、部分、文件或 portlet)。下面,您可以选择页面将使用的布局,并切换 liquid 标签功能。以下部分是文本编辑器,它支持代码突出显示、tabulations、line numeration 等。选项卡按钮在编辑文档的草案和发布版本之间 Draft 和 Published 开关。以下两个图标列出了文档的版本,并分别打开一个弹出窗口。 要编辑页面内容,只需选择所需的布局,设置几个附加选项,如内容类型和 URL 路径,然后在 HTML、Markdown 或 Textile 中输入代码。 此视图中的另一个重要功能是 Preview 按钮。您可以选择是否预览页面发布的或草案版本。点按钮将您重定向到 Developer Portal 模式,您可以在其中看到页面的实时(或草案)呈现版本,其中右侧有一个灰色的垂直栏。此栏包含开发人员门户的页面、布局和部分编辑视图的链接。它允许您在草案和公布的视图之间切换。 还有一个过滤器功能,它不仅充当搜索字段,但允许您将显示的元素限制为仅样式表、JavaScript 或指定的任何其他类型。

在开发者门户中找到内容

1.3. 布局和部分

布局和部分部分管理模板和页面的可重复使用的部分。它们的功能与 content 部分的功能类似。 layout 部分由页面使用的模板定义组成。Layout 是页面的主要结构,此模板的内容将呈现在每个使用它的页面中。部分、portlet 和页面的实际内容驻留在模板中。 部分是代码的可重复使用的部分,可应用于不同页面上的多个位置。例如,在每个布局上,页脚都相同,在具有不同布局的几个页面中,侧边栏是相同的。 要在布局、部分、电子邮件模板或 portlet 中包含部分,请使用以下命令:

{% include "partial_name" %}

与门户的其他部分一样,布局和部分也具有草案和发布状态,并提供完整的版本历史记录,具有以下功能: 布局模板的文本编辑器。 保存草案、发布当前版本并恢复到上次发布的状态。 在草案和发布的版本间切换文本编辑器,列出版本历史记录,并启动弹出窗口。 有关 liquid 标签的完整指南,请查看 Liquid 参考指南

1.4. portlets

注意

开发人员门户最初不会填充任何 portlet。您必须使用管理门户自行创建它们。 内容的最后小节是 portlets。它们为您提供了一些高级功能,而无需任何高级编码。我们的开发人员门户提供三个不同的 portlet: 外部 RSS 源:从给定源获取 RSS 源。 内容表:在给定部分中生成页面的链接列表。 最新论坛文章:生成最新论坛文章的列表。 在创建所需的 portlet 时,您必须在设置页面中输入请求的数据,如标题、系统名称和外部 RSS 源 portlet 的 URL 源。

1.4.1. 备注

编辑器使用自定义 liquid 标签预先填充标准 portlet 代码。如果您决定编辑生成的结构,请谨慎操作。当有疑问时,请参阅 liquid 参考 章节。

1.5. 重定向和更改

开发人员门户的最后元素是 redirect 和 changes 部分。它们比 content 部分要少,但仍然很重要,并提供一些自定义功能。 重定向可帮助您从一个门户 URL 重定向到另一个门户 URL 的帮助。例如,当弃用旧页面且不想更改所有链接时,这非常有用。重定向不能用于内置开发人员门户页面 - 它们仅用于您创建的页面 。 最后,但不是更改部分。它包含所有新编辑和未发布的页面的列表,并为您提供一次单独发布或全部发布页面的选择。

第 2 章 自定义注册表单字段

了解如何添加自定义注册字段以及此功能的不同选项。 默认情况下,3scale 在 user/account/application 处提供常用的字段。您可能需要在这些常见默认值中添加自己的自定义字段。 在管理门户中,进入 Audience > Accounts > Accounts > Field Definitions ,从中可查看默认表单字段并定义新的表单。 新帐户/用户注册页面实际上是前两个部分的修改。帐户字段显示在顶部,后跟用户字段,后跟不需要配置的密码字段。 尝试添加 3 个额外项,2 个添加到注册项,1 个添加到账户项。单击 create,添加以下新字段定义,然后创建它。当然,所需的复选框将使它在报名表上强制使用。另外,还有选项可使内容隐藏且只读。可以添加一个隐藏字段,例如:当您希望新符号设置有字段时,您不希望突出显示它们,如 access_restricted_are,它默认为空。作为管理员,您可以逐个用户将其更新为 true。您的页面逻辑可将其读取,以确定显示的内容。例如,只读字段可能是浏览器位置,您可以使用 JavaScript on page load 进行设置。 现在,尝试在用户注册表单中添加下拉菜单。将它命名为"员工类型"。将这些以逗号分隔的值添加到 choices 字段中:整时、部分时间和合同。下拉菜单将填充这些值。 现在,在帐户中添加预定义的字段。通常,您添加的字段没有系统功能 - 它们只是保存以后可以访问的数据。(请参阅 受限内容 。) 以正常方式创建字段。然后,在"name"的下拉菜单中,选择 po_number。使用此字段时,发送给此开发人员帐户的 3scale 生成的发票上将显示 PO 编号。系统范围的字段可以随时被您的管理员覆盖。为字段指定名称 - 类似于"PO number" - 并对其进行创建。 现在来看一下您的工作。您可以看到免费文本姓氏,并将雇佣类型下拉列表添加到 User 部分。PO 编号系统字段也添加了可用文本。 最后,这些自定义字段可使用 3scale ActiveDocs 进行设置;例如, 应用程序创建

第 3 章 配置注册流程

在本节中,您将了解将哪些设置配置为调整注册工作流。 注册工作流是您通过开发人员门户提供的开发人员体验的关键方面。此过程可以从完全自动和自助服务到其他极端服务,要求完全控制谁可以访问各种粒度级别。 3scale 平台允许您结合使用帐户(可选)、服务(可选)和应用程序计划对 API 进行建模。对于每个计划,您可以控制是否有您操作的批准。另外,您还要确定是否有默认值,或者开发人员是否需要执行下一步并做出选择。 对于最大自动化和自助服务,请删除所有批准步骤并启用所有可能的默认计划。这样,可以签发密钥以便在注册后立即提供对 API 的访问权限。

3.1. 删除所有批准步骤

要删除批准,请转到 Audience > Accounts > Usage Rules Signup 部分,确保选中 Developers 选项。 另外,如果您启用了帐户和服务计划,请向下滚动页面并确保两个情况下都 直接启用更改计划

开发人员注册流程删除批准

3.2. 启用所有可能的默认计划

另外,如果您启用了帐户和服务计划,请选择那些帐户的默认计划 帐户计划(可选) 服务计划(可选)

开发人员注册流程服务计划

3.3. 测试工作流

完成所需的设置更改后,进入开发人员门户并尝试注册新的开发人员,以测试结果。试验并做出必要的调整,以准确获取 API 的正确工作流。当您对工作流感到满意时,最好检查您的电子邮件通知,以确保他们为开发人员提供正确的信息。

开发人员注册流程电子邮件模板

第 4 章 多服务注册

在本节结束时,您将了解到创建和自定义多服务注册页面的步骤。 如果您使用多个服务功能,您可以自定义注册过程来让客户订阅不同的服务。

4.1. 先决条件

您应该熟悉布局和页面创建步骤,以及 Liquid 格式标签的基础知识。有关 quid 标签的详情,请参阅 Liquid 参考 。"多个服务"功能必须在您的帐户上启用(可用于 Pro Plan 和 up)。 强烈建议您阅读有关 注册工作流 的信息,因此您将准备好整个设置,并了解它的工作原理。

4.2. 简介

通过创建新布局来启动该过程,该布局将作为您的多服务注册页面的模板。进入 CMS 系统的布局部分,并创建新的布局。您可以将其称为 multipleservicesignup(多服务注册) ,以方便将其与其他布局区分。在编辑器中,粘贴标准布局(如家或主布局)的一般结构。现在,删除您不需要的一切 - 所有容器、侧边栏、附加框等。 创建了一个布局的后退性,请继续自定义代码以进行注册。

4.3. 多服务注册

4.3.1. 检索有关服务的信息

要检索有关需要构建正确注册链接的服务的所有信息,您必须通过服务对象进行循环。服务是模型对象的一部分。

{% for service in provider.services %}
{% endfor %}

4.3.2. 配置注册列

您已有布局和循环访问服务对象。现在,决定您要如何显示服务以及注册链接的信息。例如,通过服务描述和底部的注册链接将它们划分为列。每列将作为一门服务列框,其中包含所有必要的信息。

{% for service in provider.services %}
  <div class="service-column">
    <p>{{ service.name }}</p>
    <p>{{ service.description }}</p>
{% endfor %}

内部容器充当自定义 description 字段。service.name 是服务名称,在本例中是容器的名称。

4.3.3. 配置订阅

现在,自定义服务注册的主要部分 - 创建注册链接,提取注册 URL 和服务 ID。从 URL 的对象和服务 ID 中获取您迭代循环的服务对象的注册 URL。最终的链接代码类似如下:

<a href="{{ urls.signup }}?{{ service | toparam }}">Signup to {{ service.name }}</a>

您还必须考虑该用户可能已对某些服务进行了签名。创建要检查的条件块。

{% unless service.subscribed? %}
  <a href="{{ urls.signup }}?{{ service | toparam }}">Signup to {{ service.name }}</a>
{% endunless %}

因此,您可以生成最终代码:

{% for service in provider.services %}
  <div class="service-column">
      <p>{{ service.name }}</p>
      <p>{{ service.description }}</p>
      {% unless service.subscribed? %}
        <a href="{{ urls.signup }}?{{ service | to_param }}">Signup to {{ service.name }}</a>
      {% endunless %}
{% endfor %}

4.3.4. styling

根据您拥有的服务数量,向生成的标记添加一些最终的接触。在这个示例中,它有两个,因此 service-column div 的 CSS 代码将是:

.service-column {
    float: left;
    margin-left: 10%;
    width: 45%;
.service-column:first-child {
  margin-left: 0;
					在示例中,我们使用了基于百分比的布局动态地分配包含维度的尺寸上列的宽度。
					现在,您应该有一个正常工作且良好地忽略多个服务子版本。祝贺您!
					如果您希望以特定顺序显示列,请尝试使用条件表达式(if/else/case)条件服务名称或其他值。
				

第 5 章 开发者门户身份验证

按照以下步骤配置开发人员门户的访问权限。 本文介绍了如何在开发人员门户上启用和禁用不同类型的身份验证,以使开发人员能够注册或登录。 目前,3scale 支持多种向开发人员门户进行身份验证的方法,具体将在以下部分介绍: 用户名/电子邮件和密码 通过 GitHub 进行身份验证 通过 Auth0 进行身份验证 通过 Red Hat Single Sign-On 进行身份验证 默认情况下,开发人员门户上只能启用一种类型的验证,如果您已在 3scale.net 中进行了签名: 用户名/电子邮件和密码 通过 GitHub 进行身份验证(使用 3scale GitHub 应用程序)- 只有在 3scale.net 上注册时才会默认启用 较早的 3scale 帐户(在 2015 年 12 月 14 日之前创建)可能需要遵循额外步骤才能启用 GitHub 和 Auth0 身份验证。 如果这适用于您,则需要将以下代码片段添加到登录并注册模板以便以两种形式启用此功能。

    {% include 'login/sso' %}

5.1. 启用和禁用用户名/电子邮件和密码

默认情况下,开发人员门户上启用了用户名/电子邮件和密码身份验证。通常,此处未进行更改,因为这是开发人员创建帐户和登录的标准方法。 但是,在某些情况下,您可能需要删除这个验证类型。要做到这一点,编辑 Login > New 模板,如下屏幕截图中: 如果您需要向开发人员门户添加用户名/电子邮件和密码身份验证,只需删除上一步中添加的 liquid 注释标签即可。

5.2. 通过 GitHub 启用和禁用身份验证

要启用自己的 GitHub 应用,首先您需要创建一个并检索对应的凭据。 您可以通过 GitHub 配置身份验证的方法有两种: 使用 3scale GitHub 应用程序(默认为托管 3scale 帐户) 使用您自己的 GitHub 应用程序(用于内部安装) 要更改此默认配置,您可以进入 3scale 管理门户,在 Audience > Developer Portal > SSO Integrations 中,您会看到以下屏幕: 点击 GitHub 访问配置屏幕: 在此屏幕中,您可以: 在您的开发人员门户上提供或不可用 GitHub 身份验证,只需选中或取消选中"推送"框。 选择 3scale 品牌 GitHub 应用或添加您自己的 GitHub 应用 - 3scale GitHub 应用程序默认为启用(发布)。您可以通过单击 Edit 并输入 GitHub 中创建 OAuth 应用程序的详细信息("Client"和"Client secret"),来配置自己的 GitHub 应用。请注意,为了使集成可以与您自己的 GitHub 应用程序正常工作,您应该使用 "Callback URL" 配置 GitHub 应用程序的授权回调 URL,以便在切换到"自定义品牌"选项后(例如 https://yourdomain.3scale.net/auth/github/callback )。 测试配置的身份验证流是否按预期工作。

5.3. 通过 Auth0 启用和禁用身份验证

5.3.1. 备注

此功能仅对企业计划提供。 为了让开发人员使用 Auth0 进行身份验证,您首先需要具有有效的 Auth0 订阅。 默认情况下,不通过 Auth0 进行身份验证。如果要将 Auth0 帐户与 3scale 结合使用来管理开发人员门户的访问权限,您可以按照以下步骤进行配置: 进入您的 3scale 管理门户,在 Audience > Developer Portal > SSO Integrations 中点 Auth0 。 在此配置屏幕中,您需要添加您的 Auth0 帐户的详细信息。输入客户端 ID、客户端 secret 和网站后,选中"Published"框,然后单击 Create Auth0 以在您的开发人员门户上可用。

5.4. 通过 Red Hat Single Sign-On 启用和禁用身份验证

注意

此功能仅对企业计划提供。 Red Hat Single Sign-On(RH-SSO)是一个集成的 Sign-On 解决方案(SSO),它可与 3scale 一起使用时,允许您使用任何可用的 RH-SSO 身份提供程序和用户联合选项来验证您的开发人员。 有关 Red Hat Single Sign-On 版本与 3scale 兼容的信息,请参阅支持的 配置 页面。

5.4.1. 开始前

在将 Red Hat Single Sign-On 与 3scale 集成前,您必须有一个正常工作的红帽单点登录实例。有关安装说明,请参阅 Red Hat Single Sign-On 文档: 安装 RH-SSO 7.2

5.4.2. 配置 RH SSO

执行以下步骤来配置 Red Hat Single Sign-On: 按照 Red Hat Single Sign-On 文档 所述创建域。 将客户端添加到 客户端 并单击 创建 。 使用以下字段和值填写表单: 客户端 ID :为您的客户端输入所需的名称。 启用 :切换到 ON 许可需要 :切换到 OFF 客户端协议 :选择 openid-connect 访问类型 :选择 机密 标准化流启用 :切换到 ON 根 URL :输入您的 3scale 管理门户 URL。这应该是您用来登录开发人员门户的 URL 地址,例如 :https://yourdomain.3scale.net 或您的自定义 URL。 有效的重定向 URL :通过 /* 再次键入开发人员门户,如下所示: https://yourdomain.3scale.net/* 。 所有其他参数都应留空,或切换到 OFF 。 通过以下步骤获取客户端 secret: 前往您刚才创建的客户端。 点 Credentials 标签页。 在 Client Authenticator 字段中选择 Client Id 和 Secret 。 配置 email_verified mapper。3scale 要求将用户数据的 email_verified claim 设置为 true 。要将 "电子邮件验证"用户属性 映射到 email_verified 声明: 转至 客户端的映射程序 选项卡。 单击 Add Builtin 。 选择 电子邮件验证 选项,然后单击 Add selected 以保存更改。 如果您管理 Red Hat Single Sign-On local 数据库中的用户,请确保将该用户的 Email Verified 属性设置为 ON 。 如果使用 User Federation ,则在为 3scale SSO 集成创建的客户端中,您可以通过将令牌名称设置为 email_verified ,并将声明值设置为 true 来配置硬编码声明。 (可选)配置 org_name mapper。
当用户在 3scale 中注册时,会要求用户使用 Organization Name 值填写注册表单。为了通过 Red Hat Single Sign-On 透明登录,不需要在开发者门户上填写注册表格,您需要配置一个额外的 org_name 映射器: 转至 客户端的映射程序 选项卡。 点 Create 。 按如下所示填写mapper 参数: 名称 :键入任何所需名称,例如 org_name 许可需要 :切换到 OFF 映射器类型 :选择 User Attribute 用户属性: 键入 org_name 令牌声明名称 :键入 org_name claim JSON Type : 选择 String 添加到 ID 令牌 :切换到 ON 添加到访问令牌 :切换到 ON 添加到 userinfo :切换到 ON Multivalued : 切换到 OFF 。 点 Save 。 如果 Red Hat Single Sign-On 中的用户具有 org_name 属性,3scale 将自动创建一个帐户。如果没有,则会要求用户在创建帐户之前指示机构名称。另外,也可以创建类型 硬编码声明的 映射程序,将机构名称设置为使用 Red Hat Single Sign-On 帐户登录的所有用户的硬编码值。 要测试集成,您需要添加用户。要实现此目的,请导航到 Users ,单击 Add user ,再填写所需字段。请注意,当您在 Red Hat Single Sign-On 中创建用户时,将 Email Verified 属性( email_verified )设置为 ON ,否则用户将不会在 3scale 中激活。

使用 Red Hat Single Sign-On 作为身份代理

您可以使用 Red Hat Single Sign-On 作为身份代理,或者将其配置为联合外部数据库。有关如何配置这些的更多信息,请参阅 Red Hat Single Sign-On 文档来了解 身份代理 用户联合 。 如果您决定使用红帽单点登录作为身份代理,并且希望开发人员能够跳过 RH-SSO 和 3scale 帐户创建步骤,我们建议以下配置:在提供的示例中,我们使用 GitHub 作为我们的身份提供程序。 在 Red Hat Single Sign-On 中,在 身份提供程序 中配置 GitHub 后,转至名为 Mappers 的选项卡,再单击 Create 。 为它指定一个名称,以便可以识别它。 在 映射类型 中,选择 Attribute Importer 。 在 Social Profile JSON Field Path 中添加公司,它是 GitHub 上属性的名称。 在 User Attribute Name 中,添加 org_name,这是我们在 Red Hat Single Sign-On 中调用属性的方式。 Red Hat Single Sign-On 需要第一个和姓氏以及电子邮件以及必填项。3scale 需要电子邮件地址、用户名和机构名称。因此,除了为机构名称配置映射程序外,还能够跳过这两个用户,请确保: 在 IdP 帐户中,它们会设置其名字和姓氏。 在 IdP 账户中,可以访问其电子邮件地址。例如在 GitHub 中,如果您的电子邮件地址设置为私有,则不会共享它。

5.4.3. 配置 3scale

默认情况下,不通过 Red Hat Single Sign-On 进行身份验证。如果要将 Red Hat Single Sign-On 帐户与 3scale 结合使用来管理开发人员门户的访问权限,您可以按照以下步骤进行配置。 进入 3scale 管理门户,在 Audience > Developer Portal > SSO Integrations 中点 Red Hat Single Sign-On 。(注意:这只是企业功能,因此您可能需要要求您的帐户经理为您启用此功能。 在这个配置屏幕中,您需要添加您在上一步中配置的 Red Hat Single Sign-On 客户端的详情: 客户端 :红帽单点登录中的客户端名称 Client Secret : Red Hat Single Sign-On 中的客户端 secret realm : Red Hat Single Sign-On 的名称和 URL 地址 输入后,选中"Published"框,再点 Create RH-SSO 使其在开发人员门户上可用。

RH-SSO

第 6 章 Red Hat Single Sign On for Developer Portal

Red Hat Single Sign On(RH SSO)允许您管理多个独立系统的访问控制。在本指南后,您将能够允许登录系统的用户自动登录到您的 3scale 开发者门户,而无需再次提示您登录。 本文介绍了如何使用您网站的现有用户凭据来自动登录到您的 3scale 支持的开发人员门户。 此功能适用于已拥有其 API 用户(用户名和密码)身份的 API 供应商 - 例如,API 供应商也是身份提供程序。

6.1. 在 3scale 平台中创建用户

首先,API 使用者必须在开发人员门户中有一个帐户。您可以使用帐户管理 API 将用户导入到 3scale,或者手动创建它们。在您的管理门户中找到 3scale ActiveDocs 的账户管理 API,位于您的管理门户,位于 右上角的文档(question mark icon(?)→ 3scale API Docs 部分。

6.3. 使用自动登录重定向用户

响应包含一个带有令牌的 RH SSO 登录 URL:

https://YOUR_DEVELOPER_PORTAL/session/create?expires_at=1365087501&token=Q0dNWGtjL2h2MnloR11yWmNwazVZY0NhenlabnBoRUNaNUlyWjZaVG8wMnBGdVNhT0VGN1NUb3FRc1pwSnRrclBZSTIwOUFwRkVTc3NuK1JTbjUrMEE9PS0tY1ZrOGFldzFJNkxna1hrQzQyZ0NGQT09--712f2990ac9248ab4b8962be6467fb149b346000

URL 包含 3scale Developer Portal SSO 登录所需的所有信息。您可以直接嵌入 web 中。但是,URL 可以在用户单击之前过期,因此建议您在页面上有一个通用链接,此链接会动态请求新的 SSO URL 并重定向到它。这样,用户就可以无缝登录到开发人员门户。 URL 地址需要取消转义。如果要在浏览器中手动尝试它,请记得在浏览器中将 &amp 替换为 & 。此外,令牌中的任何 % 编码都需要替换为其未转义的字符。

第 7 章 限制内容

在这里,您可以了解如何在 Developer Portal 中包含仅对某些用户可见的内容。 您可能需要有一些开发者门户的页面,它们只能被一组开发人员(属于某个页的一部分)或某个菜单中的项目访问。这两个目标均可通过以下两个技术来实现。

7.1. 受限页面

在创建受限部分时,执行它以便每个部分映射到用户的逻辑组非常有用。在本例中,假设有一组名为"合作伙伴"的开发人员。 在 Developer Portal 中创建一个新部分,用于您要限制访问的每个页面或一组页面。取消选中"public"状态字段。然后拖放您想要的页面。 创建一个组,并授予它对您创建的部分的访问权限。 现在,每次您必须授予一个用户对这个部分的访问权限时,您要做的只是将它们分配给这个组。为此,请进入相应的帐户详细信息页面,然后进入"组权限"。 一旦进入,请选中您要允许的部分的框。

组权限

7.2. 内容的受限块

需要的标记是自定义开发人员门户的一种非常强大方式。请在此处根据条件来隐藏或显示页面的部分。3scale 允许您为帐户、应用程序和用户创建自定义字段。您可以使用它来存储有助于作为 API 提供程序的信息。在这里,您要创建一个附加到所有帐户的自定义字段,并使用它来指明指定帐户是否为合作伙伴。您可以通过转至 Audience > Account > Field Definitions 来创建此字段。向 Account 部分添加一个字段,并将它标记为隐藏,这样它就不会显示在注册页面上,或门户上的任何其他位置。 现在您可以使用自定义字段向合作伙伴展示特殊内容,方法是将其嵌套成以下代码片段中的条件:

{{ if current_account.extra_fields.partner == 'true' }}
  // content only accessible to partners
{{ endif }}

或者,如果您的情况更好,使用 inverse 逻辑:

{{ unless current_account.extra_fields.partner == 'true' }}
  // content forbidden for partners
{{ endunless }}

在这里,每当您想要向用户显示这些隐藏内容时,您要做的都是在其帐户详细信息页面的"true"字段中键入的。

7.3. 自动配置额外字段

您可以根据状态的变化,为开发人员提供对受限内容的访问。例如,升级应用程序计划的时间。 通过与帐户管理 API 结合使用 webhook 来简化调配的过程。帐户管理 API 位于 3scale ActiveDocs 中,您的管理门户可提供: 单击 Documentation ,即窗口右上角的问号图标(?)。 选择 3scale API 文档 。 通过检查 webhook 请求发送的消息,获取访问受限内容的开发人员的新计划。 根据开发人员的新计划,通过调用 API 更新 合作伙伴 字段来授予对私有内容的访问权限。

7.4. 需要用户登录

除了限制对上述内容的访问的两种方法外,还有另一种非常有用的技术:需要已登录的用户。 这非常容易使用 Liquid 标签来实现。您要做的就是包装内容,该内容仅适用于以下条件内的登录用户:

{{ if current_user }}
  // only visible if the user is logged in
{{ endif }}

第 8 章 电子邮件模板

在本节最后,您将编辑并保存自定义电子邮件模板。 您可以完全自定义与开发人员设置的所有标准电子邮件通信的内容,让您可以与为开发人员门户设置的工作流密切匹配。

8.1. 自定义电子邮件模板

8.1.1. 在电子邮件配置前定义您的工作流

有很多电子邮件模板选项,只有一部分与您的工作流相关。在开始编辑电子邮件模板前,请确保您对工作流感到满意,从而节省自己的时间。这样,您将只编辑实际使用的模板。

8.1.2. 测试您的工作流并识别活跃的电子邮件模板

执行完成的工作流的空运行,确保测试所有可能的分支(如批准和拒绝)。然后,识别您的测试开发人员帐户接收的每个电子邮件通知,以确定下一步中要编辑的内容。

8.1.3. 编辑并保存您的自定义模板

您第一次编辑模板时,您实际上将"创建"自定义模板。然后,在后续的编辑中,您将保存更改。警告:没有版本控制。如果要恢复更改,我们建议您进行本地副本。 您可以将相关的标签用于电子邮件中的动态内容。特别是您在对 quid 标签进行更改时,建议您进行备份。

开发人员门户电子邮件模板编辑

8.1.4. 对工作流中的所有模板重复重复

完成这些步骤,直到您已涵盖工作流的所有可能分支。

8.2. 更多信息

  • 在自定义电子邮件模板前,最好具有一个 注册流程 已完成并被测试。 如果您要更改电子邮件模板中的任何流动标签,请务必阅读有关 liquid 参考文档

第 9 章 liquids: Developer Portal

本节介绍了 Liquid 格式标签以及如何在 3scale 系统中工作,包括标记的不同元素、它们之间的连接以及如何在您的开发者门户中使用它们的简短示例。 要了解有关 Liquids 的基础知识,请参阅 Liquid 参考

9.1. 在 Developer Portal 中使用 Liquids

本节介绍如何在布局和页面中启用流动标记处理。

9.1.1. 启用 Liquids

默认情况下,所有部分和电子邮件模板都会启用 quid 标记处理。通过在 system_name 输入字段下的复选框在布局上启用它们。但是,要在页中启用它们,您必须前往该页面的高级选项部分。 只需展开 高级选项 部分,并标记"启用"复选框。现在,所有 liquid markup 将由内部引擎处理,开发人员门户内置编辑器也会添加代码高亮显示。

9.1.2. 在页面、部分和布局上使用不同的用法

liquids 的使用通常略有不同,页面、部分和布局之间稍有不同。在页面内,liquids 是单使用元素;而与部分和布局相对应的是开发人员门户的可重用元素。这意味着,除了对不同页面进行小更改时不应用多个布局或部分,您也可以添加一些逻辑流动标签,并根据用户所在的页面更改布局。

<!-- if we are inside '/documentation' URL -->
<li class="{% if request.request_uri contains "/documentation" %}active{% endif %}"><!-- add the active class to the menu item -->
  <a href="/documentation">Documentation</a>
</li>

9.1.3. 与 CSS/JS 一起使用

liquid markup 不仅可与 HTML 配合使用,您可以轻松地将其与 CSS 和/或 JavaScript 代码组合,以便更多控制。若要启用 liquid in a JS,将其创建为页面页面,并遵循与您为普通页面启用相同的步骤。完成后,您将能够在 CSS 中添加一些条件标记,或者在 JavaScript 中使用服务器端数据。只需记得将页面的内容类型设置为 CSS 或 JS。

9.2. 在电子邮件模板中使用 liquids

本节介绍如何使用相关的标签来自定义电子邮件模板。

9.2.1. Developer Portal 的不同

如前文所述,liquid 标签还可用于自定义发送给用户的电子邮件模板。所有编写时提到的常规规则同样适用于电子邮件模板,但有一些例外: 每个模板都没有常用的变量列表。相反,您必须使用前面提到的 {% debug:help %} 标签进行一些测试。 由于电子邮件本质上与网页不同,因此您将有限或无权访问某些标签。例如, {{ request.request_uri }} 不会有意义,因为电子邮件没有 URL。

<!--samples-->

9.3. 故障排除

此故障排除部分将帮助您调试和修复可能出现的典型错误。

9.3.1. 调试

如果某个操作没有按预期工作,但会正确保存,请检查以下内容: 所有标签都被正确关闭 您引用当前页面中提供的变量 您不尝试访问数组 - 例如 current_account.applications 是一系列应用程序

9.3.2. 用于解决这些错误的典型错误和方法

  • 如果因为 liquid 错误而无法保存文档,则通常是因为一些标签或丢弃没有被正确关闭。检查所有 {% %} {{ }} 标签是否都正确关闭,并且逻辑表达式,如 if , for 等,都有相应的 endif , enfor 通常,如果有问题,编辑器上方页面顶部将显示错误,其中包含一个描述性错误消息。 如果一切保存正确,并且您没有看到任何效果,请检查您没有引用空元素,并且您没有使用 logic 标签来显示内容。 {% %} 永远不会呈现任何内容,除了在标签中使用,这些标签已有一组更复杂的标签和丢弃别名。 如果只会显示 # 符号,这表示您已尝试显示是一个数组的元素。检查有关 liquid 层次结构 的部分。

9.3.3. 联系支持

如果您仍有问题,您可以通过 红帽客户门户网站 创建一个新问题单。

第 10 章 Liquids:电子邮件模板

3scale 提供使用您组织自己的消息传递和术语来自定义电子邮件模板的功能。您还可以利用流动的丢弃来显示每个客户的个性化信息。 与 Developer Portal 中的 quid drops 类似,每个电子邮件模板都有自己的上下文。这意味着,一个电子邮件模板中提供的丢弃可能不一定可用于其他电子邮件模板。 本参考概述了在什么地方提供相关的电子邮件模板,电子邮件模板按主题问题分组,以及一组获得它的丢弃丢弃了它们的支持。

10.1. 帐户管理

这些电子邮件模板属于帐户管理类别: 已确认购买帐户 购买者帐户已批准 买者帐户被拒绝 对于这些模板,您可以使用以下 liquid drops: user ⇒ User domain ⇒ String account ⇒ Account provider ⇒ Provider support_email ⇒ String 另外,以下模板: 用于购买者的密码恢复 具有对这些 quid 丢弃的访问权限: user ⇒ User provider ⇒ Provider url ⇒ url 向帐户邀请其他用户的电子邮件: 具有以下权限: account ⇒ Account provider ⇒ Provider url ⇒ url

10.2. 信用卡通知

  • 供应商的信用卡过期通知 用于购买者的信用卡过期通知 您可以使用以下 liquid drops: user_account ⇒ Account account ⇒ Account provider_account ⇒ Provider provider ⇒ Provider

10.3. 限制警报

  • 提供者的警报通知(>= 100%) 为购买者的警报通知(>= 100%) 提供者的警报通知(< 100%) 通知购买者(< 100%) 可以访问: application ⇒ Application account ⇒ Account provider ⇒ Provider service ⇒ Service alert ⇒ Alert

10.4. 应用程序

以下电子邮件模板均处理应用程序和应用程序计划通知。 为供应商创建的应用程序 他们可以访问: url ⇒ url 应用程序计划更改请求通知电子邮件模板: 计划购买者的更改请求 计划更改供应商请求 他们可以访问: application ⇒ Application provider ⇒ Provider account ⇒ Account user ⇒ User plan ⇒ Plan credit_card_url ⇒ credit_card_url 以下电子邮件模板包含多个可用 drop,例如: 为购买者更改应用程序计划 为供应商更改了应用程序计划 对于购买者,应用程序试用期已过期 他们可以访问: provider ⇒ Provider account ⇒ Account user ⇒ User plan ⇒ Plan 以及上述所有 liquid drops,以下应用程序计划消息…​ 暂停应用程序以购买者 已接受购买者的应用程序 拒绝购买者的应用程序 已取消供应商应用程序合同 使列出额外的 quid 丢弃 application ⇒ Application service ⇒ Service 针对应用程序键的以下电子邮件模板会更提示: 为购买者创建的应用程序密钥 为购买者删除应用程序密钥 key ⇒ key

10.5. Invoicing

以下电子邮件模板…​ 在为供应商支付支付前查看发票 具有以下权限: provider ⇒ Provider url ⇒ String > 另外,以下 templates…​ 没有重试的供应商的发票费用失败 为购买者提供的发票 带有重试的供应商的发票费用失败 对不重试的买家的发票失败 成功向买方收取发票 重试的买方的发票失败 分享以下 liquids: account ⇒ Account provider ⇒ Provider cost ⇒ cost invoice_url ⇒ invoice_url payment_url ⇒ payment_url

10.6. 服务

以下电子邮件模板: 供应商已取消服务合同 购买者已过期服务试用期 为供应商更改了服务计划 为购买者暂停服务合同 可以访问: provider ⇒ Provider account ⇒ Account user ⇒ User plan ⇒ Plan 以及以上 liquid drops,以下服务模板…​ 为供应商创建的服务 为购买者接受的服务 为购买者拒绝的服务 另外列出了 liquid drops: service ⇒ Service service_contract ⇒ Contract subscription ⇒ Contract

10.7. 注册

以下电子邮件模板…​ 供应商的注册通知 购买者的注册通知 可以访问: user ⇒ User provider ⇒ Provider url ⇒ activate_url

第 11 章 自定义开发人员门户布局

您可以自定义整个开发人员门户的外观和感觉,使其符合您自己的品牌。提供了标准 CSS 风格表,供您自定义提供简单的起点。 在本教程中,您将把自己的 CSS 自定义添加到开发者门户,并重新载入它以推出新的实时更改。

11.1. 创建新的 CSS 文件

有默认的样式表 default.css 。它非常大、复杂,而不是扩展它,最好为您自己的自定义创建自己的风格表来覆盖默认值。您可以创建一个新样式表的方式创建页面(请记得在高级页面设置中选择适当的 MIME 内容类型)。 务必要确保所选的布局为空。否则,页面布局 HTML 将模糊处理 CSS 规则。

11.2. 将风格表链接到您的页面布局

在链接到 bootstrap.css 的链接后,将每个布局模板(或部分有共同的 HEAD 部分)链接到您的自定义 CSS 的链接。例如:

<link rel="stylesheet" href="/stylesheets/custom.css">

现在,享受您自己的独一无二的品牌!

第 12 章 更改内置页面

在本节结束时,您将能够修改并配置系统生成的页面中任何元素的可见性。 系统生成的一些元素无法从 Developer Portal 修改,如 Signup、Dashboard 和 Account 页面。本指南介绍了如何使用 CSS 和 JavaScript 在这些页面上的内容进行自定义。 3scale 系统生成的页面可能会改变(尽管经常发生)。这些更改可能会破坏您在本指南下实施的任何自定义。如果避免使用这些黑色,请这样做。继续之前,请确保您能够监控任何破坏性更改,并进行必要的维护工作,以保持您的门户正常工作。

12.1. 确定元素

最重要的一点是确定要隐藏的内容。为此,请使用 Firebug(或其他开发人员工具,如 Chrome 开发人员工具或 Opera Dragonfly)。选择所需元素,并在控制台中点击它并选择 Copy CSS 路径。这样,您可以保存准确的 CSS 路径,以简化操作。请记住,如果元素是侧栏导航小部件的一部分,您还必须指定列表中的位置。对于这一点,您可以使用"+"选择器(例如,选择第 3 个部分),例如:ul + li + li + li + li + li)或 :nthild(n)CSS3 pseudoclass。

开发者门户修改内置页面 CSS

12.2. 修改或隐藏元素

现在,已确定了元素,您可以更改其显示设置。根据元素类型,您可以从以下两种可能的方法中选择:CSCS 操作或 jQuery 脚本。CSS 操作更加轻便且更可靠,但对于很多页面存在的某些种类的元素(例如,管理门户控制面板侧栏的第 3 部分元素也存在不同的值)。某些棘手的实施需要使用 CSS3,而这些方案不受旧浏览器的支持。在接下来的两个步骤中,您将看到这两种方法。

12.3. 选项 A:CSS

例如,尝试从 Dashboard 页面中隐藏最新的论坛文章框。第一步,您已将其 CSS 路径识别为:

#three-scale .dashboard_bubble

请记住,这是第二个具有相同路径的方框,因此您将使用"+"选择器。您的路径现在类似如下:

.main_layout #three-scale .dashboard_bubble + .dashboard_bubble
/* or */
.main_layout #three-scale .dashboard_bubble:nth-child(1)

将 display 属性改为 none 会导致这个方框不可可见:

.main_layout #three-scale .dashboard_bubble:nth-child(1) {
  display: none;
}

12.4. 选项 B: jQuery

如果您有复杂的元素来隐藏某一侧栏菜单元素,最好使用一些 jQuery。这些元素的 CSS 路径在 Dashboard 和 Account 部分中是一致的,您不想在这两个部分中隐藏元素。因此,请根据 CSS 路径和内容选择元素。在本例中,假设您想从 Dashboard 的边栏中隐藏 messages 部分。您的 CSS 路径为:

#three-scale #submenu li a

为了与内容匹配,您将使用 .text() 函数。您还会在文档头和就绪函数内包括代码,以便在生成所有内容后执行。 生成的代码片段类似如下:

$(function() {
  $('#three-scale #submenu li a').each(function() {
    if ($(this).text() == "Messages")
      $(this).parent().css('display', 'none');
				这不是唯一的解决方案。它只是显示这样一种可能的实现方法。同样的示例可以使用纯的 CSS 带有属性值的 CSS3 选择器。有关完整的 CSS3 选择器规范,请 在此处 查看。
			

第 13 章 Webhook

在本节结束时,您将能够在开发人员门户中对 webhook 配置和采取措施。 使用 Webhook 允许您将 3scale 与后台工作流紧密集成。当在 3scale 系统中发生指定事件时,您的应用程序会收到 Webhook 消息通知,您可以使用新帐户注册等数据来填充开发人员门户。

13.1. Webhook 简介

webhook 是事件触发的自定义 HTTP 回调。在 3scale 系统中,所有可能的事件会显示在 帐户设置 (右上角的gear 图标) > Integrate > Webhooks 。 当发生这些事件时,3scale 系统会向 webhook 部分中配置的 URI 发出 HTTP 或 HTTPS 请求。在末尾,您可以将监听程序配置为调用一些所需的行为,如事件跟踪。 剩余的两个复选框打开 Webhook ("Webhooks is" 交换机),并允许在管理门户中的操作触发 Webhook。默认行为是仅由 Developer Portal 中触发的操作触发 Webhook。请记住,这意味着不能触发所有事件。

13.2. Webhook 格式

Webhook 的格式始终相同。它通过以下结构的 XML 文档发布到端点:

<?xml version="1.0" encoding="UTF-8"?>
<event>
  <type>application</type>
  <action>updated</action>
  <object>
    THE APPLICATION OBJECT AS WOULD BE RETURNED BY A GET ON THE ACCOUNT MANAGEMENT
  </object>
</event>

每个元素提供信息: <type> :为您提供事件主题,如 应用程序 帐户 等等。 <action> : 使用 updated , created , deleted 等值指定已进行了什么。 '<object>:将 XML 对象本身视为与帐户管理 API 返回的格式相同。您可以使用我们的交互式 ActiveDocs 进行检查。 如果您需要提供 3scale 发布 webhook 的保证,公开 HTTPS Webhook URL,并在 3scale 中添加自定义参数到 webhook 声明中。例如: https://your-webhook-endpoint?someSecretParameterName=someSecretParameterValue 。决定参数名称和值。然后,在 webhook 端点内检查是否存在这个参数值。

13.3. 故障排除

如果您在侦听端点时遇到问题,可以恢复失效的发送。如果端点返回了 200 代码,3scale 会认为发生了一个 webhook。否则,它将重试 5 次,并有间隔 60 秒。在因中断或定期进行任何恢复后,您应该运行检查,并在适用清理队列时运行。您可以在 ActiveDocs 中找到有关以下方法的更多信息: Webhook 列表发送失败 Webhook 删除失败的发送

第 14 章 设置条款和条件

当您允许开发人员注册您的 API 时,您可能需要在授予其访问权限前,同意您关于您的条款和条件,以便了解其中的一些策略。 您的条件和条款可能还会有不同版本的开发人员。在注册过程的不同点上很容易设置。例如: 注册条款和条件 应用程序条款和条件 服务/订阅条件和条款(当您有多个服务时可用) 另外,如果您正在使用 API,您可能要明确将您的信用卡策略设置为明确。3scale 提供了设置以下信用卡策略 URL 类型的简便方法:

14.1. 条款和条件

该工作流部分通过下列步骤在管理门户中轻松设置。 进入 Audience > Developer Portal > Signup ,在其中会显示一个空白页面来填充您的签字法律条款。您可以使用 HTML、JavaScript 和 CSS 的任意组合。还可以通过单击 Insert togling 代码来提供一些切换的代码。您在此框中编写的内容只需在开发者门户的 Sign Up 页面上的 Sign Up 按钮上方出现。 填写了条款和条件后,点 Update 保存它们。 如果您使用切换代码,它将显示"通过签名,您同意以下法定条款和条件",后跟一个链接,在显示和隐藏您指定的条件和条款之间切换的链接。 默认情况下,这放置在 Signup 页面上,但它是一个部分(signup_licence),可在开发人员门户的任何位置包含。要从 Signup 页面删除它,只需在页面中删除 {% include 'signup_licence' %} 行。同样,如果要在其它位置包含它,您可以通过代码片段的其它部分使用相同部分,这些部分可以放置在开发人员门户网站中的任何位置。 您可能还希望用户在创建新应用程序时( new_application_licence partial)和/或订阅新服务( service_subscription_licence partial)时,用户接受另一组条款和条件。要设置这些设置,您可以按照上述步骤相同的步骤。

14.2. 信用卡策略

您还可以定义不同策略所在的其他 URL。要设置它们,请转至 Audience > Billing > credit Card Policies 并设置您的策略页面所在的路径。 要使这些链接正常工作,您将需要在 Developer Portal 中创建新页面。 完成后,您可以使用 URL 的 liquid drop 引用它们。例如:

<a href="{{ urls.credit_card_terms }}">Legal Terms</a>
<a href="{{ urls.credit_card_privacy }}">Privacy</a>
<a href="{{ urls.credit_card_refunds }}">Refunds</a>

And that’s it!

第 15 章 Summary: 从零到他开发人员门户

API 部署的最最佳实践审查同意一个良好的结构化开发人员门户和大量文档是保证采用的关键元素。您的开发人员门户不仅仅是文档源。这也是与开发人员互动的主要中心,以及开发人员以安全的方式访问其 API 密钥。

15.1. 目标

在本教程结束时,您将启动并运行开发人员门户来推进您的 API,允许开发人员注册帐户,并访问其 API 密钥。

15.2. 配置开发人员门户

15.2.1. 规划您的门户概念

从早期阶段,最好规划开发人员门户的概念。您计划中需要考虑最重要的元素包括: 站点映射:门户结构的框架。 顶部菜单栏中:将在每个页面上重复导航。 侧边菜单栏 :要访问每个部分中的各个页面。 页面布局指南 :为门户提供一致的外观和感觉。

15.2.2. 设置编辑环境

编辑环境的最佳设置证明: 显示 使用您的 admin 凭证登录的company-admin.3scale.net/p/admin/cms 选项卡,它提供门户的开发人员门户访问权限 第二个选项卡 指向您的company.3scale.net ,门户的公共视图(如果您通过 Site 链接访问此视图,则不必担心访问代码) 在 Admin Panel 中,您可以在左侧栏中看到所有开发人员门户的元素:

开发人员门户主页

15.2.3. 定义页面布局模板

常规的概念是为门户中的每个不同页面风格定义单独的布局。启动时有一个名为"主布局"的标准布局。在使用开发人员门户时,最好不要对此操作进行任何更改,因为这是所有系统生成的页面所使用的。通常,您希望具有门户主页的唯一风格。 主布局模板将是您自定义的起点。创建新布局,并将主布局的内容复制到其中。 通过从 "home layout" 中删除这一行来删除侧边栏菜单:

{% include 'submenu'%}
开发人员门户布局编辑

15.2.4. 创建页面层次结构

  1. 从站点映射中的根级别开始,并为每个顶部菜单项添加新部分(通过展开右侧的"new"按钮来添加部分)。分配标题、父部分和路径。 与添加部分类似,添加页面。选择所需部分以统一构建您的 URL 路径。接下来,选择页面要使用的布局。完成页面内容后,按"创建页面"。如果要编写大量内容,您可能需要使用类似 Textile 或 Markdown 的语言,您可以在高级页面设置中选择。 查看草案预览并优化页面内容,直到您满意并准备好发布它。 对部分中的所有页面重复此操作。 然后,对站点中的所有部分重复。

15.2.5. 编辑页面标头

所有重复页面元素(如 headers 和 footers)都在名为"partials"门户网站开发人员门户部分中定义。如果您只有一个布局或非常少的布局,您可以省略这一步,并在布局代码中包含标头和页脚。但是,请记住在布局中自定义这些元素。例如,应编辑默认的"子菜单"部分以反映您的站点映射。

开发者门户部分

15.2.6. 添加镜像和其他资产

对于镜像或其他文件,首先将文件加载到内容库中,然后将链接插入到文本内容中。 选择 New File 以选择您的文件,并确定您将保存在您的站点的位置。 将 URL 复制到镜像 现在,您可以添加 HTML 或 <a> 标签,并粘贴到镜像的 URL 中。

开发者门户添加镜像

15.2.7. 使用您的品牌自定义

有一个名为 default.css 的默认样式表,它非常大且复杂。最好根据自己的自定义创建自己的风格表来覆盖默认值,而不是扩展它。 您可以像创建页面一样创建新样式表 - 只需在高级页面设置中选择适当的 MIME 内容类型。然后,在链接到 default.css 后在布局模板中添加到自定义 CSS 的链接,例如:

<link rel="stylesheet" href="/stylesheets/custom.css" />

15.2.8. 进行实时

最后的任务是查看整个门户站点并检查所有工作流。您可以在 Changes 部分发布每个页面或所有页面。一旦您对所有内容很满意,请进行最后检查是否已发布所有页面。 现在,您已准备好删除门户的任何访问代码: 祝贺您!您的开发人员门户现已上线,并准备好构建开发人员社区。

15.3. Developer Portal 的额外配置选项

您可以配置其他区域,供您配置: 设置应用程序计划 :通过这些计划,您可以为您将发布的 API 密钥配置了访问权限。 配置开发人员注册流程 :这些流可以在从自助服务、需要批准或只邀请注册的情况下在范围内的任何位置进行。 The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/ . In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version. Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law. Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries. Linux ® is the registered trademark of Linus Torvalds in the United States and other countries. Java ® is a registered trademark of Oracle and/or its affiliates. XFS ® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries. MySQL ® is a registered trademark of MySQL AB in the United States, the European Union and other countries. Node.js ® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.