
Go-Kratos で実装した、ローカルのタスク一覧プロジェクトです。バックエンドのみです。
概要
小さなタスク一覧を作り、Kratos の主な機能を学んで試します。
操作は追加、取得、更新、削除で、主に練習のためのプロジェクトです。
リポジトリ:golist。
初期化
Kratos で初期化し、依存を取得します。
kratos new golist
go mod tidy
API の定義とコード生成
protobuf で RPC と HTTP の API を定義し、コードを生成します。
注釈で HTTP/JSON と gRPC の対応を指定します。
生成ツールが必要とする Go のバージョンを確認します。
新しい API を追加する
kratos proto add で、指定した場所に proto を追加します。vx のディレクトリで API の版を区別し、この例は v1 です。
kratos proto add api/golist/v1/todo.proto
生成した proto は空ではなくひな型なので、自分のサービスに合わせて変更します。
proto のひな型
syntax = "proto3";
package api.golist.v1;
option go_package = "golist/api/golist/v1;v1";
option java_multiple_files = true;
option java_package = "api.golist.v1";
service Todo {
rpc CreateTodo (CreateTodoRequest) returns (CreateTodoReply);
rpc UpdateTodo (UpdateTodoRequest) returns (UpdateTodoReply);
rpc DeleteTodo (DeleteTodoRequest) returns (DeleteTodoReply);
rpc GetTodo (GetTodoRequest) returns (GetTodoReply);
rpc ListTodo (ListTodoRequest) returns (ListTodoReply);
}
message CreateTodoRequest {}
message CreateTodoReply {}
message UpdateTodoRequest {}
message UpdateTodoReply {}
message DeleteTodoRequest {}
message DeleteTodoReply {}
message GetTodoRequest {}
message GetTodoReply {}
message ListTodoRequest {}
message ListTodoReply {}
todo の proto を定義する
syntax = "proto3";
package api.golist.v1;
import "google/api/annotations.proto";
option go_package = "golist/api/golist/v1;v1";
option java_multiple_files = true;
option java_package = "api.golist.v1";
service Todo {
rpc CreateTodo (CreateTodoRequest) returns (CreateTodoReply) {
option (google.api.http) = {
post: "/v1/todo",
body: "*"
};
};
rpc UpdateTodo (UpdateTodoRequest) returns (UpdateTodoReply) {
option (google.api.http) = {
put: "/v1/todo/{id}",
body: "*"
};
};
rpc DeleteTodo (DeleteTodoRequest) returns (DeleteTodoReply) {
option (google.api.http) = {
delete: "/v1/todo/{id}"
};
};
rpc GetTodo (GetTodoRequest) returns (GetTodoReply) {
option (google.api.http) = {
get: "/v1/todo/{id}",
};
};
rpc ListTodo (ListTodoRequest) returns (ListTodoReply) {
option (google.api.http) = {
get: "/v1/todos",
};
};
}
message CreateTodoRequest {
string title = 1;
}
message CreateTodoReply {
int64 id = 1;
string title = 2;
bool status = 3;
}
message UpdateTodoRequest {
int64 id = 1;
string title = 2;
bool status = 3;
}
message UpdateTodoReply {}
message DeleteTodoRequest {
int64 id = 1;
}
message DeleteTodoReply {}
message GetTodoRequest {
int64 id = 1;
}
message GetTodoReply {
int64 id = 1;
string title = 2;
bool status = 3;
}
message ListTodoRequest {
}
message todo {
int64 id = 1;
string title = 2;
bool status = 3;
}
message ListTodoReply {
repeated todo data = 1;
}
protobuf コードを生成する
kratos proto client api/golist/v1/todo.proto
サーバーのコードを生成する
kratos proto server api/golist/v1/todo.proto -t internal/service
構成を調整する
初期の Kratos には業務と異なる例があるので、helloworld を自分のサービスの実装に置き換えます。
次の図は、Kratos のプロジェクト構成を詳しく示しています。

機能の実装
実装はこちらです:golist。
create


get


getAll

update



delete
