DEV Community

Cover image for สุดยอดทางเลือก BloomRPC
Thanawat Wongchai
Thanawat Wongchai

Posted on Originally published at apidog.com

สุดยอดทางเลือก BloomRPC

BloomRPC เคยตอบคำถามที่นักพัฒนา gRPC ถามกันบ่อยที่สุด: “Postman สำหรับ gRPC อยู่ที่ไหน?” เพียงโหลดไฟล์ .proto แก้ไข request แบบ JSON แล้วกดส่ง เครื่องมือนี้ฟรี ใช้งานง่าย และเคยมีดาวบน GitHub ราว 9,000 ดวง แต่เมื่อวันที่ 4 มกราคม 2023 repository ของ BloomRPC ถูกเก็บถาวร โดย README ระบุชัดเจนว่าโปรเจกต์หยุดพัฒนาแล้ว มีปัญหาค้างอยู่ และไม่แนะนำให้ใช้งานต่อ

ลองใช้ Apidog วันนี้

สำหรับทีมส่วนใหญ่ Apidog เป็นทางเลือกแทน BloomRPC ที่ใช้งานได้จริงกว่า เพราะไม่ได้รองรับแค่การโหลด .proto และส่ง gRPC call แต่ยังรองรับ gRPC ทั้ง 4 รูปแบบ ได้แก่ unary, server streaming, client streaming และ bidirectional streaming รวมถึงการนำเข้า proto จากไฟล์ในเครื่อง, URL และ server reflection นอกจากนี้ยังเก็บงาน gRPC ไว้ร่วมกับ REST, WebSocket และ GraphQL ในโปรเจกต์เดียว พร้อมการทดสอบ เอกสาร และการแชร์การตั้งค่าในทีม

BloomRPC คืออะไร และทำไมจึงไม่ควรใช้ต่อ

BloomRPC เปิดตัวในปี 2018 ในฐานะแอปเดสก์ท็อป Electron สำหรับสร้าง gRPC request โดยไม่ต้องเขียน client code ขั้นตอนใช้งานตรงไปตรงมา:

  1. นำเข้าไฟล์ .proto
  2. เลือก service และ RPC method
  3. แก้ไข request message ในรูปแบบ JSON
  4. เพิ่ม metadata หากจำเป็น
  5. ส่ง request และดู response

สำหรับ unary call และ streaming บางกรณี BloomRPC ใช้งานได้ดี จึงเคยเป็น GUI มาตรฐานสำหรับงาน gRPC

ปัญหาคือ repository ถูก archive แล้ว ซึ่งหมายความว่า:

  • ไม่มีการแก้ไขบั๊ก
  • ไม่มีการอัปเดต dependency
  • ไม่มี security update สำหรับ Electron, Chromium หรือ Node ที่ฝังมากับแอป
  • ปัญหาเกี่ยวกับ proto import และ streaming ที่ค้างอยู่จะไม่ถูกแก้ไข
  • ฟีเจอร์ใหม่ของ gRPC หรือ Proto syntax อาจไม่รองรับ

หากกำลังเริ่มโปรเจกต์ใหม่ ควรหยุดติดตั้ง BloomRPC และย้ายไปใช้เครื่องมือที่ยังดูแลต่อเนื่องแทน

ทีมส่วนใหญ่ไม่ได้มีแค่ gRPC อย่างเดียว แต่ยังใช้ REST, WebSocket หรือ GraphQL ด้วย การแยกเครื่องมือสำหรับแต่ละ protocol ทำให้ต้องทำงานซ้ำ ทั้งการเก็บ request, metadata, auth และเอกสาร หากกำลังเลือกเครื่องมือใหม่ ให้เริ่มจากสิ่งที่ทำให้ gRPC client ที่ดี มากกว่าแค่ “โหลด proto และกดส่ง”

ทางเลือกหลัก: Apidog

