CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
gRPC 入门/课时/Protocol Buffers
RawBlame
课时目录12 节

gRPC 入门

  1. 01gRPC 是什么
  2. 02Protocol Buffers
  3. 03代码生成
  4. 04Java 服务端
  5. 05Java 客户端
  6. 06流式 RPC
  7. 07Spring gRPC 集成
  8. 08状态与错误
  9. 09gRPC-Gateway
  10. 10gRPC vs REST
  11. 11TLS 与安全
  12. 12综合练习

Protocol Buffers

.proto 语法、message、service 定义。

35 分钟

Protocol Buffers

Protocol Buffers(Protobuf) 是 gRPC 的 IDL 与序列化格式:用 .proto 定义 message 与 service,编译器生成各语言类型。契约先于实现,适合微服务协作。

学习目标

  • 编写 message、enum、service 基本语法
  • 理解 field number、optional/repeated 规则
  • 为 CodeRoadMap lab 定义 TrackService 契约(不改动 REST DTO)

核心内容

最小 .proto 示例

src/main/proto/track.proto:

syntax = "proto3";

package coderoadmap.track.v1;

option java_package = "com.coderoadmap.track.v1";
option java_multiple_files = true;

message Track {
  string slug = 1;
  string title = 2;
  string level = 3;
}

message GetTrackRequest {
  string slug = 1;
}

message GetTrackResponse {
  Track track = 1;
}

service TrackService {
  rpc GetTrack(GetTrackRequest) returns (GetTrackResponse);
  rpc ListTracks(ListTracksRequest) returns (ListTracksResponse);
}

message ListTracksRequest {}
message ListTracksResponse {
  repeated Track tracks = 1;
}

与 REST GET /tracks/{slug} 语义对齐,但 wire 格式是二进制,浏览器不能直接消费——故生产仍 REST。

语法要点

概念说明
= 1 field numberwire 标识,不可复用已废弃编号
repeated列表,等价 JSON 数组
optionalproto3 显式可选字段
package命名空间,防冲突

.proto 是 单一事实来源;Java 实体(spring-boot-essentials JPA)在 Service 层做映射,勿让 JPA 注解污染 .proto。

与 OpenAPI / GraphQL 对照

  • REST:OpenAPI 描述 JSON 形状(本站 /tracks)
  • GraphQL:SDL Schema(gql-schema)
  • gRPC:.proto + protoc 生成 stub

三者可描述同一 Track,但 CodeRoadMap 权威对外契约是 REST;gRPC .proto 仅 lab 微服务间使用。

练习

  • 为 增加 message(、、)
Lesson
slug
title
order
  • 在 TrackService 增加 ListLessons RPC
  • 对照 TrackController 的 JSON 字段,检查 proto 是否遗漏
  • 小结

    Protobuf = 强类型契约 + 紧凑二进制;先写 .proto 再生成 Java。 下一课 protoc 与代码生成。

    加载本节练习…
    ← 上一课gRPC 是什么下一课 →代码生成