wordpress站群搭建3api代码生成和swagger使用

news2025/1/19 19:31:14

海鸥技术下午茶-wordpress站群搭建3api代码生成和swagger使用

目标:实现api编写和swagger使用

0.本次需要使用到的脚手架命令

生成 http server 代码

goctl api go -api all.api -dir ..

生成swagger文档

goctl api plugin -plugin goctl-swagger="swagger -filename station.json -host 127.0.0.1:8000" -api all.api -dir .

运行 swagger

swagger serve --no-open -F=swagger --port 36666 station.json

1.编写api

api详细文档

base.api api公共types

syntax = "v1"

// The basic response with data | 基础带数据信息
type BaseDataInfo {
    Code int    `json:"code"`           // Error code | 错误代码
    Message  string `json:"message"`    // Message | 提示信息
    Data string `json:"data,omitempty"` // Data | 数据
}
// The basic response with data | 基础带数据信息
type BaseListInfo {
    Total uint64 `json:"total"`          // The total number of data | 数据总数
    Data string `json:"data,omitempty"`  // Data | 数据
}
// The basic response without data | 基础不带数据信息
type BaseMsgResp {
    Code int    `json:"code"`          // Error code | 错误代码
    Message  string `json:"message"`   // Message | 提示信息
}
// The page request parameters | 列表请求参数
type PageInfo {
    Page   uint64    `form:"page" validate:"required,number,gt=0"`             // Page number | 第几页
    PageSize  uint64    `form:"pageSize" validate:"required,number,lt=100000"` // Page size | 单页数据行数
}
// Basic ID request | 基础ID参数请求
type IDReq {
    Id  uint64 `json:"id" validate:"number"` // ID Required: true
}
// Basic IDs request | 基础ID数组参数请求
type IDsReq {
    Ids  []uint64 `json:"ids"` // IDs Required: true
}
// Basic ID request | 基础ID地址参数请求
type IDPathReq {
    Id  uint64 `path:"id"` // ID  Required: true
}

all.api 用于聚合api

import "base.api"
import "./station/station.api"
import "./station/posts.api"
import "./station/delivery_log.api"

station.api 站点api

//站点信息
type  (
	// Station 
	StationInfo {
		Id           uint64  `json:"id,optional"`            // 主键
		DomainName   string  `json:"domainName"`   // 域名
		Ip           string  `json:"ip,optional"`   // 域名
		DomainYear   int64   `json:"domainYear"`   // 域名年份
		GoogleWeight float64 `json:"googleWeight"` // 谷歌权重
		Type         string  `json:"type"`          // 网站类型
		Industry     string  `json:"industry"`      // 网站行业
		ArticlesNum  int64   `json:"articlesNum"`     // 文章数量
		UserName     string  `json:"userName,optional"`     // 账号名
		PassWord     string  `json:"passWord,optional"`     // 密码
	}
	// Station 页面查询
	StationReq {
		PageInfo
		DomainName   string  `form:"domainName,optional"`   // 域名
		Ip           string  `form:"ip,optional"`          // ip
		DomainYear   int64   `form:"domainYear,optional"`   // 域名年份
		GoogleWeight string  `form:"googleWeight,optional"` // 谷歌权重
		Type         string  `form:"type,optional"`          // 网站类型
		Industry     string  `form:"industry,optional"`      // 网站行业
	}
	// The response data of Station list | Station 列表数据
	StationListInfo {
		BaseListInfo
		Data []StationInfo `json:"data"` // StationInfo list data | StationInfo列表数据
	}
	//Station 列表返回体
	StationListResp {
		BaseDataInfo
		Data StationListInfo `json:"data"` // Station list data | Station列表数据
	}
	// Station 普通返回体
	StationInfoResp {
        BaseDataInfo
        Data StationInfo `json:"data"` // Station information | Station数据
    }
	// Station Posts 返回体  
	StationPostsInfo {
       Id         uint64 `json:"id"`
	   Title      string `json:"title"`       // Title
    }
	// 返回体
	StationPostsResp{
		BaseDataInfo
		Data []StationPostsInfo `json:"data"`  // Station Posts 返回体
	}
)  
@server (
	group:      station
	prefix: 	/station
	timeout:    10s
)
service Station {
	@doc "新增站点"
	@handler addStation
	post /api/station (StationInfo) returns (StationInfoResp)
	@doc "修改站点"
	@handler updateStation
	put /api/station (StationInfo) returns (StationInfoResp)
	@doc "删除站点"
	@handler deleteStation
	delete /api/station/:id (IDPathReq) returns (BaseDataInfo)
	@doc "查询站点"
	@handler queryStation
	get /api/station (StationReq) returns (StationListResp)
    @doc "获取关联的文章"
	@handler queryPosts
	get /api/station/posts/:id (IDPathReq) returns (StationPostsResp)
}