Apidog เป็นแพลตฟอร์มพัฒนา API ที่รองรับการออกแบบ ดีบัก ทดสอบ mock และจัดทำเอกสาร API โดยรองรับ gRPC ตามที่ระบุในเอกสารทางการ

สิ่งที่ Apidog รองรับสำหรับ gRPC

  1. รองรับ gRPC ครบทั้ง 4 รูปแบบ
    • Unary
    • Server streaming
    • Client streaming
    • Bidirectional streaming

สำหรับ streaming call ให้เปิด session แล้วส่งข้อความจากแท็บ Message ขณะดูข้อความที่ส่งและรับตามลำดับใน timeline

  1. นำเข้า API definition ได้ 3 วิธี
    • เลือกไฟล์ .proto จากเครื่อง
    • นำเข้า proto จาก URL
    • ใช้ server reflection จาก gRPC server ที่กำลังรันอยู่

หาก proto ของคุณ import ไฟล์อื่น ให้เพิ่ม dependency directory เพื่อให้ระบบ resolve import ได้ถูกต้อง

  1. แก้ไข request เป็น JSON

เช่นเดียวกับ BloomRPC คุณสามารถกรอก protobuf message ในรูปแบบ JSON ได้โดยตรง ตัวอย่าง:

   {
     "userId": "u_123",
     "includeProfile": true
   }
Enter fullscreen mode Exit fullscreen mode

หากต้องการทำความเข้าใจการแปลงข้อมูลระหว่าง protobuf และ JSON เพิ่มเติม ดูคู่มือ protobuf เป็น JSON

  1. รองรับ TLS, metadata และ authentication

เลือก protocol ต่อ request ได้ เช่น:

   grpc://localhost:50051
Enter fullscreen mode Exit fullscreen mode

หรือ:

   grpcs://api.example.com:443
Enter fullscreen mode Exit fullscreen mode

จากนั้นเพิ่ม metadata เช่น:

   authorization: Bearer <token>
   x-request-id: debug-001
Enter fullscreen mode Exit fullscreen mode

สำหรับ token, TLS และ mTLS ดู แนวทางการยืนยันตัวตน gRPC

  1. บันทึกและแชร์ request ในทีม

การตั้งค่า server URL, request body, metadata และ auth สามารถบันทึกไว้ในโปรเจกต์เดียวกันได้ จึงไม่ต้องให้เพื่อนร่วมทีมนำเข้า proto และพิมพ์ค่าเดิมซ้ำทุกครั้ง

ใช้งาน Apidog แทน BloomRPC แบบทีละขั้นตอน

1. สร้างโปรเจกต์และนำเข้า proto

เริ่มจากสร้างโปรเจกต์ใน Apidog แล้วเลือกนำเข้า .proto ของบริการ

หาก proto มี dependency เช่น:

import "google/protobuf/timestamp.proto";
import "common/user.proto";
Enter fullscreen mode Exit fullscreen mode

ให้เพิ่ม directory ที่เก็บไฟล์ dependency ด้วย เพื่อให้ import สำเร็จ

หากไม่มีไฟล์ proto อยู่ในเครื่อง แต่ server เปิด reflection ไว้ ให้เชื่อมต่อกับ server โดยตรงแทน

2. เลือก service และ RPC method

หลังนำเข้า proto สำเร็จ ให้เลือก service และ method ที่ต้องการเรียก ตัวอย่าง:

service UserService {
  rpc GetUser(GetUserRequest) returns (GetUserResponse);
}
Enter fullscreen mode Exit fullscreen mode

เลือก UserService แล้วเลือก GetUser

3. กรอก request JSON

Apidog จะสร้างโครง JSON ตาม schema ของ request ให้ แก้ไขค่าที่จำเป็น เช่น:

{
  "id": "user_123"
}
Enter fullscreen mode Exit fullscreen mode

4. ตั้งค่า endpoint และ TLS

กำหนด endpoint ของ gRPC server:

grpc://localhost:50051
Enter fullscreen mode Exit fullscreen mode

