Skip to main content

No project description provided

Project description

蓝鲸 API 网关管理 SDK,提供了基本的注册,同步,发布等功能。

功能

  • 根据预定义的 YMAL 文件进行网关创建,更新,发布及资源同步操作

  • 蓝鲸 APIGW jwt 解析中间件

  • 蓝鲸 APIGW 来源校验

使用方法

在 settings.py 中定义网关名称和接口地址模板:

BK_APIGW_NAME = "my-app"
BK_API_URL_TMPL = ""

在 INSTALLED_APPS 中加入:

INSTALLED_APPS += [
    'apigw_manager.apigw',
]

如果应用需要认证 API 网关传递过来的 JWT 信息,在 MIDDLEWARE 中加入:

MIDDLEWARE += [
    'apigw_manager.apigw.authentication.ApiGatewayJWTGenericMiddleware',  # JWT 认证
    'apigw_manager.apigw.authentication.ApiGatewayJWTAppMiddleware',  # JWT 透传的应用信息
    'apigw_manager.apigw.authentication.ApiGatewayJWTUserMiddleware',  # JWT 透传的用户信息
]

请确保应用进程在启动前执行了 python manage.py fetch_apigw_public_key 命令,否则中间件可能无法正常工作

注意中间件的优先级,请加到其他中间件之前。

apigw_manager 默认提供了一个基于 User Model 实现的 authentication backend,如需使用,在 AUTHENTICATION_BACKENDS 中加入:

AUTHENTICATION_BACKENDS += [
    'apigw_manager.apigw.authentication.UserModelBackend',
]

中间件

ApiGatewayJWTGenericMiddleware

认证 JWT 信息,在 request 中注入 jwt 对象,有以下属性:

  • api_name:传入的网关名称;

ApiGatewayJWTAppMiddleware

解析 JWT 中的应用信息,在 request 中注入 app 对象,有以下属性:

  • bk_app_code:调用接口的应用;

  • verified:应用是否经过认证;

ApiGatewayJWTUserMiddleware

解析 JWT 中的用户信息,在 request 中注入 user 对象,该对象通过以下调用获取:

auth.authenticate(request, username=username, verified=verified)

因此,请选择或实现合适的 authentication backend。 如果该中间件认证逻辑不符合应用预期,可继承此中间件,重载 get_user 方法进行调整;

用户认证后端

UserModelBackend

  • 已认证的用户名,通过 UserModel 根据 username 获取用户,不存在时返回 None

  • 未认证的用户名,返回 AnonymousUser

definition.yaml

用于定义网关资源,为了简化使用,使用以下模型进行处理:

+---------------------------------+                +--------------------------------+
|                                 |                |                                |
|                                 |                |  +----------------------+      |
|   ns1:                          |                |  |ns1:                  |      |
|     key: {{data.key}}           |                |  |  key: value_from_data+--+   |             +------------------------------+
|                                 |     Render     |  |                      |  |   |    Load     |                              |
|                                 +--------------->+  +----------------------+  +---------------->+  api(key="value_from_data")  |
|   ns2:                          |                |   ns2:                         |             |                              |
|     key: {{settings.THE_KEY}}   |                |     key: value_from_settings   |             +------------------------------+
|                                 |                |                                |
|                                 |                |                                |
|           Template              |                |              YAML              |
+---------------------------------+                +--------------------------------+

definition.yaml 中可以使用 Django 模块语法引用和渲染变量,内置以下变量:

  • settings:django 提供的配置对象;

  • environ:环境变量;

  • data:命令行自定义变量;

推荐在一个文件中统一进行定义,用命名空间来区分不同资源间的定义:

  • apigateway:定义网关基本信息,用于命令 sync_apigw_config

  • stage:定义环境信息,用于命令 sync_apigw_stage

  • strategies:定义网关策略,用于命令 sync_apigw_strategies

  • apply_permissions:申请网关权限,用于命令 apply_apigw_permissions

  • grant_permissions:应用主动授权,用于命令 grant_apigw_permissions

  • release:定义发布内容,用于命令 create_version_and_release_apigw

特别的,为了方便用户直接使用网关导出的资源文件,资源定义默认没有命名空间。

命令

约定:definition.yaml 用于维护网关基本定义,不包含资源定义,资源定义使用 resources.yaml 单独定义,基本的网关同步命令顺序如下,可参考使用:

python manage.py sync_apigw_config -f definition.yaml  # 同步网关基本信息
python manage.py sync_apigw_stage -f definition.yaml  # 同步网关环境信息
python manage.py sync_apigw_strategies -f definition.yaml  # 同步网关策略
python manage.py apply_apigw_permissions -f definition.yaml  # 申请网关权限,如无可跳过
python manage.py grant_apigw_permissions -f definition.yaml  # 为应用主动授权,如无可跳过
python manage.py sync_apigw_resources -f resources.yaml  # 同步网关资源
python manage.py sync_resource_docs_by_archive -f definition.yaml  # 同步资源文档
python manage.py create_version_and_release_apigw -f definition.yaml  # 创建资源版本并发布
python manage.py fetch_apigw_public_key  # 获取网关公钥

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

apigw-manager-1.0.0.tar.gz (16.3 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page