การสื่อสารที่มีประสิทธิภาพเป็นสิ่งสำคัญในทุกสาขา และโลกของคอมพิวเตอร์ก็ไม่มีข้อยกเว้น เมื่อแอปพลิเคชันโต้ตอบกันจากระยะไกลโดยใช้ gRPC (Remote Procedure Calls) การส่งสัญญาณข้อผิดพลาดที่ชัดเจนเป็นสิ่งสำคัญ
เริ่มสร้างโปรเจกต์ gRPC ของคุณเองด้วย Apidog โดยคลิกที่ปุ่มด้านล่าง! 👇
บทความนี้เจาะลึกแนวคิดของรหัสสถานะ gRPC โดยให้ความเข้าใจอย่างลึกซึ้งยิ่งขึ้นว่ารหัสเหล่านี้ช่วยให้มั่นใจได้ถึงการสื่อสารที่ราบรื่นและการจัดการข้อผิดพลาดที่มีประสิทธิภาพภายในระบบกระจาย
ก่อนที่จะพูดคุยเกี่ยวกับรหัสสถานะ gRPC มาทบทวนกันก่อนว่า gRPC ย่อมาจากอะไร
gRPC คืออะไร
คำว่า gRPC (gRPC Remote Procedure Call) หมายถึงกรอบงานโอเพนซอร์สประสิทธิภาพสูงที่อำนวยความสะดวกในการสื่อสารระหว่างแอปพลิเคชันผ่านกลไกการเรียกใช้ขั้นตอนระยะไกล (RPC)
กรอบงาน gRPC ช่วยให้แอปพลิเคชันไคลเอนต์สามารถเรียกใช้เมธอดบนแอปพลิเคชันเซิร์ฟเวอร์ที่อยู่ในเครื่องอื่นได้ ราวกับว่าเป็นอ็อบเจกต์ในเครื่อง กรอบงานจึงช่วยลดความซับซ้อนในการพัฒนาของระบบกระจายโดยการแยกความซับซ้อนของการสื่อสารเครือข่ายออกไป
ลักษณะสำคัญของ gRPC
ความเป็นกลางทางภาษา
RPC เป็นแบบแพลตฟอร์ม-agnostic และรองรับภาษาการเขียนโปรแกรมต่างๆ ส่งเสริมการทำงานร่วมกันในสภาพแวดล้อมการพัฒนาที่แตกต่างกัน ซึ่งหมายความว่าบริการ gRPC ที่เขียนด้วยภาษาหนึ่งสามารถถูกเรียกใช้โดยไคลเอนต์ที่เขียนด้วยอีกภาษาหนึ่งได้ ตราบใดที่ทั้งสองภาษามีไลบรารี gRPC
Protocol Buffers
ใช้ Protocol Buffers ซึ่งเป็นกลไกที่เป็นกลางทางภาษาสำหรับการกำหนดโครงสร้างข้อมูลและอินเทอร์เฟซบริการระยะไกล สิ่งนี้ทำให้มั่นใจได้ถึงการจัดลำดับข้อมูลและการยกเลิกการจัดลำดับข้อมูลที่มีประสิทธิภาพระหว่างไคลเอนต์และเซิร์ฟเวอร์ Protocol Buffers กำหนดโครงสร้างของข้อมูลที่แลกเปลี่ยนระหว่างบริการ
ข้อมูลจะถูกจัดลำดับเป็นรูปแบบไบนารีขนาดกะทัดรัดก่อนที่จะถูกส่งผ่านเครือข่าย จากนั้นจึงถูกยกเลิกการจัดลำดับกลับเป็นรูปแบบเดิมที่ปลายทางรับ รูปแบบไบนารีนี้มีประสิทธิภาพมากกว่ารูปแบบข้อความ เช่น JSON หรือ XML ซึ่งสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชัน gRPC ได้
ประสิทธิภาพสูง
gRPC ใช้ HTTP/2 เพื่อการถ่ายโอนข้อมูลที่มีประสิทธิภาพ ส่งผลให้การสื่อสารเร็วขึ้นเมื่อเทียบกับกรอบงาน RPC แบบดั้งเดิม HTTP/2 เป็นการปรับปรุงครั้งใหญ่กว่า HTTP/1.1 ซึ่งเป็นโปรโตคอลที่รองรับการรับส่งข้อมูลบนเว็บส่วนใหญ่ในปัจจุบัน HTTP/2 อนุญาตให้ส่งคำขอหลายรายการผ่านการเชื่อมต่อเดียว ซึ่งสามารถลดเวลาแฝงได้อย่างมาก นอกจากนี้ HTTP/2 ยังรองรับการบีบอัดส่วนหัว ซึ่งสามารถปรับปรุงประสิทธิภาพได้อีกด้วย
คุณสมบัติมากมาย
มีฟังก์ชันการทำงานในตัว เช่น การตรวจสอบสิทธิ์ การอนุญาต การปรับสมดุลโหลด และการตรวจสอบสุขภาพ ซึ่งช่วยลดความซับซ้อนของกระบวนการพัฒนา คุณสมบัติเหล่านี้ช่วยให้มั่นใจในความปลอดภัย ความน่าเชื่อถือ และความสามารถในการปรับขนาดของแอปพลิเคชัน gRPC
การสร้างโค้ดอัตโนมัติ
gRPC ใช้คำจำกัดความของโปรโตคอลบัฟเฟอร์เพื่อสร้างโค้ดไคลเอนต์และเซิร์ฟเวอร์ในภาษาการเขียนโปรแกรมต่างๆ โดยอัตโนมัติ ซึ่งช่วยประหยัดเวลาและความพยายามของนักพัฒนา และยังช่วยให้มั่นใจได้ว่าโค้ดไคลเอนต์และเซิร์ฟเวอร์เข้ากันได้
การสนับสนุนการสตรีมมิ่ง
gRPC รองรับรูปแบบการสตรีมมิ่งที่แตกต่างกัน รวมถึง unary (หนึ่งคำขอ หนึ่งการตอบสนอง) การสตรีมมิ่งฝั่งไคลเอนต์ (หลายคำขอ หนึ่งการตอบสนอง) การสตรีมมิ่งฝั่งเซิร์ฟเวอร์ (หนึ่งคำขอ หลายการตอบสนอง) และการสตรีมมิ่งแบบสองทิศทาง (หลายคำขอและหลายการตอบสนอง) ความยืดหยุ่นนี้ทำให้ gRPC เหมาะสำหรับกรณีการใช้งานที่หลากหลาย รวมถึงการสตรีมข้อมูลแบบเรียลไทม์และการถ่ายโอนไฟล์
รหัสสถานะ gRPC คืออะไร
กรอบงาน gRPC อาศัยรหัสสถานะ gRPC เพื่อสื่อสารผลลัพธ์ของ RPC (Remote Procedure Call) โดยให้ข้อมูลแก่ผู้ใช้ว่าการดำเนินการนั้นสำเร็จหรือไม่หรือล้มเหลว
ประเภทของรหัสสถานะ gRPC
gRPC กำหนดชุดของรหัสสถานะเพื่อสื่อสารผลลัพธ์ของ RPC รหัสเหล่านี้ให้ข้อมูลที่เฉพาะเจาะจงมากกว่าข้อความสำเร็จ/ล้มเหลวแบบง่ายๆ ทำให้ไคลเอนต์เข้าใจลักษณะของข้อผิดพลาดที่อาจเกิดขึ้นได้ นี่คือรายละเอียดของประเภทต่างๆ:
สำเร็จ (OK)
- รหัส: 0
- คำอธิบาย: RPC เสร็จสมบูรณ์แล้ว นี่คือผลลัพธ์ในอุดมคติ ซึ่งบ่งชี้ว่าเซิร์ฟเวอร์ประมวลผลคำขอโดยไม่มีปัญหา
รหัสข้อผิดพลาด (สร้างโดยผู้ใช้)
รหัสเหล่านี้มักจะถูกสร้างขึ้นโดยตรรกะของแอปพลิเคชันฝั่งเซิร์ฟเวอร์ และระบุปัญหาเฉพาะที่พบระหว่าง RPC
ยกเลิก (รหัส: 1)
- คำอธิบาย: การดำเนินการถูกยกเลิก โดยปกติแล้วตามคำขอของไคลเอนต์ สิ่งนี้อาจเกิดขึ้นเนื่องจากหมดเวลา การโต้ตอบของผู้ใช้ หรือเหตุผลอื่นๆ
ไม่รู้จัก (รหัส: 2)
- คำอธิบาย: เกิดข้อผิดพลาดที่ไม่คาดคิดบนเซิร์ฟเวอร์ และไม่มีรายละเอียดเฉพาะเจาะจงเกี่ยวกับปัญหา นี่คือการจับทั้งหมดสำหรับปัญหาที่ไม่คาดฝัน
INVALID_ARGUMENT (รหัส: 3)
- คำอธิบาย: ไคลเอนต์ให้ข้อโต้แย้งที่ไม่ถูกต้องในคำขอ สิ่งนี้อาจเกิดจากการขาดหายไปของฟิลด์ที่จำเป็น ชนิดข้อมูลที่ไม่ถูกต้อง หรือค่าที่อยู่นอกช่วงที่คาดไว้
DEADLINE_EXCEEDED (รหัส: 4)
- คำอธิบาย: คำขอใช้เวลานานเกินไปในการดำเนินการให้เสร็จสิ้นและเกินกำหนดเวลาที่กำหนด สิ่งนี้อาจเกิดจากการประมวลผลที่ช้าบนเซิร์ฟเวอร์ ปัญหาเครือข่าย หรือข้อมูลจำนวนมากที่ถูกถ่ายโอน
NOT_FOUND (รหัส: 5)
- คำอธิบาย: ไม่พบทรัพยากรที่ร้องขอ (เช่น ไฟล์ รายการฐานข้อมูล) บนเซิร์ฟเวอร์
ALREADY_EXISTS (รหัส: 6)
- คำอธิบาย: มีความพยายามที่จะสร้างทรัพยากรที่มีอยู่แล้ว สิ่งนี้อาจเกิดขึ้นเมื่อพยายามแทรกข้อมูลซ้ำซ้อนหรือสร้างบางสิ่งที่มีชื่อขัดแย้งกัน
PERMISSION_DENIED (รหัส: 7)
- คำอธิบาย: ไคลเอนต์ขาดสิทธิ์ที่จำเป็นในการดำเนินการตามคำขอ สิ่งนี้อาจเกิดจากการควบคุมการเข้าถึงหรือการตั้งค่าความปลอดภัยที่ไม่เพียงพอ
RESOURCE_EXHAUSTED (รหัส: 8)
- คำอธิบาย: เซิร์ฟเวอร์หมดทรัพยากร (เช่น หน่วยความจำ พื้นที่ดิสก์) เพื่อดำเนินการตามคำขอให้เสร็จสิ้น
FAILED_PRECONDITION (รหัส: 9)
- คำอธิบาย: ไม่สามารถประมวลผลคำขอได้เนื่องจากเซิร์ฟเวอร์อยู่ในสถานะที่ไม่คาดคิด สิ่งนี้อาจเกิดจากข้อมูลที่ไม่ถูกต้องในคำขอที่ไม่เกี่ยวข้องโดยตรงกับข้อโต้แย้งเอง หรือเซิร์ฟเวอร์อยู่ในสถานะที่ไม่สอดคล้องกัน
ABORTED (รหัส: 10)
- คำอธิบาย: การดำเนินการถูกยกเลิกฝั่งเซิร์ฟเวอร์ สิ่งนี้อาจเกิดขึ้นเนื่องจากเหตุผลต่างๆ ที่เจาะจงกับการใช้งานเซิร์ฟเวอร์
OUT_OF_RANGE (รหัส: 11)
- คำอธิบาย: คำขอมีค่าที่อยู่นอกช่วงที่คาดไว้ นี่อาจเป็นตัวเลขที่อยู่นอกชุดที่ถูกต้อง หรือวันที่ที่ไม่ตรงกับกรอบเวลาที่อนุญาต
UNIMPLEMENTED (รหัส: 12)
- คำอธิบาย: เซิร์ฟเวอร์ไม่รองรับเมธอด RPC ที่ร้องขอ สิ่งนี้อาจเกิดจากการขาดการใช้งานบนเซิร์ฟเวอร์ หรือไคลเอนต์ที่ล้าสมัยพยายามใช้คุณสมบัติใหม่กว่า
INTERNAL (รหัส: 13)
- คำอธิบาย: เกิดข้อผิดพลาดภายในเซิร์ฟเวอร์ นี่คือรหัสข้อผิดพลาดทั่วไปที่ใช้เมื่อเซิร์ฟเวอร์พบปัญหาที่ไม่คาดคิดที่ไม่สามารถจัดประเภทได้เฉพาะเจาะจงมากขึ้น
รหัสที่สร้างโดยไลบรารี (gRPC Core)
รหัสเหล่านี้ไม่ได้ถูกสร้างขึ้นโดยตรงจากโค้ดผู้ใช้ แต่โดยไลบรารี gRPC เองในสถานการณ์เฉพาะ
DATA_LOSS (รหัส: 15)
- คำอธิบาย: มีการสูญเสียข้อมูลระหว่าง RPC สิ่งนี้อาจเกิดจากปัญหาเครือข่ายหรือปัญหาเกี่ยวกับระบบจัดเก็บข้อมูล
สร้าง gRPC API ภายในไม่กี่นาทีด้วย Apidog
ไม่ว่าคุณจะเป็นนักเรียนที่กำลังจะสร้าง gRPC API ตัวแรกของคุณ หรือเป็นมืออาชีพที่จัดการกับ API เหล่านั้นในแต่ละวัน คุณจะต้องมีเครื่องมือพัฒนา API ที่เข้าใจง่ายและสะดวกในการทำงาน นี่คือเหตุผลที่คุณควรลอง Apidog - โซลูชันแบบครบวงจรสำหรับปัญหา API ทั้งหมดของคุณ

