跳到导航

什么是 gRPC?

以 Markdown 格式查看
企业功能

此功能仅适用于企业计划。如需开始使用,请联系 support@buildwithfern.com

Fern 目前仅支持为 .NET/C# 生成 gRPC SDK。Protobuf 规范可用于所有语言的文档生成。提交问题请求支持其他语言。

gRPC 是一个现代的、开源的、高性能的远程过程调用(RPC)框架,可以在任何环境中运行。它使用 Protocol Buffers (protobuf) 作为接口定义语言,并支持多种编程语言。 Fern 兼容 gRPC 服务,可以从您的 .proto 文件生成 SDK 和文档。

要查看实际示例,请参见 gRPC 演示文档 及其 GitHub 仓库

以下是一个 gRPC 服务定义的示例:

user_service.proto
syntax = "proto3";
package userservice.v1;
// User service for managing user accounts
service UserService {
// Create a new user account
rpc CreateUser(CreateUserRequest) returns (User);
// Get user by ID
rpc GetUser(GetUserRequest) returns (User);
// List users with pagination
rpc ListUsers(ListUsersRequest) returns (ListUsersResponse);
// Update user information
rpc UpdateUser(UpdateUserRequest) returns (User);
// Delete a user account
rpc DeleteUser(DeleteUserRequest) returns (google.protobuf.Empty);
// Stream user events (server streaming)
rpc StreamUserEvents(StreamUserEventsRequest) returns (stream UserEvent);
// Upload user data (client streaming)
rpc UploadUserData(stream UploadUserDataRequest) returns (UploadUserDataResponse);
// Real-time chat (bidirectional streaming)
rpc Chat(stream ChatMessage) returns (stream ChatMessage);
}
// Messages for user operations
message User {
string id = 1;
string email = 2;
string name = 3;
int32 age = 4;
google.protobuf.Timestamp created_at = 5;
UserStatus status = 6;
}
message CreateUserRequest {
string email = 1;
string name = 2;
int32 age = 3;
}
message GetUserRequest {
string id = 1;
}
message ListUsersRequest {
int32 page_size = 1;
string page_token = 2;
string filter = 3;
}
message ListUsersResponse {
repeated User users = 1;
string next_page_token = 2;
int32 total_count = 3;
}
message UpdateUserRequest {
string id = 1;
User user = 2;
google.protobuf.FieldMask update_mask = 3;
}
message DeleteUserRequest {
string id = 1;
}
message StreamUserEventsRequest {
string user_id = 1;
repeated UserEventType event_types = 2;
}
message UserEvent {
string id = 1;
string user_id = 2;
UserEventType type = 3;
google.protobuf.Timestamp timestamp = 4;
google.protobuf.Any data = 5;
}
message UploadUserDataRequest {
oneof data {
UserDataChunk chunk = 1;
UserDataMetadata metadata = 2;
}
}
message UserDataChunk {
bytes data = 1;
int64 offset = 2;
}
message UserDataMetadata {
string filename = 1;
int64 total_size = 2;
string content_type = 3;
}
message UploadUserDataResponse {
string file_id = 1;
int64 bytes_uploaded = 2;
}
message ChatMessage {
string id = 1;
string user_id = 2;
string room_id = 3;
string content = 4;
google.protobuf.Timestamp timestamp = 5;
ChatMessageType type = 6;
}
// Enums
enum UserStatus {
USER_STATUS_UNSPECIFIED = 0;
USER_STATUS_ACTIVE = 1;
USER_STATUS_INACTIVE = 2;
USER_STATUS_SUSPENDED = 3;
}
enum UserEventType {
USER_EVENT_TYPE_UNSPECIFIED = 0;
USER_EVENT_TYPE_CREATED = 1;
USER_EVENT_TYPE_UPDATED = 2;
USER_EVENT_TYPE_DELETED = 3;
USER_EVENT_TYPE_LOGIN = 4;
USER_EVENT_TYPE_LOGOUT = 5;
}
enum ChatMessageType {
CHAT_MESSAGE_TYPE_UNSPECIFIED = 0;
CHAT_MESSAGE_TYPE_TEXT = 1;
CHAT_MESSAGE_TYPE_IMAGE = 2;
CHAT_MESSAGE_TYPE_FILE = 3;
CHAT_MESSAGE_TYPE_SYSTEM = 4;
}

设置您的 fern 文件夹

1

创建您的 fern 目录

在您的项目根目录中创建一个 fern/ 文件夹。

fern/
2

添加您的 gRPC 服务

将您的 gRPC 文件添加到 fern 目录中。您可以将其放在名为 proto 的子文件夹中,或者直接放在 fern 目录中。

fern/
└─ proto/
├─ user_service.proto
└─ common.proto
3

创建 fern.config.json 文件

在您的 fern 目录中添加一个 fern.config.json 文件,其中列出您的组织和当前版本的 Fern CLI:

fern.config.json
{
"organization": "your-organization",
"version": "5.23.3"
}
fern/
├─ fern.config.json
└─ proto/
├─ user_service.proto
└─ common.proto
4

创建 generators.yml 文件

在您的 fern 目录中创建一个 generators.yml 文件,并添加对您的 gRPC proto 文件的引用。请参见 gRPC generators.yml 参考以获取完整的配置选项。

generators.yml
# Your API definition
api:
specs:
- proto:
# Path up to where package starts (e.g., for package userservice.v1)
root: ../user-service/proto
# Omit to generate docs for entire root folder
target: ../user-service/proto/data/v1/user_service.proto
groups:
external:
generators:
# Your C# generator configuration here, if relevant

如果您想要本地编译 .proto 文件 (local-generation: true),您必须在您的机器上或在您的 CI/CD 环境中安装 buf

您的最终目录结构:

fern/
├─ fern.config.json
├─ generators.yml
└─ proto/
├─ user_service.proto
└─ common.proto