关于go:go微服务框架Kratos-连载三-创建restful接口

更不便的在微信公众号阅读文章能够关注公众号:海生的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语言文章,欢送关注公众号

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理