rest-api-design
REST API design patterns and MicroProfile OpenAPI documentation. Use when designing endpoints, choosing HTTP methods, status codes, or documenting APIs with OpenAPI annotations.
Works with
---
name: rest-api-design
description: REST API design patterns and MicroProfile OpenAPI documentation. Use when designing endpoints, choosing HTTP methods, status codes, or documenting APIs with OpenAPI annotations.
license: MIT
---
# REST API Design Best Practices
Design consistent, intuitive REST APIs with proper documentation.
---
## Endpoint Design Rules
### Use Nouns, Not Verbs
```java
// ❌ Bad
@GET @Path("/getUsers")
@POST @Path("/createUser")
// ✓ Good
@GET @Path("/users")
@POST @Path("/users")
```
### Use Plural Nouns for Collections
```java
@Path("/users") // Collection
@Path("/users/{id}") // Single resource
@Path("/orders") // Collection
@Path("/orders/{id}") // Single resource
```
### Nest Related Resources (Max 3 Levels)
```java
@Path("/users/{userId}/orders") // User's orders
@Path("/users/{userId}/orders/{orderId}") // Specific order
@Path("/posts/{postId}/comments") // Post's comments
```
**Cookbook**: [endpoint-design.md](./cookbook/endpoint-design.md)
---
## HTTP Methods
| Method | Purpose | Idempotent | Request Body |
| -------- | ---------------- | ---------- | ------------ |
| `GET` | Retrieve | Yes | No |
| `POST` | Create | No | Yes |
| `PUT` | Replace entirely | Yes | Yes |
| `PATCH` | Partial update | Yes | Yes |
| `DELETE` | Remove | Yes | No |
**Cookbook**: [http-methods.md](./cookbook/http-methods.md)
---
## Status Codes
| Code | Meaning | When to Use |
| ---- | -------------------- | -------------------------- |
| 200 | OK | Successful GET, PUT, PATCH |
| 201 | Created | Successful POST |
| 204 | No Content | Successful DELETE |
| 400 | Bad Request | Validation errors |
| 401 | Unauthorized | Missing/invalid auth |
| 403 | Forbidden | Insufficient permissions |
| 404 | Not Found | Resource doesn't exist |
| 422 | Unprocessable Entity | Business rule violation |
| 500 | Internal Error | Unexpected server error |
**Cookbook**: [status-codes.md](./cookbook/status-codes.md)
---
## Filtering & Pagination
```java
@GET
@Path("/products")
public List<Product> list(
@QueryParam("category") String category,
@QueryParam("minPrice") BigDecimal minPrice,
@QueryParam("sort") @DefaultValue("name") String sort,
@QueryParam("page") @DefaultValue("0") int page,
@QueryParam("size") @DefaultValue("20") int size
) { }
```
**Cookbook**: [filtering-pagination.md](./cookbook/filtering-pagination.md)
---
## API Versioning
```java
// URL path versioning (recommended)
@Path("/v1/users")
public class UserResourceV1 { }
@Path("/v2/users")
public class UserResourceV2 { }
```
**Cookbook**: [versioning.md](./cookbook/versioning.md)
---
## MicroProfile OpenAPI Documentation
```java
@Path("/users")
@Tag(name = "Users", description = "User management")
public class UserResource {
@GET
@Path("/{id}")
@Operation(summary = "Get user by ID")
@APIResponse(responseCode = "200", description = "User found")
@APIResponse(responseCode = "404", description = "User not found")
public User getById(@PathParam("id") Long id) { }
}
```
**Cookbook**: [openapi-documentation.md](./cookbook/openapi-documentation.md)
---
## Cookbook Index
**Design**: [Endpoint Design](./cookbook/endpoint-design.md) · [HTTP Methods](./cookbook/http-methods.md)
**Responses**: [Status Codes](./cookbook/status-codes.md)
**Querying**: [Filtering & Pagination](./cookbook/filtering-pagination.md)
**Evolving**: [Versioning](./cookbook/versioning.md)
**Documentation**: [OpenAPI Documentation](./cookbook/openapi-documentation.md)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 时使用。

