跳到主要内容
版本:2.13.2304

搭建开发者门户站点

本文将指导你作为 API 的生产者及管理员,如何将已经接入 API7 网关的 API 发布到与网关配套的开发者门户,搭建一个站点,允许内部或外部的开发者登录后查找到这个 API,查看对应的 API 文档,并申请订阅 API,获得 API 管理员的同意后,自动获取访问凭证。

为什么需要开发者门户​

API 全生命周期管理除了要站在 API “生产者”(API 开发者、维护者)的角度,来简化 API 的管理问题外,还应当覆盖 API 的“消费”问题,即如何让外部开发者(也可能是来自同一公司不同团队的开发者)能够方便地集成 API 的问题。我们不妨来看下,如果想让一个外部的开发者调用你的 API,需要解决哪些问题?

第一个问题是,如何让外部的开发者查看到 API 的信息,包括 API 的接入地址、API 的描述、参数约束、使用示例等。这些详细信息能够有效地帮助到外部开发者去理解并使用 API;

第二个问题是,作为 API 的“生产者”,我们往往不希望谁都可以来调用我们开发的 API,即我们希望对 API 进行有效的保护,因此外部的开发者应该仅在获得了有效的 API 凭证以后,才能真正使用 API。更重要的是,我们希望 API 的“消费”应当是尽可能自助的,从而减少沟通协作带来的成本。

为了优化 API “消费”这个环节,人们提出了开发者门户这个概念,借此来解决上述的问题。API7 Enterprise 推出了自己配套的开发者门户产品与网关搭配使用。

背景知识​

了解开发者门户基本概念。

架构设计​

API7 Devportal architecture

  • 图中业务开放平台需要自行开发,或者直接集成到已有的业务平台中,可同时支持多个业务平台。例如,你可以搭建一个内网开放平台,展示并管理仅供内部业务使用的 API,同时搭建一个公开的开放平台,展示并管理对外公开的 API。或者你也可以根据业务属性,为某个组织或部门的开发者搭建独立的站点,展示并管理仅供指定组织或部门使用的 API。
  • API7 开发者门户展示端仅提供后端 API,且不会存储开发者账号相关信息,除非启用自带的邮箱账号体系(不推荐)。
  • API7 开发者门户管理端提供前端页面与后端模块,登录 API7 Enterprise 控制台即可使用。

调用展示端 API​

调用时序图​

API7 Devportal process

调用鉴权​

调用展示端的后端 API 需要鉴权以保证安全性。API7 开发者门户使用的是 jwt 鉴权方式,鉴权流程主要分为两部分,获取 access_token 和携带 Token。

  1. 获取 access_token。
  • 第一种方式是通过特定的代码片段来生成 access_token, 需要传入 组织 ID 信息。 其中 secret 需要和 API7-Devportal 中保持一致。 例如:

func GenerateToken(userID, secret string, expiredIn int) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"org_id": orgID,
"iat": jwt.NewNumericDate(time.Now()),
"exp": jwt.NewNumericDate(time.Now().Add(time.Second * time.Duration(expiredIn))),
})

return token.SignedString([]byte(secret))
}

  • 第二种方式是通过调用 Token 签发接口来获取 access_token ,同样需要携带组织 ID 信息。 API7 Devportal 将从 access_token 中获取组织 ID 信息,从而返回对应的组织下的信息。 例如:

curl -XPUT http://127.0.0.1:9000/devportal/sign -H "Authorization: Bearer $root_access_token" -d
'{
"org_id": "$orgID"
}'

  1. 将 access_token 携带于 Authorization 头中访问. 例如:

curl http://127.0.0.1:9000/devportal/applications -H "Authorization: Bearer $access_token"