共计 2665 个字符,预计需要花费 7 分钟才能阅读完成。
更不便的在微信公众号阅读文章能够关注公众号:海生的 go 花园
在上一节文章里 go 微服务框架 Kratos (连载二):定义 api 接口以及实现 咱们学会了 定义以及实现 kratos 的 api 办法
本章节,咱们学习如何定义一个 创立一个本人的 restful 接口。
一、创立 user 的 restful 接口 proto 文件
在官网文档 https://go-kratos.dev/docs/co… 外面,介绍了,如何创立一个 api。
咱们这里生成一个 user.proto,应用:
// 生成 proto 文件模版
kratos proto add api/helloworld/v1/user.proto
咱们发现在 api/helloworld/v1 文件夹里,生成了一份 user.proto 文件
生成了 user 的增删改查,接口
CreateUser() 示意增
DeleteUser() 示意删
UpdateUser() 示意批改
GetUser() 查问一条
ListUser() 查问多条
二、批改 proto 文件,定义 restful 路由
咱们先引入 proto 的 http 的类库
import "google/api/annotations.proto";
在 user.proto 文件,引入下面的库
2.1 批改 CreateUser() 的 http api 路由
咱们把源码的
rpc CreateUser (CreateUserRequest) returns (CreateUserReply);
批改如下:
rpc CreateUser (CreateUserRequest) returns (CreateUserReply){option (google.api.http) = {
post: "/user",
body: "*",
};
};
2.2 批改 DeleteUser() 的 http api 路由
咱们把源码的
rpc DeleteUser (DeleteUserRequest) returns (DeleteUserReply);
批改如下:
rpc DeleteUser (DeleteUserRequest) returns (DeleteUserReply){option (google.api.http) = {delete: "/user/{id}",
};
};
因为这里承受了 id 参数,所以咱们须要定义下 DeleteUserRequest
把源码的
message DeleteUserRequest {}
批改如下:
message DeleteUserRequest {int64 id = 1;}
2.3 批改 UpdateUser() 的 http api 路由
咱们把源码的
rpc UpdateUser (UpdateUserRequest) returns (UpdateUserReply);
批改如下:
rpc UpdateUser (UpdateUserRequest) returns (UpdateUserReply){option (google.api.http) = {put: "/user/{id}",
body: "*",
};
};
因为这里承受了 id 参数,所以咱们须要定义下 UpdateUserRequest
把源码的
message UpdateUserRequest {}
批改如下:
message UpdateUserRequest {int64 id = 1;}
2.4 批改 GetUser() 的 http api 路由
咱们把源码的
rpc GetUser (GetUserRequest) returns (GetUserReply)
批改如下:
rpc GetUser (GetUserRequest) returns (GetUserReply){option (google.api.http) = {get: "/user/{id}",
body: "*",
};
};
因为这里承受了 id 参数,所以咱们须要定义下 GetUserRequest
把源码的
message GetUserRequest {}
批改如下:
message GetUserRequest {int64 id = 1;}
2.5 批改 ListUser() 的 http api 路由
咱们把源码的
rpc ListUser (ListUserRequest) returns (ListUserReply)
批改如下:
rpc ListUser (ListUserRequest) returns (ListUserReply){option (google.api.http) = {get: "/users",};
};
三、执行 make api,生成对应的 api 接口
➜ make api
咱们发现在 api/helloworld/v1 目录下,生成了好几个文件如下:
user.pb.go
user_grpc.pb.go
user_http.pb.go
咱们关上 user_http.pb.go 看一下 api 须要实现的接口
type UserHTTPServer interface {CreateUser(context.Context, *CreateUserRequest) (*CreateUserReply, error)
DeleteUser(context.Context, *DeleteUserRequest) (*DeleteUserReply, error)
GetUser(context.Context, *GetUserRequest) (*GetUserReply, error)
ListUser(context.Context, *ListUserRequest) (*ListUserReply, error)
UpdateUser(context.Context, *UpdateUserRequest) (*UpdateUserReply, error)
}
func RegisterUserHTTPServer(s *http.Server, srv UserHTTPServer) {r := s.Route("/")
r.POST("/user", _User_CreateUser0_HTTP_Handler(srv))
r.PUT("/user/{id}", _User_UpdateUser0_HTTP_Handler(srv))
r.DELETE("/user/{id}", _User_DeleteUser0_HTTP_Handler(srv))
r.GET("/user/{id}", _User_GetUser0_HTTP_Handler(srv))
r.GET("/users", _User_ListUser0_HTTP_Handler(srv))
}
浏览更多其余优质 go 语言文章,欢送关注公众号
正文完