开发 k8s 管理平台 - k8sailor 04. 使用 gin 创建第一个 API 接口

简介: 开发 k8s 管理平台 - k8sailor 04. 使用 gin 创建第一个 API 接口

开发 k8s 管理平台 - k8sailor 04. 使用 gin 创建第一个 API 接口

原文地址: https://tangx.in/posts/books/k8sailor/chapter01/04-init-httpserver/
tag: https://github.com/tangx/k8sailor/tree/feat/04-httpserver-initial
cd cmd/k8sailor && go run . httpserver

启动 web 服务器

Usage:
  k8sailor httpserver [flags]

Flags:
  -h, --help   help for httpserver

Global Flags:
      --config string   k8s 配置授权文件 (default "./k8sconfig/config.yml")

2021/09/24 07:56:51 open config/local.yml: no such file or directory
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /k8sailor/v0/ping         --> github.com/tangx/k8sailor/cmd/k8sailor/apis.RootGroup.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on :8088

创建 pkg/confgin 初始化配置文件

为了方便服务配置管理, 将使用 使用 jarvis 初始化配置

需要对 httpserver 进行一些初始化配置

// Server 定义一个 gin httpserver 的关键字段
// `env:""` 可以通过 `github.com/go-jarvis/jarvis` 库渲染成配置文件
type Server struct {
    Host    string `env:""`
    Port    int    `env:""`
    Appname string `env:""`
    engine  *gin.Engine
}

其中需要额外强调的是, httpserver 必须 有自己的 应用名 的前缀路由。 应该 有自己的版本路由。

http://127.0.0.1:8088/appname/v0/ping

在服务容器化后, 具有自己 应用名 路由的服务对 各家 ingress 规则都是友好的。 如果没有, 上线之后要强行使用 rewrite 实现的话, 那就必须依赖 ingress controller 的实现了。

如果 rewrite 规则里面 正则表达式 , 那就让运维哭去吧

目前所知

  • nginx ingress controller 支持 rewrite, 支持正则表达式
  • traefik 好像可以使用 middleware 实现, 不支持正则表达式
  • istio 有自己的规则, 但不支持正则表达式
// RegisterRoute 注册
func (s *Server) RegisterRoute(registerFunc func(rg *gin.RouterGroup)) {

    // 注册以服务名为根的路由信息,方便在 k8s ingress 中做转发
    base := s.engine.Group(s.Appname)

    // 注册业务子路由
    registerFunc(base)
}

使用 jarvis 初始化配置

jarvis 是一个对 配置解析配置加载 操作封装的库。

  1. 可以方便的通过 config struct 解析出对应的配置参数。
  2. 在启动时, 支持通过 配置文件环境变量 加载配置参数, 对 k8s 容器应用还算友好。
  3. 支持 giltab 分支配置特点, 可以在不同分支使用不同的变量值。

具体使用案例, 可以参考 github 的 demo github.com/go-jarvis/jarvis

// 定义服务相关信息
var (
    HttpServer = &confgin.Server{}

    app = jarvis.App{
        Name: "k8sailor",
    }
)

// 使用 jarvis 初始化配置文件
func init() {
    config := &struct {
        HttpServer *confgin.Server
    }{
        HttpServer: HttpServer,
    }
    app.Conf(config)
}

在运行的时候, 会在 运行 根目录生成 config/default.yml 文件。 该文件不要直接修改, 每次运行将被覆盖。

加载顺序 default.yml -> config.yml -> local.yml / config.branch.yml -> env

如果本地开发, 可以把一些关键的敏感配置放在 local.yml 中并 .gitignore 忽略。

为命令行添加 httpserver 子命令

初始化子命令

并设置启动命令

// runHttpserver 启动 http server
func runHttpserver() {
    // 1. 将 apis 注册到 httpserver 中
    global.HttpServer.RegisterRoute(apis.RootGroup)

    // 2. 启动服务
    if err := global.HttpServer.Run(); err != nil {
        logrus.Fatalf("start httpserver failed: %v", err)
    }
}

完成之后, 在 cmd/root.go 命令中添加子命令

func init() {
    cobrautils.BindFlags(rootCmd, global.Flags)

    // 添加子命令
    rootCmd.AddCommand(cmdHttpserver)
}

创建并注册路由

自定义启动参数

由于是用了 jarvis 库, 在程序启动的时候, 会在运行目录生成 config/defualt.yml 配置文件。

复制并重命名为 config.yml 覆盖默认值。

