For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
预约演示登录免费开始
  • 概览
    • 什么是 API 定义?
    • 项目结构
      • 概览
      • 覆盖(Overrides)
      • 身份验证
      • 服务器
      • 同步您的规范
      • gRPC generators.yml 参考
Checking status...
SOC2Soc 2 Type II
© 2026 Fern • Birch Solutions, Inc., a Postman company

Documentation

SDKsDocsAsk FernCLI Reference

API Definitions

OpenAPIAsyncAPIOpenRPCgRPC

Resources

BlogSupportPricing

Company

Brand KitPrivacy PolicyTerms of Service
LogoLogo
预约演示登录免费开始
在本页
  • 设置您的 fern 文件夹
gRPC

什么是 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
1syntax = "proto3";
2
3package userservice.v1;
4
5// User service for managing user accounts
6service UserService {
7 // Create a new user account
8 rpc CreateUser(CreateUserRequest) returns (User);
9
10 // Get user by ID
11 rpc GetUser(GetUserRequest) returns (User);
12
13 // List users with pagination
14 rpc ListUsers(ListUsersRequest) returns (ListUsersResponse);
15
16 // Update user information
17 rpc UpdateUser(UpdateUserRequest) returns (User);
18
19 // Delete a user account
20 rpc DeleteUser(DeleteUserRequest) returns (google.protobuf.Empty);
21
22 // Stream user events (server streaming)
23 rpc StreamUserEvents(StreamUserEventsRequest) returns (stream UserEvent);
24
25 // Upload user data (client streaming)
26 rpc UploadUserData(stream UploadUserDataRequest) returns (UploadUserDataResponse);
27
28 // Real-time chat (bidirectional streaming)
29 rpc Chat(stream ChatMessage) returns (stream ChatMessage);
30}
31
32// Messages for user operations
33message User {
34 string id = 1;
35 string email = 2;
36 string name = 3;
37 int32 age = 4;
38 google.protobuf.Timestamp created_at = 5;
39 UserStatus status = 6;
40}
41
42message CreateUserRequest {
43 string email = 1;
44 string name = 2;
45 int32 age = 3;
46}
47
48message GetUserRequest {
49 string id = 1;
50}
51
52message ListUsersRequest {
53 int32 page_size = 1;
54 string page_token = 2;
55 string filter = 3;
56}
57
58message ListUsersResponse {
59 repeated User users = 1;
60 string next_page_token = 2;
61 int32 total_count = 3;
62}
63
64message UpdateUserRequest {
65 string id = 1;
66 User user = 2;
67 google.protobuf.FieldMask update_mask = 3;
68}
69
70message DeleteUserRequest {
71 string id = 1;
72}
73
74message StreamUserEventsRequest {
75 string user_id = 1;
76 repeated UserEventType event_types = 2;
77}
78
79message UserEvent {
80 string id = 1;
81 string user_id = 2;
82 UserEventType type = 3;
83 google.protobuf.Timestamp timestamp = 4;
84 google.protobuf.Any data = 5;
85}
86
87message UploadUserDataRequest {
88 oneof data {
89 UserDataChunk chunk = 1;
90 UserDataMetadata metadata = 2;
91 }
92}
93
94message UserDataChunk {
95 bytes data = 1;
96 int64 offset = 2;
97}
98
99message UserDataMetadata {
100 string filename = 1;
101 int64 total_size = 2;
102 string content_type = 3;
103}
104
105message UploadUserDataResponse {
106 string file_id = 1;
107 int64 bytes_uploaded = 2;
108}
109
110message ChatMessage {
111 string id = 1;
112 string user_id = 2;
113 string room_id = 3;
114 string content = 4;
115 google.protobuf.Timestamp timestamp = 5;
116 ChatMessageType type = 6;
117}
118
119// Enums
120enum UserStatus {
121 USER_STATUS_UNSPECIFIED = 0;
122 USER_STATUS_ACTIVE = 1;
123 USER_STATUS_INACTIVE = 2;
124 USER_STATUS_SUSPENDED = 3;
125}
126
127enum UserEventType {
128 USER_EVENT_TYPE_UNSPECIFIED = 0;
129 USER_EVENT_TYPE_CREATED = 1;
130 USER_EVENT_TYPE_UPDATED = 2;
131 USER_EVENT_TYPE_DELETED = 3;
132 USER_EVENT_TYPE_LOGIN = 4;
133 USER_EVENT_TYPE_LOGOUT = 5;
134}
135
136enum ChatMessageType {
137 CHAT_MESSAGE_TYPE_UNSPECIFIED = 0;
138 CHAT_MESSAGE_TYPE_TEXT = 1;
139 CHAT_MESSAGE_TYPE_IMAGE = 2;
140 CHAT_MESSAGE_TYPE_FILE = 3;
141 CHAT_MESSAGE_TYPE_SYSTEM = 4;
142}

设置您的 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
1{
2 "organization": "your-organization",
3 "version": "5.12.0"
4}
fern/
├─ fern.config.json
└─ proto/
├─ user_service.proto
└─ common.proto
4

创建 generators.yml 文件

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

generators.yml
1# Your API definition
2api:
3 specs:
4 - proto:
5 # Path up to where package starts (e.g., for package userservice.v1)
6 root: ../user-service/proto
7 # Omit to generate docs for entire root folder
8 target: ../user-service/proto/data/v1/user_service.proto
9groups:
10 external:
11 generators:
12 # 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