写点什么

一键生成通用的 web 服务 (gin) 完整项目代码,开发效率至少提升 2 倍

作者:vison
  • 2023-04-20
    广东
  • 本文字数:1880 字

    阅读完需:约 6 分钟

一键生成通用的web服务(gin)完整项目代码,开发效率至少提升2倍

生成 CRUD 的 api 接口代码工具都比较成熟了,CRUD 代码都是标准化固定化的,比较容易生成,对于任意自定义的 api 接口代码,应该不少开发者还是手工编写,这些不是标准化接口代码,应该如何生成呢?


这里的解决方案是使用 protobuf 协议来描述 api 接口,通过插件 protoc-gen-go-gin 生成 web 服务的任意 api 接口代码。


生成通用web服务代码生成任意api接口代码这两个功能已经集成在生成代码工具 sponge 中。



安装完 sponge 后,执行命令打开 UI 界面:


sponge run
复制代码


<br>

快速创建 web 项目

创建 web 服务前先准备一个 proto 文件,proto 文件要求必须包含路由描述信息swagger 描述信息,user.proto 文件内容如下:


syntax = "proto3";
package api.edusys.v1;
import "google/api/annotations.proto";import "protoc-gen-openapiv2/options/annotations.proto";
option go_package = "edusys/api/user/v1;v1";
// 生成*.swagger.json基本信息option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { host: "localhost:8080" base_path: "" info: { title: "user api docs"; version: "v0.0.0"; }; schemes: HTTP; schemes: HTTPS; consumes: "application/json"; produces: "application/json";};
service user { rpc Register(RegisterRequest) returns (RegisterReply) { option (google.api.http) = { post: "/api/v1/register" body: "*" }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { summary: "注册用户", description: "提交信息注册", tags: "user", }; }}
message RegisterRequest { string email = 1; string password = 2;}
message RegisterReply { int64 id = 1;}
复制代码


进入 sponge 的 UI 界面,点击左边菜单栏【protobuf】--> 【Web 类型】-->【创建 web 项目】,填写一些参数就可以生成 web 服务项目代码了,下载源码


web 框架使用 gin,还包含了 swagger 文档、常用的服务治理功能代码,构建部署脚本等,使用什么数据库由自己选择。


生成 web 服务项目代码的详细演示过程请看 B 站视频 https://www.bilibili.com/video/BV1CX4y1D7xj/



切换到 web 目录,执行命令:

# 生成api接口代码,生成注册路由代码,生成swagger文档make docs
# 打开internal/handler/user_logic.go,这是生成的api接口代码,里面有一行提示填写业务逻辑代码的panic代码,在这里填写业务逻辑# api接口的注册路由、输入参数和返回结果的go结构体代码、swagger文档、定义错误码都已经生成了,只需填写业务逻辑代码
# 编译和启动web服务make run
复制代码


在浏览器打开 http://localhost:8080/apis/swagger/index.html 就可以测试 api 接口了。



<br>

批量添加任意 api 接口代码嵌入到 web 服务

在 web 服务目录api/user/v1下的 proto 文件添加登录和登出 2 个 api 接口,也可以在新创建的 proto 文件添加 api 接口,新添加内容如下:


// api 接口的路由和swagger描述  rpc Login(LoginRequest) returns (LoginReply) {    option (google.api.http) = {      post: "/api/v1/login"      body: "*"    };    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {      summary: "登录",      description: "登录",      tags: "user",    };  }
rpc Logout(LogoutRequest) returns (LogoutReply) { option (google.api.http) = { post: "/api/v1/logout" body: "*" }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { summary: "登出", description: "登出", tags: "user", }; }
// --------------------------------------
message LoginRequest { string email = 1; string password = 2;}
message LoginReply { string token = 1;}
message LogoutRequest { string token = 1;}
message LogoutReply {}
复制代码


添加 api 接口的详细演示过程请看 B 站视频 https://www.bilibili.com/video/BV1P54y1g7J9/


切换到 web 目录,执行命令:

# 生成api接口代码,生成注册路由代码,生成swagger文档make proto
# 进入internal/handler/目录,打开带有日期后缀的文件,把新添加的接口代码复制到user_logic.go文件中,去掉panic代码提示代码,并填写业务逻辑
# 清除带有日期后缀文件make clean
# 编译和启动web服务make run
复制代码


在浏览器打开 http://localhost:8080/apis/swagger/index.html 就可以测试新增的 api 接口了。



用户头像

vison

关注

还未添加个人签名 2019-06-29 加入

还未添加个人简介

评论

发布
暂无评论
一键生成通用的web服务(gin)完整项目代码,开发效率至少提升2倍_golang_vison_InfoQ写作社区