可以啟動http服務。
我們打開 瀏覽器輸入

http://localhost:8000/helloworld/1

會返回


可以發現樣例運行成功了。

二、樣例api接口閱讀

我們打開使用kratos建立的樣例項目helloworld,
在 greeter.proto文件里有 下面一個路由

get: “/helloworld/{name}”

2.1 修改樣例,新增一個 get 請求

2.1.1 我們打開 greeter.proto文件,對照 SayHello增加一個接口SayHi如下:

// Sends a hi
rpc SayHi (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
get: "/hi/{name}"
};
}

寫好后如下:

2.1.2 執行make api,生產api接口

? make api

輸出:

protoc --proto_path=./api \
--proto_path=./third_party \
--go_out=paths=source_relative:./api \
--go-http_out=paths=source_relative:./api \
--go-grpc_out=paths=source_relative:./api \
--openapi_out=fq_schema_naming=true,default_response=false:. \
api/helloworld/v1/error_reason.proto api/helloworld/v1/greeter.proto

如果執行make api 報錯,比如提示,未安裝 protoc-gen-go: program not found or is not executable,可以在 make api 執行之前,先執行一下 make init 安裝一下kratos需要的依賴和插件。
此時我們可以看 greeter_http.pb.go 里面的代碼,增加SayHi()如下:

2.1.3 實現api接口SayHi()

我們查看 SayHello()接口的實現,發現在 internal/service/greeter.go


那我們實現SayHi()也同樣在這樣文件中。
我們在 SayHello()方法下,寫入如下代碼:

// SayHi implements helloworld.GreeterServer.
func (s *GreeterService) SayHi(ctx context.Context, in *v1.HelloRequest) (*v1.HelloReply, error) {
g, err := s.uc.CreateGreeter(ctx, &biz.Greeter{Hello: in.Name})
if err != nil {
return nil, err
}
return &v1.HelloReply{Message: "hi " + g.Hello}, nil
}

此時顯示如下:

2.1.4 在瀏覽器中訪問接口 http://localhost:8000/hi/1

我們重新編譯一下,

go run ./cmd/helloworld -conf configs/config.yaml

然后在瀏覽器中輸入:http://localhost:8000/hi/1 展示如下:


我們第一個get接口寫成功了。

2.2 修改樣例,新增一個 post 請求

2.2.1 新增一個 Say() proto定義,如下:

// Say a hi
rpc Say (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
post: "/say",
body: "*",
};
}

我們這里主要有兩點修改

  1. post方法,以及api的url
  2. 定義接受的body為 “*”

2.2.2 執行make api,生成api接口

? make api

我們會發現greeter_http.pb.go文件中GreeterHTTPServer中多了一個 Say()

type GreeterHTTPServer interface {
Say(context.Context, *HelloRequest) (*HelloReply, error)
SayHello(context.Context, *HelloRequest) (*HelloReply, error)
SayHi(context.Context, *HelloRequest) (*HelloReply, error)
}

2.2.3 在service中實現api接口Say()

在internal/service/greeter.go中實現 Say()方法,代碼如下:

// Say implements helloworld.GreeterServer.
func (s *GreeterService) Say(ctx context.Context, in *v1.HelloRequest) (*v1.HelloReply, error) {
g, err := s.uc.CreateGreeter(ctx, &biz.Greeter{Hello: in.Name})
if err != nil {
return nil, err
}
return &v1.HelloReply{Message: "say " + g.Hello}, nil
}

2.2.4 請求post接口

此時我們重啟一下一下服務

go run ./cmd/helloworld -conf configs/config.yaml

然后模擬請求一下,成功了。

上一篇:

手把手教你使用大模型API進行高效微調

下一篇:

什么是ROC曲線?
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費