请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

网关

老师你好,在课程中使用了一个统一网关,每个服务都有一个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了?

正在回答 回答被采纳积分+3

1回答

Cap 2023-05-03 15:24:48

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

0 回复 有任何疑惑可以回复我~
  • 提问者 慕瓜9063200 #1
    没明白,我想问的是课程里面给每个服务都添加了API层,如果我直接在服务层proto添加了google.api.http注释,是不是就不需要podAPI、svcApi、routeApi等等这些API层了
    回复 有任何疑惑可以回复我~ 2023-05-03 16:30:49
  • Cap 回复 提问者 慕瓜9063200 #2
    如果这样做的话可以直接把grpc开放给公网使用
    回复 有任何疑惑可以回复我~ 2023-05-04 11:58:11
  • 提问者 慕瓜9063200 回复 Cap #3
    没听懂,如果我直接在服务层proto添加了google.api.http注释,是不是就不需要podAPI、svcApi、routeApi等等这些API层了
    回复 有任何疑惑可以回复我~ 2023-05-10 20:32:04
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号