ข้ามไปยังเนื้อหา

Protocol Buffers

ทุกอย่างใน gRPC เริ่มจากไฟล์ .proto และไฟล์นั้นเขียนด้วย Protocol Buffers ก่อนที่จะออกแบบ service และ RPC method ได้ คุณต้องคล่องกับหน่วยพื้นฐานที่ใช้ก่อน นั่นคือ message

โมดูลนี้ว่าด้วย protobuf ในฐานะ schema language — วิธี model ข้อมูลให้แม่นยำ และวิธีออกแบบให้ schema เติบโตได้เป็นปี ๆ โดยไม่ทำให้ client ที่ปล่อยไปแล้วพัง

บทเรียนสิ่งที่คุณจะได้เรียนรู้
Messages & Fieldssyntax ของ message และทำไมทุก field ต้องมี number ไม่ใช่แค่ชื่อ
Scalar Types & Defaultstype พื้นฐาน, default value ของ proto3 และกับดักเรื่อง presence ของ optional
Enums, Nested & oneofenum (พร้อมกฎ zero value), การ nest และ field ที่เลือกได้อย่างเดียว
Repeated, Maps & Well-Knownlist, map แบบ key/value และ standard library ของ google.protobuf
Evolving Schemasกฎที่ทำให้ schema เปลี่ยนได้อย่างปลอดภัย — และกฎที่ทำให้ client พัง

message ของ protobuf ดูเรียบง่ายจนหลอกตา — แค่ field ที่มี type และ number ไม่กี่ตัว แต่ number, default และกฎการ evolve เหล่านั้นแหละคือจุดที่ระบบจริงมักเจอปัญหา

flowchart TB
  msg["ออกแบบ message
(field + number)"] --> types["เลือก type & default"]
  types --> evolve["evolve schema
(add / reserve / ห้าม reuse)"]
  evolve --> safe["client ทำงานต่อได้
ข้าม version"]
การตัดสินใจเรื่อง schema ที่โมดูลนี้ทำให้ปลอดภัย

ถ้าวาง field number และกฎการ evolve ให้ถูกตั้งแต่แรก API ของคุณจะเพิ่ม feature ได้เป็นปี ๆ โดยไม่มี breaking change แต่ถ้าวางผิด คุณจะติดกับปัญหา versioning ตั้งแต่ครั้งแรกที่ message ต้องโตขึ้น

หน่วยพื้นฐานที่โมดูลนี้โฟกัสคืออะไร?
ทำไม schema evolution ถึงต้องใส่ใจเป็นพิเศษ?
ควรมอง message ใน .proto อย่างไร?