开发 k8s 管理平台 - k8sailor 05. RESTFul API 接口规范与请求应答约定

简介: 开发 k8s 管理平台 - k8sailor 05. RESTFul API 接口规范与请求应答约定

开发 k8s 管理平台 - k8sailor 05. RESTFul API 接口规范与请求应答约定

原文地址: https://tangx.in/posts/books/k8sailor/chapter01/05-design-restful-api-and-response-data/
tag: https://github.com/tangx/k8sailor/tree/feat/05-design-restful-api-and-response-data

强烈建议使用 RESTful 风格来设计 API 文档。

RESTful api

# kubectl create deployment nginx-tools --image nginx:alpine --output=yaml --dry-run=client
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx-tools
  name: nginx-tools
# ... 省略

# kubectl create namespace  hello --dry-run=client -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: null
  name: hello
# ... 省略

可以看到, k8s api 中都有一个对应的 kind 描述资源类型, 这个正好符合 RESTful 中资源定位的需求。

大概就是这样。

# 所有资源操作
GET     /appname/v0/:resources

## 特定志愿操作
GET     /appname/v0/:resources/:name?params
POST    /appname/v0/:resources/:name?params
DELETE  /appname/v0/:resources/:name
# 获取所有 deployemnt 信息, 默认会设计一些限定条件, 比如说 namespace=default
GET /k8sailor/v0/deployments

# 针对特定名称资源的 deployment 操作
GET /k8sailor/v0/deployments/my-nginx-01?namespace=kube-system
DELETE /k8sailor/v0/deployments/my-nginx-01?namespace=default

回到代码中

// RootGroup 向 httpserver 注册根路由
func RootGroup(base *gin.RouterGroup) {
// ... 省略

    // 创建 deployment 路由组
    deployment := v0.Group("/deployments")
    {
        // 针对 所有 deployment 操作, 这里还没有绑定 handler
        deployment.GET("/")

        // 针对特定的命名资源操作
        // 直接返回 找不到
        deployment.GET("/:name", func(c *gin.Context) {
            err := errors.New("deployment not found")
            httpresponse.Error(c, http.StatusNotFound, err)
        })
    }
}

http response

对于应答消息, 不建议将 成功 和 失败 内容分成两个不同的 结构体 发送给客户端, 否则客户端在使用的时候还需要在判断应答的结构体属于哪种。 如果服务端一旦修改了应答结构体,客户端可能就崩掉了。

// 成功
{
    "data":"success data"
}

// 失败
{
    "error":"error message"
}

因此需要对 http 相应进行一些简单的封装。

  1. 把应答消息封装成一个标准结构, 具体消息信息用某个字段占有。

    • data 表示成功消息
    • error 表示失败消息
  2. http status code 本身就对 行为和资源 的有了一个明确的描述, 并且是通用的。 因此最好能将 response code 和 http status code 之间建立一个映射关系, 这样通过 code 也快速的判断 response 状态和内容。

    • 这里只是简单的将 http status code 用作 response code 。
    • 如果 http code 是 200, 则 response code 强制设置成 0。 一般情况下,非 0 表示异常。
func Common(c *gin.Context, code int, data interface{}, err error) {
    _err := ""
    if err != nil {
        _err = err.Error()
    }

    // 强制设置
    if code == 200 {
        code = 0
    }

    resp := Response{
        Code:  code,
        Data:  data,
        Error: _err,
    }

    c.JSON(code, resp)
}

文献

运行起来

启动服务

cd cmd/k8sailor && go run . httpserver

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

请求接口

这里推荐一个 vscode 下比较好用的 http client REST client, 类似 postman

https://marketplace.visualstudio.com/items?itemName=humao.rest-client
### GET deployment by name
GET http://127.0.0.1:8088/k8sailor/v0/deployments/my-nginx-01

请求结果, 资源找不到, http status code, data code 等都符合预期。

HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8
Date: Fri, 24 Sep 2021 03:18:34 GMT
Content-Length: 55
Connection: close

