Building Services
จาก contract ไปสู่ code ที่รันได้
หัวข้อที่มีชื่อว่า “จาก contract ไปสู่ code ที่รันได้”คุณมี .proto contract แล้ว โมดูลนี้จะเปลี่ยน contract นั้นให้เป็นของที่รันได้จริง: server ที่ตอบ call, client ที่ยิง call และวินัยเรื่อง deadline ที่กันไม่ให้ทั้งระบบค้างไปตลอดกาล
ทุกบทเรียนใช้ contract เล็ก ๆ ตัวเดียวกัน เพื่อให้คุณตามตัวอย่างเดียวได้ตั้งแต่ต้นจนจบ:
syntax = "proto3";package user.v1;
message GetUserRequest { int64 id = 1;}
message User { int64 id = 1; string name = 2; string email = 3;}
service UserService { rpc GetUser(GetUserRequest) returns (User);}โมดูลนี้ครอบคลุมอะไรบ้าง
หัวข้อที่มีชื่อว่า “โมดูลนี้ครอบคลุมอะไรบ้าง”| บทเรียน | สิ่งที่คุณจะได้เรียนรู้ |
|---|---|
| Code Generation | protoc, plugin ของแต่ละภาษา, buf และสิ่งที่ generate ออกมาจริง ๆ |
| Implementing a Server | เติม handler, register service และ serve |
| Writing a Client | channel, stub, การยิง call และการ reuse connection |
| Deadlines & Cancellation | ทำไมทุก call ต้องมี deadline และส่งต่อกันอย่างไร |
หน้าตาของงาน
หัวข้อที่มีชื่อว่า “หน้าตาของงาน”flowchart LR proto[".proto"] -->|protoc / buf| gen["generated code: messages + stub + server interface"] gen --> srv["implement server (fill GetUser)"] gen --> cli["write client (call GetUser)"] cli -->|HTTP/2| srv
สังเกตว่า generated code อยู่ตรงกลาง: ยื่น interface ให้ server ไป implement และยื่น stub ให้ client ไปเรียก คุณเขียนสองฝั่ง ส่วน codegen รับประกันว่าทั้งสองฝั่งตรงกัน