สองฝั่งถือ schema คนละใบและไม่เคยขึ้นพร้อมกัน คำถามคือการแก้แต่ละแบบทำอะไรกับ byte
protobuf ไม่ส่งชื่อ field ไปบนสาย สิ่งที่ส่งคือหมายเลขกับ wire type แล้วตามด้วยค่า
ผู้อ่านปลายทางจึงประกอบ message ขึ้นใหม่จากหมายเลข ไม่ใช่จากชื่อที่คุณตั้งไว้ใน schema
คำถามของคอร์สคือ แก้ schema หนึ่งอย่างแล้วฝั่งที่ยังไม่ได้แก้ อ่านได้ อ่านผิด
หรืออ่านไม่ออก
คำตอบที่วัดได้คือ เกือบทุกการแก้ยัง parse ผ่าน และนั่นคือปัญหา สิ่งที่ทำให้สัญญาพัง
ไม่ใช่ error แต่เป็นค่าที่เดินไปนั่งผิดช่องโดยไม่มีอะไรแดง
ฝั่งเขียนคือ Go ฝั่งอ่านคือ Java สอง runtime สอง code generator ถ้าข้ออ้างไหน
จริงเพราะ runtime ตัวเดียว มันจะโผล่ตรงที่สองฝั่งตอบไม่ตรงกัน และมันโผล่จริงหนึ่งครั้ง
จากงานอ่านทั้งชุด
ประกาศไว้ตรงนี้ เพื่อไม่ให้ใครอ่านจบแล้วเชื่อว่าได้ของที่คอร์สนี้ไม่ได้ให้
- ไม่วัดความเร็ว ทั้งคอร์สไม่มีหน่วยเวลาสักตัว หน่วยคือจำนวน byte ค่า hex
หมายเลข field จำนวน unknown field และรหัสออก
- ไม่สอน gRPC ระดับ service ชื่อ method รหัส
UNIMPLEMENTED และ streaming
เป็นคนละชั้นกับสายที่คอร์สนี้วัด
- ไม่แตะการ map เป็น JSON มันมีกฎของตัวเองคนละชุดกับ wire format
- ไม่แตะ proto2 และ editions ทั้งสองอย่างเปลี่ยนกฎของ field presence
ซึ่งเป็นแกนของบทที่ 2 · คอร์สนี้ใช้
syntax = "proto3" อย่างเดียว
- ไม่สอน
buf breaking และ schema registry มันเป็นเครื่องมือ ไม่ใช่กฎของสาย
และเปลี่ยน version บ่อยกว่าที่คอร์สจะตามทัน บทที่ 8 จึงบอกแค่ว่ามันอยู่นอกขอบเขต
อ่าน Go กับ Java ออกก็พอ ส่วนความรู้เรื่อง protobuf ไม่ต้องมีมาก่อนเลย
- อ่าน Go ออกและอ่าน Java ออก ระดับที่ตามตัวอย่างสั้นๆ ได้ก็พอ
ถ้ายังไม่ถึงตรงนั้น เริ่มที่ Go จากศูนย์ หรือ
Java จากศูนย์ ก่อน
- ไม่ต้องรู้จัก
protoc มาก่อน ทุกขั้นถูกอธิบายตอนที่มันโผล่ครั้งแรก
- ควรเคยเจอสถานการณ์ที่สองบริการคุยกันข้ามรุ่น เพราะนั่นคือคำถามที่คอร์สนี้ตอบ
- ต้องมี Go, JDK และ Python 3 เพราะทุกข้ออ้างในคอร์สนี้มาจาก probe ที่คุณรันเองได้
ส่วน
protoc กับ jar ของ Java นั้น up.sh ดึงมาให้เอง
แผนผังนี้เติมขึ้นเองเมื่อบทเรียนถูกเพิ่มเข้ามา