graphql
GraphQL API query language with schema. Use for flexible APIs.
Works with
---
name: graphql
description: GraphQL API query language with schema. Use for flexible APIs.
license: MIT
---
# GraphQL
GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. It gives clients the power to ask for exactly what they need and nothing more.
## When to Use
- **Mobile Apps**: Minimize bandwidth by fetching only needed fields.
- **Complex Systems**: Fetching related data (User + Orders + Products) in a single request.
- **Rapid Iteration**: Frontend can change data requirements without Backend changes.
## Quick Start
```graphql
# The Schema
type User {
id: ID!
name: String!
orders: [Order]
}
type Query {
user(id: ID!): User
}
```
```javascript
// The Query (Client)
query {
user(id: "123") {
name
orders {
total
status
}
}
}
```
## Core Concepts
### Schema First
The schema (`.graphql`) is the contract. Teams agree on the schema before writing code.
### Resolvers
Functions that fetch the data for a specific field in the schema.
### Strong Typing
Every field has a specific type (Int, String, Object). Validation happens automatically.
## Common Patterns
### n+1 Problem
Fetching a list of users and then firing a separate DB query for each user's address.
- **Solution**: **DataLoader**. Batches requests into a single query (`WHERE id IN (...)`).
### Federation
Splitting a single GraphQL graph across multiple services (Microservices). Apollo Federation is the standard.
## Best Practices
**Do**:
- Use **Fragments** on the client to reuse query logic.
- Limit **Query Depth** to prevent DoS attacks (e.g., `user { friends { friends { friends ... } } }`).
- Use **Cursor-based Pagination** for infinite scrolling lists.
**Don't**:
- Don't simply wrap a REST API 1:1. Redesign for the Graph.
- Don't utilize it for simple binary file uploads (use Signed URLs + REST/S3 for that).
## Troubleshooting
| Error | Cause | Solution |
| :------------------- | :------------------------ | :----------------------------------------------------- |
| `Cannot query field` | Typo or field restricted. | Check Schema and Introspection. |
| `N+1 Performance` | Slow response on lists. | Implement DataLoader. |
| `Caching` | Hard to cache via HTTP. | Use Normalized Caching in Client (Apollo Client/Urql). |
## References
- [GraphQL.org](https://graphql.org/)
- [Apollo GraphQL](https://www.apollographql.com/)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 时使用。