สำหรับ production ที่ใช้ TLS:

grpcs://grpc.example.com:443
Enter fullscreen mode Exit fullscreen mode

5. เพิ่ม metadata และ authentication

หากบริการต้องใช้ bearer token ให้เพิ่ม metadata:

authorization: Bearer eyJhbGciOi...
Enter fullscreen mode Exit fullscreen mode

บันทึก request นี้ไว้เพื่อใช้ซ้ำในการดีบักครั้งถัดไป

6. ส่ง request และตรวจสอบผลลัพธ์

สำหรับ unary call จะได้ response เดียวพร้อม gRPC status code

gRPC status code ไม่เหมือน HTTP status code ตัวอย่างที่ควรรู้:

  • OK
  • INVALID_ARGUMENT
  • UNAUTHENTICATED
  • PERMISSION_DENIED
  • NOT_FOUND
  • UNAVAILABLE

ดูรายละเอียดเพิ่มเติมได้จากข้อมูลอ้างอิงรหัสสถานะ gRPC

จุดที่ต่างชัดเจน: Streaming

BloomRPC มีข้อจำกัดและปัญหาค้างอยู่กับ client streaming และ bidirectional streaming ขณะที่ Apidog ออกแบบ streaming call ให้เป็น live session

แนวทางใช้งานมีดังนี้:

  1. เปิด streaming RPC
  2. ส่งข้อความแรกจากแท็บ Message
  3. ดูข้อความตอบกลับใน timeline
  4. ส่งข้อความเพิ่มเติมได้ตามต้องการ
  5. ปิด session เมื่อจบการทดสอบ

รูปแบบนี้เหมาะกับบริการ เช่น chat, event stream, telemetry หรือ real-time notification

หากต้องการทบทวนว่าแต่ละรูปแบบของ streaming เหมาะกับกรณีใด อ่าน gRPC streaming อธิบาย

Server reflection: ดีบักโดยไม่ต้องหาไฟล์ proto

BloomRPC ต้องใช้ไฟล์ .proto แต่ Apidog รองรับ server reflection

หาก gRPC server เปิด reflection ไว้ คุณสามารถ:

  1. ระบุ server endpoint
  2. เชื่อมต่อผ่าน reflection
  3. ดู service และ method ที่ server เปิดเผย
  4. สร้าง request และทดสอบได้ทันที

วิธีนี้เหมาะกับการตรวจสอบ staging environment หรือการดีบัก service ของทีมอื่น โดยไม่ต้องตามหา proto revision ที่ตรงกับ server

มากกว่าแค่ gRPC client

ข้อได้เปรียบสำคัญของ Apidog คือการเก็บงาน API หลายประเภทในที่เดียว

ในโปรเจกต์เดียวกัน คุณสามารถจัดการ:

  • gRPC requests
  • REST endpoints
  • WebSocket และ SSE
  • GraphQL operations
  • automated tests
  • HTTP mocks
  • เอกสาร API ที่เผยแพร่ได้

ตัวอย่างเช่น backend เดียวอาจมีทั้ง gRPC สำหรับ internal service-to-service communication และ REST สำหรับ public API แทนที่จะใช้ BloomRPC สำหรับ gRPC และอีกเครื่องมือหนึ่งสำหรับ REST คุณสามารถเก็บ workflow ทั้งหมดไว้ในโปรเจกต์เดียว

ดูตัวอย่างการทำการทดสอบ gRPC API และเปรียบเทียบ protocol เพิ่มเติมได้ที่ REST vs GraphQL vs gRPC หรือ gRPC vs REST

BloomRPC vs Apidog: เปรียบเทียบแบบสรุป