posts.api 文章api

//博客信息
type (
	// Posts
	PostsInfo {
		Id         uint64 `json:"id,optional"`
		Title      string `json:"title"` // 标题
		Source     string `json:"source"` // 来源
		Author     int64 `json:"author"` // 作者
		ThrownNum  int64  `json:"thrownNum"` // 投放数量
		Categories  string  `json:"categories"` // 分类
		CreateTime string `json:"createTime,optional"` //时间
		Content    string `json:"content"` //详情
	}
	// Posts 页面查询
	PostsReq {
		PageInfo
		Title      string `form:"title,optional"` // 标题
		Source     string `form:"source,optional"` // 来源
		Categories     string `form:"categories,optional"` // 分类
		Author     int64 `form:"author,optional"` // 作者
		CreateTime int64  `form:"createTime,optional"` // 时间
	}
	// The response data of Posts list | Posts 列表数据
	PostsListInfo {
		BaseListInfo
		Data []PostsInfo `json:"data"` // PostsInfo list data | PostsInfo列表数据
	}
	//Posts 列表返回体
	PostsListResp {
		BaseDataInfo
		Data PostsListInfo `json:"data"` // Posts list data | Posts列表数据
	}
	// Posts 普通返回体
	PostsInfoResp {
		BaseDataInfo
		Data PostsInfo `json:"data"` // Posts information | Posts数据
	}
)
@server (
	group:      posts
	prefix:     /station
)
service Station {
	@doc "新增Posts"
	@handler addPosts
	post /api/posts (PostsInfo) returns (PostsInfoResp)

	@doc "修改Posts"
	@handler updatePosts
	put /api/posts (PostsInfo) returns (PostsInfoResp)

	@doc "删除Posts"
	@handler deletePosts
	delete /api/posts/:id (IDPathReq) returns (BaseDataInfo)

    @doc "查询Posts"
	@handler queryPosts
	get /api/posts (PostsReq) returns (PostsListResp)

	@doc "查询Posts详情"
	@handler getPosts
	get /api/posts/:id (IDPathReq) returns (PostsInfoResp)
}

delivery_log.api 文章分发日志api

//博客信息
type (
	// DeliveryLog
	DeliveryLogInfo {
		Id           uint64 `json:"id,optional"`
		Title        string `json:"title"` // 标题
		Source       string `json:"source,optional"` // 来源
		DomainName   string `json:"domainName"` // 域名
		DeliveryDate string `json:"deliveryDate,optional"` // 投放日期
		Deliverer    string `json:"deliverer,optional"` // 投放人
		Status       int64  `json:"status,optional"` // 投放状态
		Author       uint64 `json:"author,optional"` // 作者
		WpCateIds    string `json:"wpCateIds,optional"` // wp分类
		StationId    uint64 `json:"stationId,optional"` // 站点id
		PostsId      uint64 `json:"postsId,optional"` // 文章id
	}
	// 投放对象
	DeliveryInfo {
		StationInfoList []StationInfo `json:"stationInfoList"` // 站点id
		PostsInfoList   []PostsInfo   `json:"postsInfoList"` // 文章id
	}
	// DeliveryLog 页面查询
	DeliveryLogReq {
		PageInfo
		Title        string `form:"title,optional"` // 标题
		Source       string `form:"source,optional"` // 来源
		DomainName   string `form:"domainName,optional"` // 域名
		DeliveryDate int64  `form:"deliveryDate,optional"` // 投放日期
		Deliverer    string `form:"deliverer,optional"` // 投放人
		Status       int64  `form:"status,optional"` // 投放状态
		Author       uint64 `form:"author,optional"` // 作者
	}
	// The response data of DeliveryLog list | DeliveryLog 列表数据
	DeliveryLogListInfo {
		BaseListInfo
		Data []DeliveryLogInfo `json:"data"`	// DeliveryLogInfo list data | DeliveryLogInfo列表数据
	}
	// The response data of DeliveryLog list | DeliveryLog 列表数据
	DeliveryListInfo {
		Data []DeliveryLogInfo `json:"data"`	// DeliveryInfo list data | DeliveryInfo列表数据
	}
	//DeliveryLog 列表返回体
	DeliveryLogListResp {
		BaseDataInfo
		Data DeliveryLogListInfo `json:"data"` // DeliveryLog list data | DeliveryLog列表数据
	}
	// DeliveryLog 普通返回体
	DeliveryLogInfoResp {
		BaseDataInfo
		Data DeliveryLogInfo `json:"data"`  // DeliveryLog information | DeliveryLog数据
	}
)

