如何用一键生成通用的web服务(gin)完整项目代码,让你的开发效率提升10倍

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

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

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

安装sponge地址:https://github.com/zhufuyi/sponge

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

sponge run


快速创建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接口了。


批量添加任意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接口了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容