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

海鸥技术下午茶-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.mfbz.cn/a/730854.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vmware workstation下centos7屏幕切换及大小调整

虚拟机版本:vmware workstation15.5.2 操作系统版本:centos 7.9.2009 一 图形界面和命令行界面切换方法 在CentOS 7中,可以使用以下方法切换界面: 1 使用快捷键切换:按下Ctrl Alt F2(或F3&#xff0…

Vue70-路由的几个注意点

一、路由组件和一般组件 1-1、一般组件 1-2、路由组件 不用写组件标签。靠路由规则匹配出来,由路由器渲染出来的组件。 1-3、注意点1 一般组件和路由组件,一般放在不同的文件夹,便于管理。 一般组件放在components文件夹下。 1-4、注意点…

【SpringBoot】SpringBoot:打造现代化微服务架构

文章目录 引言微服务架构概述什么是微服务架构微服务的优势 使用SpringBoot构建微服务创建SpringBoot微服务项目示例:创建订单服务 配置数据库创建实体类和Repository创建服务层和控制器 微服务间通信使用RestTemplate进行同步通信示例:调用用户服务 使用…

用智能插件(Fitten Code: Faster and Better AI Assistant)再次修改vue3 <script setup>留言板

<template><div><button class"openForm" click"openForm" v-if"!formVisible">编辑</button><button click"closeForm" v-if"formVisible">取消编辑</button><hr /><formv-i…

手把手教你java CPU飙升300%如何优化

背景 今天有个项目运行一段时间后&#xff0c;cpu老是不堪负载。 排查 top 命令 TOP 命令 top t 按cpu 排序 top m 按内存使用率排序 从上面看很快看出是 pid 4338 这个进程资源消耗很高。 top -Hp pid top -Hp 4338 找到对应线程消耗的资源shftp cpu占用进行排序&#xf…

优维“态势感知监控”产品:像“上帝”一样掌控应用系统

什么是态势感知&#xff1f; 态势感知是一种基于环境的、动态、整体地洞悉全网安全风险的能力。它以安全大数据为基础&#xff0c;从全局视角对全网安全威胁进行发现识别、理解分析展示和响应处置&#xff0c;并预测发展趋势&#xff0c;为后续网络安全的相关决策与行动提供数据…

Redis 7.x 系列【4】命令手册

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 说明2. 命令手册2.1 Generic2.2 数据类型2.2.1 String2.2.2 Hash2.2.3 List2.2.4 S…

JavaScript--函数的参数列表以及arguments的用法

函数声明时&#xff0c;参数的问题 即使函数在定义时没有显示声明任何参数&#xff0c;你仍然可以在调用该函数时传递参数。 这是因为 JavaScript 函数内部有一个隐含的 arguments 对象&#xff0c;它包含了所有传递给函数的参数。 示例 我们来通过一些示例代码来更清楚地说…

拒绝零散碎片, 一文理清MySQL的各种锁

系列文章目录 学习MySQL先有全局观&#xff0c;细说其发展历程及特点 Mysql常用操作&#xff0c;谈谈排序与分页 拒绝零散碎片&#xff0c; 一文理清MySQL的各种锁&#xff08;收藏向&#xff09; 系列文章目录一、MySQL的锁指什么二、排他与共享三、全局锁&#xff08;Global…

PhotoShop批量生成存储jpg

1、说明 根据之前自动批量生成psd格式的文件。打印一般都是jpg格式的&#xff0c;那如果将这些psd的文件&#xff0c;生成jpg&#xff0c;本文采用ps的动作 2、生成动作 点击窗口-动作 录屏存储jpg动作 3、根据动作生成 选择相应动作之后选择需要处理的文件夹

Aidlux 1.4 部署Nextcloud 2024.6实录 没成功

Aidux阉割版Debain10&#xff0c;坑很多&#xff0c;比如找不到实际的系统日志&#xff0c;有知道的大神吗&#xff1f; 1 Apache2安装 # 测试Apache2 sudo apt update && sudo apt upgrade sudo apt install apache2 -y80端口疑似被禁止只能换端口 rootlocalhost:/…

定制化智能硬件解决方案:为您的业务量身打造的未来之选

在这个数字化转型的时代&#xff0c;企业必须适应快速变化的技术需求和激烈的市场竞争。定制化智能硬件解决方案提供了一种独特的方法&#xff0c;使企业能够通过优化流程和提高效率来满足其特定的业务需求。本文将探讨定制化智能硬件如何助力企业实现卓越性能和创新&#xff0…

mongosh常用命令详解及如何开启MongoDB身份验证

目录 Mongosh常用命令介绍 连接到MongoDB实例 基本命令 查看当前数据库 切换数据库 查看所有数据库 查看当前数据库中的集合 CRUD操作 插入文档 查询文档 更新文档 删除文档 替换文档 索引操作 创建索引 查看索引 删除索引 聚合操作 数据库管理 创建用户 …

计算机毕业设计Python+Vue.js知识图谱音乐推荐系统 音乐爬虫可视化 音乐数据分析 大数据毕设 大数据毕业设计 机器学习 深度学习 人工智能

开发技术 协同过滤算法、机器学习、LSTM、vue.js、echarts、django、Python、MySQL 创新点协同过滤推荐算法、爬虫、数据可视化、LSTM情感分析、短信、身份证识别 补充说明 适合大数据毕业设计、数据分析、爬虫类计算机毕业设计 介绍 音乐数据的爬取&#xff1a;爬取歌曲、…

(项目实战)业务场景中学透RocketMQ5.0-事务消息在预付卡系统中的应用

1 什么是事务消息 RocketMQ中事务消息主要是解决分布式场景下各业务系统事务一致性问题&#xff0c;常见的分布式事务解决方案有传统XA事务方案、TCC、本地消息表、MQ事务等。今天我们基于RocketMQ事务消息解决预付卡系统资金账户子系统和会员积分子系统、短信子系统分布式事务…

JMeter的基本使用与性能测试,完整入门篇保姆式教程

Jmeter 的简介 JMeter是一个纯Java编写的开源软件&#xff0c;主要用于进行性能测试和功能测试。它支持测试的应用/服务/协议包括Web (HTTP, HTTPS)、SOAP/REST Webservices、FTP、Database via JDBC等。我们最常使用的是HTTP和HTTPS协议。 Jmeter主要组件 线程组&#xff08…

永辉超市:胖东来爆改,成色几何?

单日业绩暴涨14倍。来&#xff0c;看看&#xff0c;这是被胖东来爆改后重新开业后的门店&#xff0c; 不出意外的流量爆炸。胖东来爆改&#xff0c;真是解决实体商超困境的灵丹妙药吗&#xff1f; 今天我们聊聊——永辉超市 最近两年实体商超日子都不好过&#xff0c;去年13家…

在Worpress增加网站的二级目录,并转向到站外网站

在WordPress中&#xff0c;你可以通过添加自定义重定向来实现将某个二级目录&#xff08;例如 www.example.com/subdir&#xff09;重定向到站外网站。可以通过以下几种方法来实现&#xff1a; 方法一&#xff1a;使用 .htaccess 文件 如果你的服务器使用Apache&#xff0c;你…

使用上海云盾 CDN 和 CloudFlare 后 Nginx、 WordPress、 Typecho 获取访客真实 IP 方法

最近因为被 DDoS/CC 攻击的厉害,明月就临时的迁移了服务器,原来的服务器就空置下来了,让明月有时间对服务器进行了重置重新部署安装生产环境。因为站点同时使用了上海云盾和 CloudFlare(具体思路可以参考【国内网站使用国外 CloudFlare CDN 的思路分享】一文)两个 CDN 服务…

Java数据类型与运算符

1. 变量和类型 变量指的是程序运行时可变的量&#xff0c;相当于开辟一块空间来保存一些数据。 类型则是对变量的种类进行了划分&#xff0c;不同类型的变量具有不同的特性。 1.1 整型变量&#xff08;重点&#xff09; 基本语法格式&#xff1a; int 变量名 初始值;代码示…