k8sailor__HttpServer_Appname: k8sailor
k8sailor__HttpServer_Host: ""
k8sailor__HttpServer_Port: 8088

启动

如开头所示, 可以看到, 配置项已成功被应用

  • httpserver 的根路由为 /k8sailor/v0/xxxxx
  • httpserver 的监听端口为 8088

如果要在容器中运行, 只需要在容器中注入相同变量名的变量

export k8sailor__HttpServer_Appname=k8sailor
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3天前
|
数据采集 消息中间件 API
微店API开发全攻略:解锁电商数据与业务自动化的核心能力
微店开放平台提供覆盖商品、订单、用户、营销、物流五大核心模块的API接口,支持企业快速构建电商中台系统。其API体系具备模块化设计、双重认证机制、高并发支持和数据隔离等特性。文档详细解析了商品管理、订单处理、营销工具等核心接口功能,并提供实战代码示例。同时,介绍了企业级整合方案设计,如订单全链路自动化和商品数据中台架构,以及性能优化与稳定性保障措施。最后,针对高频问题提供了排查指南,帮助开发者高效利用API实现电商数智化转型。适合中高级开发者阅读。
|
8天前
|
存储 缓存 监控
如何高效爬取天猫商品数据?官方API与非官方接口全解析
本文介绍两种天猫商品数据爬取方案:官方API和非官方接口。官方API合法合规,适合企业长期使用,需申请企业资质;非官方接口适合快速验证需求,但需应对反爬机制。详细内容涵盖开发步骤、Python实现示例、反爬策略、数据解析与存储、注意事项及扩展应用场景。推荐工具链包括Playwright、aiohttp、lxml等。如需进一步帮助,请联系作者。
|
9天前
|
机器学习/深度学习 JSON 算法
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
|
9天前
|
数据可视化 测试技术 API
前后端分离开发:如何高效调试API?有工具 vs 无工具全解析
在前后端分离的开发模式中,API 调试的效率直接影响项目的质量和交付速度。通过本文的对比分析,我们可以看到无工具调试模式虽具备灵活性和代码复用能力,但在操作便利性和团队协作上稍显不足。而传统的外部调试工具带来了可视化、高效协作与扩展性,却可能存在工具切换带来的开发链路断层问题。Apipost-Hepler 融合了两者的优势,让开发者无需离开熟悉的 IDEA 环境,就能享受可视化调试工具的强大功能。
40 5
|
9天前
|
存储 监控 API
1688平台API接口实战:Python实现店铺全量商品数据抓取
本文介绍如何使用Python通过1688开放平台的API接口自动化抓取店铺所有商品数据。首先,开发者需在1688开放平台完成注册并获取App Key和App Secret,申请“商品信息查询”权限。接着,利用`alibaba.trade.product.search4trade`接口,构建请求参数、生成MD5签名,并通过分页机制获取全量商品数据。文中详细解析了响应结构、存储优化及常见问题处理方法,还提供了竞品监控、库存预警等应用场景示例和完整代码。
|
14天前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
21天前
|
JSON API 数据格式
淘宝商品评论数据API接口详解及JSON示例返回
淘宝商品评论数据API接口是淘宝开放平台提供的一项服务,旨在帮助开发者通过编程方式获取淘宝商品的评论数据。这些数据包括评论内容、评论时间、评论者信息、评分等,对于电商分析、用户行为研究、竞品分析等领域都具有极高的价值。
|
21天前
|
JSON 供应链 API
京东工业平台商品列表 API 接口(京东工业 API 系列)
京东工业平台的商品列表API助力企业数字化转型,提供商品名称、价格、规格等信息,支持按分类、品牌、价格范围、关键词等筛选条件精准获取商品数据。接口采用HTTP GET/POST请求,返回JSON格式数据,包含商品基本信息、价格、库存和销售情况,适用于市场调研、竞品分析及采购计划制定。示例代码展示了如何使用Python的requests库调用该API。
|
25天前
|
JSON API 数据格式
阿里巴巴商品详情接口(阿里巴巴 API 系列)
在电商开发中,获取阿里巴巴商品详情信息对数据分析、竞品研究等至关重要。通过调用其商品详情接口,开发者可获取标题、价格、图片、描述等数据,满足多种业务需求。接口采用HTTPS协议,支持GET/POST请求,返回JSON格式数据。示例代码展示了如何使用Python的requests库进行接口请求,需传递商品ID和访问令牌。实际应用时,请依据官方文档调整参数并确保安全性。
58 10
|
1天前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。

热门文章

最新文章