สร้าง gRPC API โดยใช้ Apidog
ส่วนนี้จะสาธิตคำแนะนำง่ายๆ เกี่ยวกับวิธีที่คุณสามารถสร้าง gRPC API ของคุณเองโดยใช้ Apidog

ขั้นแรก ดาวน์โหลดและเปิดแอปพลิเคชัน Apidog และค้นหาปุ่ม + New Project
ดังที่แสดงในภาพด้านบน

จากนั้นหน้าต่างป๊อปอัปจะปรากฏขึ้นบนหน้าจอของคุณ โดยขอให้คุณยืนยันชื่อโปรเจกต์ gRPC API คุณมีอิสระที่จะตั้งชื่อโปรเจกต์ gRPC API ของคุณ - เป็นของคุณ!
การนำเข้าไฟล์ .proto
เนื่องจากกรอบงาน gRPC เป็นไปตามแนวทาง API-first คุณต้องกำหนดการพัฒนา บริการ เมธอด และข้อความผ่านไฟล์ .proto
ก่อน
ใน Apidog คุณมีสองวิธีในการนำเข้าไฟล์ .proto
ซึ่งได้แก่:

- ไฟล์ในเครื่อง
- URL ที่โฮสต์ไฟล์
.proto
ไฟล์ .proto
ที่เลือกจะถูกนำเข้าเป็น Proto เดียว โดยที่บริการจะถูกนำเข้าเป็นบริการ และ RPC จะถูกนำเข้าเป็นเมธอด หากไฟล์ .proto
ที่เลือกขึ้นอยู่กับไฟล์ .proto
อื่นๆ คุณจะต้องเพิ่มไดเรกทอรีการพึ่งพาด้วยตนเอง
อย่างไรก็ตาม บริการจากไฟล์ .proto
อื่นๆ ที่ไฟล์ .proto
ที่เลือกขึ้นอยู่กับก็จะถูกนำเข้าไปใน Proto เดียวกัน หากแพ็คเกจของพวกเขาเป็นของแพ็คเกจเดียวกับไฟล์ .proto
ที่เลือก
การนำเข้าไฟล์ .proto ซ้ำ