คุณสมบัติ BloomRPC Apidog
สถานะโปรเจกต์ Archive ตั้งแต่ ม.ค. 2023 และไม่แนะนำให้ใช้งาน พัฒนาอย่างต่อเนื่อง
Unary call รองรับ รองรับ
Server streaming รองรับบางส่วน รองรับ
Client streaming มีข้อจำกัด รองรับ
Bidirectional streaming มีข้อจำกัด รองรับ
นำเข้า Proto ไฟล์ .proto ในเครื่อง ไฟล์ในเครื่อง, URL, server reflection
TLS พื้นฐาน เลือก grpc:// หรือ grpcs:// ต่อ request
Metadata และ auth แก้ไข metadata ได้ metadata พร้อมการตั้งค่า authentication
การแชร์ในทีม ไม่มี เน้นใช้งานในเครื่อง บันทึกและแชร์ใน workspace
Protocol อื่น gRPC เท่านั้น REST, WebSocket, SSE, GraphQL และ gRPC
Testing, docs, mocks ไม่มี อยู่ในแพลตฟอร์มเดียวกัน
ราคา ฟรี แต่ถูกละทิ้ง มีแผนฟรีสำหรับผู้ใช้สูงสุด 4 คน

ย้ายจาก BloomRPC ไป Apidog

ไม่มีไฟล์ export สำคัญจาก BloomRPC ที่ต้องย้าย เพราะข้อมูลหลักของคุณควรอยู่ใน repository อยู่แล้ว ได้แก่ไฟล์ proto และข้อมูลเชื่อมต่อ service

ทำตามขั้นตอนนี้:

  1. รวบรวมไฟล์ .proto

ตรวจสอบว่า proto และ dependency ทั้งหมดอยู่ใน repository หรือ directory ที่เข้าถึงได้

  1. นำเข้า proto เข้า Apidog

สร้างโปรเจกต์ แล้วนำเข้า proto จากเครื่องหรือ URL หากมี import อื่น ให้เพิ่ม dependency directory

  1. หรือใช้ server reflection

หาก server เปิด reflection ไว้ คุณสามารถข้ามการนำเข้า proto ได้

  1. ตั้งค่า endpoint และ TLS

ระบุ server URL และเลือก grpc:// หรือ grpcs://

  1. สร้าง metadata และ auth ใหม่

เพิ่ม header, token หรือ certificate ที่เคยใช้งานใน BloomRPC

  1. บันทึก request

บันทึก request ที่ใช้งานบ่อยเพื่อให้ทีมเรียกใช้ซ้ำได้

สำหรับผู้ใช้ BloomRPC เดิม ขั้นตอนตั้งแต่การนำเข้า proto จนถึงส่ง unary request มักใช้เวลาไม่ถึงสิบนาที เพราะ workflow หลักยังเหมือนเดิม

ทางเลือกอื่นแทน BloomRPC

Apidog เหมาะเมื่อ gRPC เป็นส่วนหนึ่งของ workflow API ที่ใหญ่กว่า แต่หากความต้องการเฉพาะทาง เครื่องมือเหล่านี้ก็น่าสนใจ

  • grpcurl: เหมือน curl สำหรับ gRPC เหมาะกับ shell script, CI และการตรวจสอบ service อย่างรวดเร็ว โดยเฉพาะ server ที่เปิด reflection
  grpcurl -plaintext \
    -d '{"id":"user_123"}' \
    localhost:50051 \
    user.v1.UserService/GetUser
Enter fullscreen mode Exit fullscreen mode

ดูรายละเอียดเพิ่มเติมในทางเลือกที่ดีที่สุดสำหรับ grpcurl

  • grpcui: UI บนเว็บชั่วคราวสำหรับ gRPC server เดียว เหมาะกับการทดสอบสั้น ๆ และไม่เน้นการบันทึก state

  • Kreya: desktop client สำหรับ gRPC และ REST เหมาะกับผู้ที่ต้องการเครื่องมือแบบ standalone ที่ใกล้เคียง BloomRPC มากที่สุด ดูเพิ่มเติมที่ Kreya คืออะไร และ ทางเลือกที่ดีที่สุดสำหรับ Kreya

  • Postman: รองรับ gRPC ตั้งแต่ปี 2022 เหมาะกับทีมที่ใช้ Postman อยู่แล้ว แต่ยังต้องพิจารณาราคาและข้อจำกัดของ workspace ดู ทางเลือกที่ดีที่สุดสำหรับ Postman

  • evans: gRPC REPL สำหรับเทอร์มินัล เหมาะกับผู้ที่ทำงานผ่าน tmux หรือ CLI เป็นหลัก แต่ไม่ใช่ตัวแทน GUI ของ BloomRPC โดยตรง

