网关
来源: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也可以。
042023-05-16
相似问题
关于k8s变量
回答 1
Pod网关启动报错
回答 2
关于AppPod、AppMiddle字段
回答 1
用户部署pod与middleware关联
回答 1
启动网关后访问podapi会500报错
回答 1