@server (
	group:      deliveryLog
	prefix:     /station
)
service Station {
	@doc "投放" 
	@handler addDeliveryLog
	post /api/deliverylog (DeliveryListInfo) returns (BaseDataInfo)

	@doc "修改DeliveryLog"
	@handler updateDeliveryLog
	put /api/deliverylog (DeliveryLogInfo) returns (DeliveryLogInfoResp)

	@doc "删除DeliveryLog"
	@handler deleteDeliveryLog
	delete /api/deliverylog/:id (IDPathReq) returns (BaseDataInfo)

	@doc "查询DeliveryLog"
	@handler queryDeliveryLog
	get /api/deliverylog (DeliveryLogReq) returns (DeliveryLogListResp)

	@doc "获取投放列表"
	@handler generateDeliveryList
	post /api/deliverylog/list (DeliveryInfo) returns (DeliveryLogListResp)
}

2.生成代码

进入到api项目的desc目录,运行生成api代码脚手架命令

cd ./desc
goctl api go -api all.api -dir ..

3.swagger使用

还是在desc目录下,生成swaagger json

goctl api plugin -plugin goctl-swagger="swagger -filename station.json -host 127.0.0.1:8000" -api all.api -dir .

运行swagger

swagger serve --no-open -F=swagger --port 36666 station.json

4.允许跨域配置

在入口文件 station.go中修改

//rest.MustNewServer(c.RestConf)
//修改为下面的代码
rest.MustNewServer(c.RestConf, rest.WithCors())

5.测试api

运行rpc和api后。

启动完swagger,我们可以在swagger上面进行api测试了。

访问 http://127.0.0.1:36666/docs 页面,可以直接在页面上进行测试。
在这里插入图片描述
项目源码地址

上一篇: wordpress站群搭建2代码初始化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1847827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法训练记录——Day32】

Day32——贪心算法Ⅱ 1.leetcode122买卖股票的最佳时机II2.leetcode55跳跃游戏3.leetcode45跳跃游戏II4.eetcode1005K次取反后最大化的数组和 目标: leetcode122买卖股票的最佳时机IIleetcode55跳跃游戏leetcode45跳跃游戏IIleetcode1005K次取反后最大化的数组和 1…

数据结构经典面试之链表——C#和C++篇

