grpc
gRPC high-performance RPC framework with protobuf. Use for service communication.
Works with
---
name: grpc
description: gRPC high-performance RPC framework with protobuf. Use for service communication.
license: MIT
---
# gRPC
gRPC is a modern open-source high-performance Remote Procedure Call (RPC) framework that can run in any environment. It uses Protocol Buffers (Protobuf) as its Interface Definition Language (IDL).
## When to Use
- **Microservices Communication**: Low latency, high throughput internal traffic.
- **Polyglot Environments**: Service A (Go) talking to Service B (Java).
- **Streaming**: Bidirectional streaming of data (e.g., Real-time voice/video metadata).
- **Strict Contracts**: When you need strict type safety across services.
## Quick Start
```protobuf
// service.proto
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
```
```go
// Server (Go)
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil
}
```
## Core Concepts
### Protocol Buffers
Binary serialization format. Smaller and faster than JSON.
### HTTP/2
gRPC runs on HTTP/2 by default, enabling Multiplexing (multiple requests over one connection) and Server Push.
### Code Generation
You don't write client libraries manually. You generate them from the `.proto` file for any language (Go, Python, Java, Node, C#).
## Common Patterns
### gRPC-Web
Allows browser clients to talk to gRPC services via a proxy (Envoy).
### Interceptors
Middleware for gRPC. Used for Logging, Auth, and Tracing.
## Best Practices
**Do**:
- Use **Linting** (buf.build) for `.proto` files.
- Manage **Backwards Compatibility** carefully (never change field numbers).
- Use **Deadlines/Timeouts** on every call to prevent resource exhaustion.
**Don't**:
- Don't use gRPC for public browser APIs if simple REST/JSON suffices (proxying adds complexity).
- Don't ignore the `Oneof` feature for union types.
## Troubleshooting
| Error | Cause | Solution |
| :------------------- | :----------------------------------- | :---------------------------------------- |
| `Unavailable (14)` | Server down or network issue. | Implement Exponential Backoff Retry. |
| `Unimplemented (12)` | Service method not found. | Re-generate code and check `.proto` sync. |
| `Message too large` | Payload exceeds limit (4MB default). | Increase limit or use Streaming. |
## References
- [gRPC.io](https://grpc.io/)
- [Protocol Buffers](https://protobuf.dev/)More API Design skills
lark-event
larksuite/cli
Lark/Feishu real-time event listening / subscribing / consuming: stream events as NDJSON via `lark-cli event consume <EventKey>` (covers IM messages/reactions/chat changes, Approval status changes, Task updates, VC meeting started/joined/ended, Minutes generated, Whiteboard updated, etc.). Use for Lark bots, real-time message processing, long-running subscribers, streaming webhook/push handlers. Supports `--max-events` / `--timeout` bounded runs and a stderr ready-marker contract — designed for AI agents running as subprocesses.
lark-contact
larksuite/cli
飞书 / Lark 通讯录:按姓名 / 邮箱解析成 open_id,或按 open_id 反查姓名 / 部门 / 邮箱 / 联系方式 / 个人状态 / 签名,以及按关键词搜索当前用户可见的机器人 / 智能体(agent)。当用户提到一个名字要下一步发消息 / 排日程,或拿到 open_id 想查具体信息时使用。不负责部门树遍历、按部门列员工、组织架构图,这类需求走原生 OpenAPI。
lark-openapi-explorer
larksuite/cli
飞书/Lark 原生 OpenAPI 探索:从官方文档库中挖掘未经 CLI 封装的原生 OpenAPI 接口。当用户的需求无法被现有 lark-* skill 或 lark-cli 已注册命令满足,需要查找并调用原生飞书 OpenAPI 时使用。