{
  "code": 404,
  "data": null,
  "error": "deployment not found"
}
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
机器学习/深度学习 人工智能 供应链
唯品会 API 赋能,唯品会平台母婴商品用户需求洞察
在电商竞争激烈的环境下,唯品会作为中国领先品牌折扣平台,母婴类目正快速增长。通过开放API赋能,平台实现对母婴用户需求的深度洞察,涵盖数据整合、智能分析与个性化推荐。本文解析API如何驱动需求预测、情感分析与用户细分,助力平台提升运营效率与用户满意度,展望未来结合AI技术的潜力。
|
数据采集 人工智能 监控
唯品会 API 助力,唯品会平台美妆商品营销效果评估
在电商竞争激烈的环境下,唯品会作为领先特卖平台,其美妆品类的营销效果评估至关重要。通过唯品会 API,商家可实时获取商品、销售及用户行为数据,精准计算 ROI、转化率等关键指标,实现数据驱动的营销优化。本文介绍 API 的应用方法,并结合案例说明如何提升营销效率与销售表现。
|
人工智能 安全 小程序
面向开发者的API平台设计与选型建议【附源码示例】
在软件开发日益模块化的今天,API平台作为连接技术与应用的枢纽,正重塑产品开发方式。它聚合各类能力接口,如支付、AI绘图、图像识别等,助力开发者高效构建系统。本文详解API平台定义、优势、应用场景及选型指南,揭示其如何降低门槛、加速创新,并展望其未来发展趋势。
|
机器学习/深度学习 人工智能 缓存
电商 API 接口:开启全平台商品信息同步新时代
在数字化浪潮下,电商平台激增,消费者跨平台购物成为常态。然而,商品信息分散导致数据不一致、库存混乱等问题。电商 API 接口应运而生,通过标准化数据交换,实现多平台商品信息实时同步,提升运营效率、降低成本、增强用户体验,成为企业数字化转型的关键引擎。
|
API 开发工具 开发者
【干货满满】电商平台API接口用python调用脚本
这是一个支持淘宝、京东、拼多多、亚马逊等主流电商平台的通用 API 调用 Python 脚本框架,适配 doubao 使用。脚本封装了签名验证、请求处理、异常捕获及限流控制等核心功能,提供统一接口调用方式,便于开发者快速集成与扩展。
|
缓存 监控 API
电商 API 场景中,电商平台将核心完整诊断、分析和优化过程
某头部电商平台通过分阶段性能优化,将核心 API 的 QPS 从 100 提升至 1000。优化涵盖架构、应用、代码和运维四层,包括引入 API 网关、数据库分库分表、多级缓存、异步化改造、序列化优化、容器化弹性伸缩等关键手段,并结合 Jaeger、Prometheus、wrk 等工具进行性能诊断与监控。最终平均响应时间下降 4.7 倍,错误率降低 15 倍,资源使用率显著下降,系统稳定性与吞吐能力大幅提升。
|
JSON 搜索推荐 API
唯品会 API 接口:唯品会平台促销活动订单转化率提升
在电商中,促销活动是提升销量的重要手段。唯品会作为领先的品牌折扣平台,通过限时抢购、优惠券等方式吸引用户,但如何提升订单转化率仍是关键挑战。本文分析了用户决策延迟、信息不对称、个性化不足等问题,并介绍如何利用唯品会 API 接口实现数据驱动优化。通过实时数据同步、个性化推荐和自动化处理,API 可帮助开发者提升转化率,案例显示优化后转化率平均提升 20%-30%。同时,自动化流程降低了运营成本,增强了用户体验。集成唯品会 API,是实现高效促销、提升用户粘性的重要路径。
|
数据挖掘 API 数据安全/隐私保护
小红书电商 API 接口:小红书平台电商活动话题热度监测
小红书作为领先社交电商平台,通过API接口实现电商话题热度监测,助力品牌实时掌握用户兴趣与互动趋势,提升运营效率与营销精准度。
|
数据采集 监控 搜索推荐
小红书电商 API 助力,小红书平台电商笔记营销效果量化
在数字化营销时代,小红书凭借用户生成内容推动电商转化,但营销效果常因数据碎片化难以衡量。本文探讨如何借助小红书电商 API,精准量化曝光量、点击率、转化率等关键指标,提升营销效率与投资回报率。
|
人工智能 JSON 算法
抖音电商 API 赋能,抖音平台达人合作数据精准对接
抖音电商API为品牌与达人合作提供精准数据对接,提升匹配效率与营销精准度,助力电商生态智能化升级。

推荐镜像

更多