# content 对接契约 > 负责人:ai09 > 关联:[matrix.md](./matrix.md)、[content.proto](../../../packages/shared-proto/proto/content.proto)、[events.proto](../../../packages/shared-proto/proto/events.proto) --- ## §1 我提供什么(对外接口) ### 1.1 gRPC 接口(如有) | Service | RPC | 请求 | 响应 | 端口 | | --------------------- | ------------------ | ------------------------- | -------------------------- | ----- | | TextbookService | CreateTextbook | CreateTextbookRequest | Textbook | 50054 | | TextbookService | GetTextbook | GetTextbookRequest | Textbook | 50054 | | TextbookService | ListTextbooks | ListTextbooksRequest | ListTextbooksResponse | 50054 | | ChapterService | GetChapter | GetChapterRequest | Chapter | 50054 | | ChapterService | ListChapters | ListChaptersRequest | ListChaptersResponse | 50054 | | ChapterService | CreateChapter | CreateChapterRequest | Chapter | 50054 | | ChapterService | UpdateChapter | UpdateChapterRequest | Chapter | 50054 | | KnowledgeGraphService | GetPrerequisites | GetPrerequisitesRequest | KnowledgePointsResponse | 50054 | | KnowledgeGraphService | GetLearningPath | GetLearningPathRequest | LearningPath | 50054 | | KnowledgeGraphService | AddPrerequisite | AddPrerequisiteRequest | AddPrerequisiteResponse | 50054 | | KnowledgeGraphService | RemovePrerequisite | RemovePrerequisiteRequest | RemovePrerequisiteResponse | 50054 | | QuestionService | CreateQuestion | CreateQuestionRequest | Question | 50054 | | QuestionService | GetQuestion | GetQuestionRequest | Question | 50054 | | QuestionService | ListQuestions | ListQuestionsRequest | ListQuestionsResponse | 50054 | | QuestionService | UpdateQuestion | UpdateQuestionRequest | Question | 50054 | | QuestionService | DeleteQuestion | DeleteQuestionRequest | DeleteQuestionResponse | 50054 | | QuestionService | PublishQuestion | PublishQuestionRequest | PublishQuestionResponse | 50054 | | QuestionService | SearchQuestions | SearchQuestionsRequest | SearchQuestionsResponse | 50054 | ### 1.2 HTTP 端点(如有) 无对外 HTTP 端点,仅 gRPC。 ### 1.3 GraphQL schema(如 BFF) 不适用。 ### 1.4 Kafka 事件发布(如有) | Topic | Event | 消费方 | | ---------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------- | | edu.content.knowledge_point.events | KnowledgePointEvent(action: created/updated/prerequisite_added/prerequisite_removed) | data-ana / ai / Neo4j Sync Worker / ES Sync Worker | | edu.content.question.events | QuestionEvent(action: created/updated/published/deleted) | data-ana | ### 1.5 错误码前缀 `CONTENT_`(如 CONTENT_TEXTBOOK_NOT_FOUND、CONTENT_QUESTION_DUPLICATE) --- ## §2 我消费什么(依赖上游) ### 2.1 gRPC 调用(同步) 无直接 gRPC 调用上游。content 通过 Kafka 事件接收 core-edu 班级/学生变更用于数据一致性。 ### 2.2 Kafka 事件订阅(异步) | Topic | Event | 发布方 | mock 策略 | | ---------------- | --------------------------------- | --------------- | ----------------------------------------------------- | | edu.class.events | ClassEvent(action: transferred) | core-edu (ai08) | core-edu 就绪前不订阅,content 内部不依赖班级实时数据 | | edu.exam.events | ExamEvent | core-edu (ai08) | core-edu 就绪前忽略,题目关联知识点不依赖考试事件 | ### 2.3 HTTP 调用(如有) 无。 --- ## §3 就绪信号 ### 3.1 我依赖的上游就绪标志 - [ ] core-edu gRPC 50053 启用(ai08)—— 用于知识点与班级关联(可选,content 可先独立运行) - [ ] edu.class.events / edu.exam.events topic 有事件发布(ai08) ### 3.2 我的就绪标志(供下游消费) - [ ] content gRPC 50054 启用(HealthService.Check 返回 SERVING) - [ ] TextbookService 3 RPC 可调用 - [ ] ChapterService 4 RPC 可调用 - [ ] KnowledgeGraphService 4 RPC 可调用(GetPrerequisites/GetLearningPath/AddPrerequisite/RemovePrerequisite) - [ ] QuestionService 7 RPC 可调用(含 SearchQuestions 全文检索) - [ ] edu.content.knowledge_point.events / edu.content.question.events topic 可发布 --- ## §4 Mock 策略 ### 4.1 我提供的 mock 在 content 真实服务就绪前,为下游(teacher-bff / student-bff / ai / data-ana)提供以下 mock: - **gRPC mock**:使用 grpc-mock 拦截 50054 端口 - TextbookService.ListTextbooks 返回固定 5 个 Textbook(语数英理化) - ChapterService.ListChapters 返回固定章节树(每教材 10 章) - KnowledgeGraphService.GetLearningPath 返回固定 8 个 KnowledgePoint 推荐顺序 - KnowledgeGraphService.GetPrerequisites 返回固定 3 个前置知识点 - QuestionService.SearchQuestions 返回固定 20 个 Question(含 options) - **Kafka mock**:content 就绪前不发布真实事件,下游使用本地 stub ### 4.2 我消费的 mock 在真实 core-edu 就绪前,content 使用以下 mock: - 班级/学生数据:不依赖 core-edu 实时数据,知识点关联使用固定 subject_id/grade - 事件订阅:不订阅 edu.class.events / edu.exam.events,内部数据自洽