สรุปการเลือกเครื่องมือ:

  • ใช้ CLI และ automation: grpcurl
  • ต้องการ GUI แบบชั่วคราวสำหรับ server เดียว: grpcui
  • ต้องการ standalone desktop gRPC client: Kreya
  • ต้องการจัดการ gRPC, REST, testing และ docs ในที่เดียว: Apidog

คำถามที่พบบ่อย

BloomRPC ยังได้รับการดูแลอยู่หรือไม่?

ไม่ Repository ถูก archive เมื่อวันที่ 4 มกราคม 2023 และ README ระบุว่าไม่แนะนำให้ใช้งานต่อ ไม่มีการอัปเดต ฟิกซ์บั๊ก หรือ security release ใหม่ สำหรับการเลือก gRPC client ในโปรเจกต์ใหม่ ควรตัด BloomRPC ออกจากตัวเลือก

นำเข้าการตั้งค่า BloomRPC ไป Apidog ได้หรือไม่?

ไม่มีไฟล์ import โดยตรง เพราะ BloomRPC ไม่ได้เก็บ state ที่พกพาได้อย่างมีนัยสำคัญ ให้ย้ายโดยนำเข้าไฟล์ .proto อีกครั้ง หรือใช้ server reflection แล้วสร้าง server URL, TLS และ metadata ใหม่

Apidog รองรับ gRPC streaming หรือไม่?

รองรับครบทั้ง unary, server streaming, client streaming และ bidirectional streaming โดย streaming request ทำงานแบบ live session ที่ส่งข้อความเพิ่มและดู timeline ของข้อความได้ ดูรายละเอียดที่ gRPC streaming

ถ้าต้องการเรียก gRPC จาก command line อย่างรวดเร็วล่ะ?

ใช้ grpcurl โดยเฉพาะเมื่อทำงานใน shell script หรือ CI และเมื่อ server เปิด reflection ไว้ หากต้องการดูว่าเมื่อใดควรใช้ GUI แทน CLI อ่านคู่มือทางเลือก grpcurl

ทดสอบทั้ง gRPC และ REST ในเครื่องมือเดียวได้หรือไม่?

ได้ ใน Apidog คุณสามารถเก็บ gRPC, REST, WebSocket, SSE และ GraphQL ไว้ในโปรเจกต์เดียวกัน พร้อม test, mock และเอกสาร ดู workflow เพิ่มเติมในคู่มือการทดสอบ gRPC API

เลิกใช้ไคลเอนต์ที่ถูกเก็บถาวร

BloomRPC ทำหน้าที่ของมันได้ดีในยุคหนึ่ง แต่วันนี้เป็นเครื่องมือที่หยุดพัฒนาแล้ว หากคุณยังใช้อยู่ ให้เริ่มจากนำไฟล์ .proto เข้า Apidog หรือเชื่อมต่อผ่าน server reflection จากนั้นสร้าง unary และ streaming request ที่ต้องใช้จริง บันทึก metadata, auth และ endpoint ไว้ให้ทีมใช้ร่วมกัน

ดาวน์โหลด Apidog ได้ฟรี โดยแผนฟรีรองรับผู้ใช้สูงสุด 4 คน และไฟล์ proto ของคุณคือสิ่งหลักที่ต้องใช้ในการย้ายออกจาก BloomRPC

Top comments (0)