文章目录 一、链表的基本概念二、链表的操作三、定义链表的节点结构体(C#)四、定义链表的基本操作类(C#)五、创建一个链表实例并进行基本操作演示(C#)六、编写一个自定义链表操作函数(C&#xf…

搭建一个简单的xxljob

数据库表结构: YyJobInfo: public class YyJobInfo {//定时任务idprivate int id;//该定时任务所属的执行器的idprivate int jobGroup;//定时任务描述private String jobDesc;//定时任务添加的时间private Date addTime;//定时任务的更新时间private D…

centos7将jar包制作服务并设置开机服务

为了避免服务器因为一些原因重启导致java服务没启动,我们将jar包制作为service并开机启动 制作过程 在网上找了一些关于java jar包制作开启启动的,大致流程为先做一个xxx.service,放在/etc/systemd/system/目录下,然后执行syste…

ASP.NET Core 6.0 启动方式

启动方式 Visualstudio 2022启动 IIS Express IIS Express 是一个专为开发人员优化的轻型独立版本的 IIS。 借助 IIS Express,可以轻松地使用最新版本的 IIS 开发和测试网站。 控制台版面 直接在浏览器输入监听的地址,监听的是 http://localhost:5137 脚本启动 dotnet run…

交易中的特殊存在

在交易的广袤天空中,有一群特殊的存在——他们,是Eagle Trader。 他们以鹰眼般的洞察力,捕捉市场的微妙变化,每一次决策都如同猎食者般精准;他们运用策略,如同雄鹰在风中翱翔,利用风向&#xf…

Setapp AI 怎么样,值得订阅吗?

Setapp 是一款提供 240 多款 Mac 软件库,可以满足 Mac 和 iOS 用户的各种需求。只需支付一笔订阅费,就可以使用一系列应用程序,这些应用程序可以简化任务、提高创造力和组织工作流程。不过,Setapp 并不只注重应用程序的数量&#…

R语言——类与对象

已知2024年4月23日是星期五,编写一个函数day.in.a.week (x, y,z),参数x和y和z分别代表年月日,判断这一天是否存在(例如,2018年没有2月29日,也没有11月31日),如果不存在,返…

2024097期传足14场胜负前瞻

2024097期售止时间为6月22日(周六)20点30分,敬请留意: 本期14场由欧洲杯、美洲杯、美职联组成,1.5以下赔率2场,1.5-2.0赔率10场,其他场次是平半盘、平盘。本期14场难度中等。以下为基础盘前瞻&a…

针对河南大学数据结构傻逼学堂在线的自动化脚本

首先展示一下我们的答案 {1: [对象], 2: [关系]} {1: [非数值计算], 2: [操作]} {1: [线性表]} [D] [B] [B] [C] [C] {1: [操作]} {1: [数据关系, 数据对象上关系的集合]} {1: [性质相同]} {1: [物理结构]} {1: [存储结构, 操作表示]} [C] [B] [D] [B] [D] [true] [false] [fa…

css文字镂空加描边

css文字镂空加描边 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>文字镂空</title><style>/* 公用样式 */html,body{width: 100%;height: 100%;position: relative;}/* html{overflow-y: scroll;} */*{margi…

(Python)可变类型不可变类型;引用传递值传递;浅拷贝深拷贝

从一段代码开始说事&#xff0c;先上代码&#xff1a; a [[1],[2],[3]] b [[4,5],[6,7],[7,8]] for i,j in zip(a,b):print(i,j)i [9]#i[0] 8j[:2][1,2]print(i, j) print(a) print(b) 运行的结果&#xff1a; [1] [4, 5] [9] [1, 2] [2] [6, 7] [9] [1, 2] [3] [7, 8] …

淘宝扭蛋机小程序:互联网时代下行业的发展动力

近几年&#xff0c;扭蛋机在潮玩市场风靡&#xff0c;与各类IP合作&#xff0c;推出各种新颖有趣的扭蛋商品&#xff0c;吸引了众多的IP粉丝&#xff0c;他们会通过扭蛋机进行抽奖&#xff0c;获得喜欢的商品。 目前&#xff0c;移动应用程序不断升级优化&#xff0c;“互联网…

RGB彩色模型理解与编程实例

一、引言 RGB彩色模型中的R、G和B为三原色&#xff0c;通常R、G和B分别用8位表示&#xff0c;因此24位的RGB 真彩色图像能表示16777216种颜色。在如右图所示RGB彩色立方体可知&#xff0c;任意两种原色混合可以合成一种新的颜色。红&#xff08;1&#xff0c;0&#xff0c;0&a…

番外篇 | YOLOv8算法解析和实战应用:车辆检测 + 车辆追踪 + 行驶速度计算

前言:Hello大家好,我是小哥谈。YOLOv8是ultralytics公司在2023年1月10号开源的,是YOLOv5的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,在还没有开源时就收到了用户的广泛关注。它是一个SOTA模型,建立在以前YOLO版本的成功基础上,并引入了新的功能和改…

mock-前端数据模拟

简介 数据模拟不是开发流程中的必要一环 Json-server 简介&#xff1a; json-server 是一个简单的 Node.js 服务端应用程序&#xff0c;这个工具的主要作用是提供一个模拟的后端服务&#xff0c;可以在前端开发过程中独立于后端进行简单工作。 使用&#xff1a; 1、 安装…

CVPR 2024盛况空前,上海科技大学夺得最佳学生论文奖,惊艳全场

CVPR 2024盛况空前&#xff01;上海科技大学夺得最佳学生论文奖&#xff0c;惊艳全场&#xff01; 会议之眼 快讯 2024 年 CVPR &#xff08;Computer Vision and Pattern Recogntion Conference) 即国际计算机视觉与模式识别会议&#xff0c;于6月17日至21日正在美国西雅图召…

基于强化学习的目标跟踪论文合集

文章目录 2020UAV Maneuvering Target Tracking in Uncertain Environments Based on Deep Reinforcement Learning and Meta-LearningUAV Target Tracking in Urban Environments Using Deep Reinforcement Learning 2021Research on Vehicle Dispatch Problem Based on Kuhn-…

【面试题】风险评估和应急响应的工作流程

风险评估和应急响应是网络安全管理中两个重要的环节。下面分别介绍它们的工作流程&#xff1a; 一、风险评估工作流程&#xff1a; 1.确定评估范围&#xff1a;明确需要评估的信息系统或资产的范围。 2.资产识别&#xff1a;识别并列出所有需要评估的资产&#xff0c;包括硬件…

【自动驾驶】运动底盘状态数据:里程计、IMU、运动学分析、串口通信协议

文章目录 控制器与运动底盘状态数据:里程计、IMU运动学分析与轮子运动学分析公式串口通信控制与反馈通讯协议串口通信反馈上行数据帧解析串口通信控制下行数据帧解析代码实现IMU、里程计数据的获取、解析、计算控制器与运动底盘状态数据:里程计、IMU 控制器需要负责外发底盘…