|
|
syntax = "proto3";
|
|
|
|
|
|
import "google/protobuf/timestamp.proto";
|
|
|
import "gogoproto/gogo.proto";
|
|
|
// import "validate/validate.proto";
|
|
|
import "google/api/annotations.proto";
|
|
|
import "google/protobuf/empty.proto";
|
|
|
|
|
|
package api.v1;
|
|
|
|
|
|
option go_package = "moredoc/api/v1;v1";
|
|
|
option java_multiple_files = true;
|
|
|
option java_package = "api.v1";
|
|
|
|
|
|
// 文章
|
|
|
message Article {
|
|
|
int64 id = 1; // 文章ID
|
|
|
string identifier = 2; // 文章唯一标识
|
|
|
string author = 3; // 文章作者。如果为空,则使用网站名称作为作者
|
|
|
int64 view_count = 4; // 文章浏览次数
|
|
|
string title = 5; // 文章标题
|
|
|
string keywords = 6; // 文章关键字
|
|
|
string description = 7; // 文章描述
|
|
|
string content = 8; // 文章内容
|
|
|
google.protobuf.Timestamp created_at = 9
|
|
|
[ (gogoproto.stdtime) = true ]; // 文章创建时间
|
|
|
google.protobuf.Timestamp updated_at = 10
|
|
|
[ (gogoproto.stdtime) = true ]; // 文章更新时间
|
|
|
}
|
|
|
|
|
|
// 删除文章请求,传入单个或者多个文章ID
|
|
|
message DeleteArticleRequest { repeated int64 id = 1; }
|
|
|
|
|
|
// 根据ID或者文章标识获取文章,二选一
|
|
|
message GetArticleRequest {
|
|
|
int64 id = 1; // 文章ID
|
|
|
string identifier = 2; // 文章唯一标识
|
|
|
}
|
|
|
|
|
|
// 文章列表请求
|
|
|
message ListArticleRequest {
|
|
|
int64 page = 1; // 页码
|
|
|
int64 size = 2; // 每页数量
|
|
|
string wd = 3; // 搜索关键字
|
|
|
repeated string field = 4; // 查询字段
|
|
|
string order = 5; // 排序字段,根据指定的字段倒序排序
|
|
|
}
|
|
|
|
|
|
// 文章列表响应
|
|
|
message ListArticleReply {
|
|
|
int64 total = 1; // 文章总数
|
|
|
repeated Article article = 2; // 文章列表
|
|
|
}
|
|
|
|
|
|
// 文章API服务
|
|
|
service ArticleAPI {
|
|
|
|
|
|
// 创建文章
|
|
|
rpc CreateArticle(Article) returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
post : '/api/v1/article',
|
|
|
body : '*',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 更新文章
|
|
|
rpc UpdateArticle(Article) returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
put : '/api/v1/article',
|
|
|
body : '*',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 删除文章
|
|
|
rpc DeleteArticle(DeleteArticleRequest) returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
delete : '/api/v1/article',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 获取文章
|
|
|
rpc GetArticle(GetArticleRequest) returns (Article) {
|
|
|
option (google.api.http) = {
|
|
|
get : '/api/v1/article',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 文章列表
|
|
|
rpc ListArticle(ListArticleRequest) returns (ListArticleReply) {
|
|
|
option (google.api.http) = {
|
|
|
get : '/api/v1/article/list',
|
|
|
};
|
|
|
}
|
|
|
} |