用途:在编辑、审查或审计 PostHog 的 DRF ViewSet 与 Serializer 时使用,触发场景包括 posthog/api/、products/*/backend/api/ 等目录下的文件,以及修复 OpenAPI 规范警告、生成类型问题或为端点准备 MCP 工具暴露。
核心思路:Serializer 字段是 PostHog 类型流水线的源头(Django serializer → drf-spectacular → OpenAPI JSON → Orval → Zod schemas → MCP tools)。缺少 help_text 会导致下游代理猜测参数,裸 ListField() 会生成 z.unknown()。
主要能力与检查项:
- 先检查生成产物定位问题:核心 API 在 frontend/src/generated/core/,产品 API 在 products/<product>/frontend/generated/,查看 api.schemas.ts 与 api.ts 中 unknown 类型、缺失 JSDoc 或缺失端点。
- 序列化器字段:每个字段有 help_text;避免裸 ListField()/DictField(),需指定 child=;避免裸 JSONField(),用 @extend_schema_field(TypedSchema) 自定义字段;SerializerMethodField 的 get_* 方法加 @extend_schema_field;ChoiceField 显式列出 choices;避免易冲突的枚举字段名(format/type/status 等),必要时加 ENUM_NAME_OVERRIDES;输入输出形状不同时读写序列化器分开;成功响应需有序列化器支撑。
- ViewSet 与 action:每个自定义 @action 需 @extend_schema 或 @validated_request;普通 ViewSet 方法需注解;错误响应用 OpenApiResponse(response=ErrorSerializer);列表端点声明分页;优先用 @validated_request;products/ 外的 ViewSet 需 @extend_schema(extensions={"x-product": "<product>"});partial_update 的 request 覆盖须是运行时写字段的超集,改后运行 hogli build:openapi 验证;SSE/流式响应用 request=InputSerializer, responses={(200, "text/event-stream"): OpenApiTypes.STR}。
- 路由:团队嵌套端点注册在 routers.projects 下,写在 products/<name>/backend/routes.py 的 register_routes(routers) 中,产品路由自动发现;不要注册到 environments_router,不要用 dual-route 助手。
- 门面产品(DataclassSerializer):字段类型自动派生,重点补 help_text 与响应声明。
辅助资料包括 quick-reference-table.md、common-anti-patterns.md,代码库示例见 posthog/api/alert.py、products/tasks/backend/api.py 等;枚举冲突可用 python manage.py find_enum_collisions 诊断。
限制:本资料为特定仓库内部规范,不涉及收费、平台或性能承诺;具体模式与示例需查阅随附文档,未提供的信息暂未提供。