หากมีการเปลี่ยนแปลงใดๆ กับไฟล์ .proto
ที่ใช้ในโปรเจกต์ คุณสามารถนำเข้าซ้ำลงใน Apidog ได้ คลิกขวาที่ Proto แล้วคลิกปุ่ม Reimport
ดังที่แสดงในภาพด้านบน
การโทร Unary โดยใช้ Apidog

คล้ายกับคำขอ HTTP คุณสามารถโทร unary ได้โดยป้อน URL ในแถบที่อยู่ และป้อนเนื้อหาข้อความในรูปแบบ JSON ใต้แท็บ Message คลิกปุ่ม "Invoke" เมื่อคุณสรุปรายละเอียดแล้ว และการโทร unary จะเริ่มต้นขึ้น
การโทรสตรีมมิ่งโดยใช้ Apidog

การโทรสตรีมมิ่งค่อนข้างคล้ายกับการเชื่อมต่อ WebSocket ตรงที่ หลังจากเริ่มการโทรแล้ว คุณได้รับอนุญาตให้เขียนและส่งข้อความภายใต้แท็บ Message การโทรสตรีมมิ่งประเภทอื่นๆ ได้แก่ การสตรีมมิ่งเซิร์ฟเวอร์ การสตรีมมิ่งไคลเอนต์ และการสตรีมมิ่งแบบสองทิศทาง
เพื่อให้แน่ใจว่าผู้ใช้มีความเข้าใจอย่างถ่องแท้เกี่ยวกับการโทรสตรีมมิ่ง APidog มีมุมมองไทม์ไลน์ที่แสดงสถานะการโทร ข้อความที่ส่ง และข้อความที่ได้รับ ซึ่งแสดงตามลำดับเวลา
หากต้องการเรียนรู้ขอบเขตทั้งหมดของคุณสมบัติของ Apidog สำหรับ gRPC API โปรดไปที่ ลิงก์นี้!

บทสรุป
รหัสสถานะ gRPC มีบทบาทสำคัญในการทำให้มั่นใจได้ถึงการสื่อสารที่มีประสิทธิภาพและให้ข้อมูลระหว่างแอปพลิเคชันคอมพิวเตอร์ ด้วยการใช้ระบบรหัสที่เป็นมาตรฐาน นักพัฒนาสามารถปรับปรุงการจัดการข้อผิดพลาดและสื่อสารสาเหตุของปัญหาที่เกิดขึ้นระหว่างการโต้ตอบได้อย่างมีประสิทธิภาพ
สิ่งนี้ไม่เพียงแต่ช่วยลดความซับซ้อนของกระบวนการดีบักเท่านั้น แต่ยังช่วยเพิ่มความน่าเชื่อถือโดยรวมของระบบกระจายอีกด้วย ในขณะที่ gRPC ยังคงได้รับความนิยมอย่างต่อเนื่อง ความเข้าใจอย่างถ่องแท้เกี่ยวกับรหัสสถานะจะกลายเป็นสิ่งที่มีค่ามากขึ้นสำหรับนักพัฒนาที่มุ่งสร้างแอปพลิเคชันที่แข็งแกร่งและปรับขนาดได้