网关

来源:5-23 统一网关的说明讲解

慕瓜9063200

2023-05-02

老师你好,在课程中使用了一个统一网关,每个服务都有一个API层和服务层,例如pod、podApi那么用户就可以通过发送htttp请求到统一网关,统一网关会将用户的http请求转换为grpc请求,是这样的对吗?
现在我看到了其他的写法,课程中写法是这样的:
proto文件:

syntax = "proto3";

// 声明protobuf中的包名
package pod;

// 声明生成的go代码的导入路径
option go_package = "./proto/pod;pod";

// 对外暴露的服务
service Pod {
  rpc AddPod(RPodInfo) returns (ResponseMsg) {}
  ......
}

// RPodInfo消息指定的字段
message RPodInfo {
  int64 id = 1;
  string pod_name = 2;
  string pod_namespace = 3;
  string pod_team_id = 4;
  float pod_cpu_min = 5;
  float pod_cpu_max = 6;
  int32 pod_replicas = 7;
  float pod_memory_min = 8;
  float pod_memory_max = 9;
  repeated PodPort pod_port = 10;
  repeated PodEnv pod_env = 11;
  string pod_pull_policy = 12;
  string pod_restart = 13;
  string pod_type = 14;
  string pod_image = 15;
}
message PodPort {
  int64 pod_id = 1;
  int32 container_port = 2;
  string protocol = 3;
}
message PodEnv {
  int64 pod_id = 1;
  string env_key = 2;
  string env_value = 3;
}
message ResponseMsg {
  string msg = 1;
}


API层:

// podApi/AddPod 请求会调用go.micro.api.podApi 服务的podApi.AddPod 方法
func (p *PodApi) AddPod(ctx context.Context, request *podApi.Request, response *podApi.Response) error {
	fmt.Println("接受到 podApi.AddPod请求")
	......
	return nil
}

服务层:

func (p *PodHandler) AddPod(ctx context.Context, request *pod.RPodInfo, response *pod.ResponseMsg) error {
	......
	return nil
}

现在我换一种写法proto文件改为:

// 指定proto语法,不写默认proto2

syntax = "proto3";

// 声明protobuf中的包名
package pod;

// 声明生成的go代码的导入路径
option go_package = "./proto/pod;pod";
// 导入google/api/annotations.proto
import "google/api/annotations.proto";
// 对外暴露的服务
service Pod {
  rpc AddPod(RPodInfo) returns (ResponseMsg) {
    // 这里添加了google.api.http注释
    option (google.api.http) = {
      post: "/api/podApi/AddPod"
      body: "*"
    };
  }
	......
}

改了之后是不是就不需要API层PodApi了?

写回答

1回答

Cap

2023-05-03

grpc也是可以直接对外的,如果自己该些api也可以。

0
4
Cap
回复
慕瓜9063200
你这样做就没有分层的概念了,就混在一起了。
2023-05-16
共4条回复

Go 开发者的涨薪通道,自主开发 PaaS 平台核心功能

云原生专家带来稀缺的 PaaS 平台实战,带你直击核心业务+技术

400 学习 · 169 问题

查看课程