intention-coding 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/config.d.ts +6 -2
  2. package/dist/index.js +6247 -4482
  3. package/dist/services/api-test/add-tasks-to-plan.d.ts +8 -8
  4. package/dist/services/api-test/api-test.d.ts +4 -4
  5. package/dist/services/api-test/index.d.ts +14 -14
  6. package/dist/services/api-test/test-plan.d.ts +10 -10
  7. package/dist/services/api-test/update-task.d.ts +8 -8
  8. package/dist/services/change-summarizer/prompt/change-analysis.d.ts +1 -1
  9. package/dist/services/claude-code/index.d.ts +6 -6
  10. package/dist/services/code-generator/database-manager.d.ts +4 -4
  11. package/dist/services/code-generator/enhanced-tools.d.ts +12 -12
  12. package/dist/services/image-converter/converter.d.ts +84 -0
  13. package/dist/services/image-converter/index.d.ts +132 -0
  14. package/dist/services/index.d.ts +0 -5
  15. package/dist/services/project-template/index.d.ts +7 -7
  16. package/dist/services/project-template/prompt/project-rules.d.ts +1 -0
  17. package/dist/services/requirement-analyzer/chunk-reader.d.ts +37 -0
  18. package/dist/services/requirement-analyzer/index.d.ts +30 -90
  19. package/dist/services/requirement-analyzer/prompt/api-template.d.ts +1 -0
  20. package/dist/services/requirement-analyzer/prompt/app-template.d.ts +1 -0
  21. package/dist/services/requirement-analyzer/prompt/enhanced-feature-extraction.d.ts +1 -0
  22. package/dist/services/requirement-analyzer/prompt/fallback-document.d.ts +1 -0
  23. package/dist/services/requirement-analyzer/prompt/feature-dependency-analysis.d.ts +1 -0
  24. package/dist/services/requirement-analyzer/prompt/feature-extraction.d.ts +2 -0
  25. package/dist/services/requirement-analyzer/prompt/pc-page-template.d.ts +1 -0
  26. package/dist/services/requirement-analyzer/prompt/requirement-analysis.d.ts +2 -0
  27. package/dist/services/requirement-analyzer/prompt/sdk-template.d.ts +1 -0
  28. package/dist/utils/openai.d.ts +31 -0
  29. package/dist/utils/pack.d.ts +1 -1
  30. package/package.json +4 -2
  31. package/dist/prompt/change-analysis.ts +0 -53
  32. package/dist/prompt/initialize-project-standard.xml +0 -66
  33. package/dist/prompt/instructions.md +0 -235
  34. package/dist/prompt/velocity-template-generation.xml +0 -112
  35. package/dist/services/requirement-analyzer/auto-trigger.d.ts +0 -1
  36. package/dist/services/velocity-template/index.d.ts +0 -334
  37. package/dist/utils/openai-service.d.ts +0 -59
@@ -0,0 +1,84 @@
1
+ export interface ConvertImageOptions {
2
+ input_path: string;
3
+ output_format: string;
4
+ quality?: number;
5
+ width?: number;
6
+ height?: number;
7
+ maintain_aspect_ratio?: boolean;
8
+ output_path?: string;
9
+ }
10
+ export interface BatchConvertOptions {
11
+ input_paths: string[];
12
+ output_format: string;
13
+ quality?: number;
14
+ width?: number;
15
+ height?: number;
16
+ maintain_aspect_ratio?: boolean;
17
+ output_directory?: string;
18
+ }
19
+ export interface ConvertResult {
20
+ output_path: string;
21
+ file_size: number;
22
+ dimensions: {
23
+ width: number;
24
+ height: number;
25
+ };
26
+ format: string;
27
+ }
28
+ export interface BatchConvertResult {
29
+ success: boolean;
30
+ output_path?: string;
31
+ error?: string;
32
+ }
33
+ export interface ImageInfo {
34
+ format: string;
35
+ width: number;
36
+ height: number;
37
+ channels: number;
38
+ size: number;
39
+ space?: string;
40
+ }
41
+ export declare class ImageConverter {
42
+ private supportedInputFormats;
43
+ private supportedOutputFormats;
44
+ constructor();
45
+ /**
46
+ * 转换单个图片
47
+ */
48
+ convertImage(options: ConvertImageOptions): Promise<ConvertResult>;
49
+ /**
50
+ * 批量转换图片
51
+ */
52
+ batchConvertImages(options: BatchConvertOptions): Promise<BatchConvertResult[]>;
53
+ /**
54
+ * 获取图片信息
55
+ */
56
+ getImageInfo(imagePath: string): Promise<ImageInfo>;
57
+ /**
58
+ * 获取支持的格式列表
59
+ */
60
+ getSupportedFormats(): {
61
+ input: string[];
62
+ output: string[];
63
+ };
64
+ /**
65
+ * 转换为SVG格式
66
+ */
67
+ private convertToSvg;
68
+ /**
69
+ * 转换为ICO格式(简化版本)
70
+ */
71
+ private convertToIco;
72
+ /**
73
+ * 获取文件格式
74
+ */
75
+ private getFileFormat;
76
+ /**
77
+ * 生成输出文件路径
78
+ */
79
+ private generateOutputPath;
80
+ /**
81
+ * 生成输出文件名
82
+ */
83
+ private generateOutputFilename;
84
+ }
@@ -0,0 +1,132 @@
1
+ import { z } from 'zod';
2
+ declare const ConvertImageArgsSchema: z.ZodObject<{
3
+ input_path: z.ZodString;
4
+ output_format: z.ZodString;
5
+ quality: z.ZodOptional<z.ZodNumber>;
6
+ width: z.ZodOptional<z.ZodNumber>;
7
+ height: z.ZodOptional<z.ZodNumber>;
8
+ maintain_aspect_ratio: z.ZodDefault<z.ZodBoolean>;
9
+ output_path: z.ZodOptional<z.ZodString>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ input_path: string;
12
+ output_format: string;
13
+ maintain_aspect_ratio: boolean;
14
+ quality?: number | undefined;
15
+ width?: number | undefined;
16
+ height?: number | undefined;
17
+ output_path?: string | undefined;
18
+ }, {
19
+ input_path: string;
20
+ output_format: string;
21
+ quality?: number | undefined;
22
+ width?: number | undefined;
23
+ height?: number | undefined;
24
+ maintain_aspect_ratio?: boolean | undefined;
25
+ output_path?: string | undefined;
26
+ }>;
27
+ declare const BatchConvertArgsSchema: z.ZodObject<{
28
+ input_paths: z.ZodArray<z.ZodString, "many">;
29
+ output_format: z.ZodString;
30
+ quality: z.ZodOptional<z.ZodNumber>;
31
+ width: z.ZodOptional<z.ZodNumber>;
32
+ height: z.ZodOptional<z.ZodNumber>;
33
+ maintain_aspect_ratio: z.ZodDefault<z.ZodBoolean>;
34
+ output_directory: z.ZodOptional<z.ZodString>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ output_format: string;
37
+ maintain_aspect_ratio: boolean;
38
+ input_paths: string[];
39
+ quality?: number | undefined;
40
+ width?: number | undefined;
41
+ height?: number | undefined;
42
+ output_directory?: string | undefined;
43
+ }, {
44
+ output_format: string;
45
+ input_paths: string[];
46
+ quality?: number | undefined;
47
+ width?: number | undefined;
48
+ height?: number | undefined;
49
+ maintain_aspect_ratio?: boolean | undefined;
50
+ output_directory?: string | undefined;
51
+ }>;
52
+ export declare const convertImageTool: {
53
+ name: string;
54
+ description: string;
55
+ parameters: z.ZodObject<{
56
+ input_path: z.ZodString;
57
+ output_format: z.ZodString;
58
+ quality: z.ZodOptional<z.ZodNumber>;
59
+ width: z.ZodOptional<z.ZodNumber>;
60
+ height: z.ZodOptional<z.ZodNumber>;
61
+ maintain_aspect_ratio: z.ZodDefault<z.ZodBoolean>;
62
+ output_path: z.ZodOptional<z.ZodString>;
63
+ }, "strip", z.ZodTypeAny, {
64
+ input_path: string;
65
+ output_format: string;
66
+ maintain_aspect_ratio: boolean;
67
+ quality?: number | undefined;
68
+ width?: number | undefined;
69
+ height?: number | undefined;
70
+ output_path?: string | undefined;
71
+ }, {
72
+ input_path: string;
73
+ output_format: string;
74
+ quality?: number | undefined;
75
+ width?: number | undefined;
76
+ height?: number | undefined;
77
+ maintain_aspect_ratio?: boolean | undefined;
78
+ output_path?: string | undefined;
79
+ }>;
80
+ execute: (args: z.infer<typeof ConvertImageArgsSchema>) => Promise<string>;
81
+ };
82
+ export declare const batchConvertImagesTool: {
83
+ name: string;
84
+ description: string;
85
+ parameters: z.ZodObject<{
86
+ input_paths: z.ZodArray<z.ZodString, "many">;
87
+ output_format: z.ZodString;
88
+ quality: z.ZodOptional<z.ZodNumber>;
89
+ width: z.ZodOptional<z.ZodNumber>;
90
+ height: z.ZodOptional<z.ZodNumber>;
91
+ maintain_aspect_ratio: z.ZodDefault<z.ZodBoolean>;
92
+ output_directory: z.ZodOptional<z.ZodString>;
93
+ }, "strip", z.ZodTypeAny, {
94
+ output_format: string;
95
+ maintain_aspect_ratio: boolean;
96
+ input_paths: string[];
97
+ quality?: number | undefined;
98
+ width?: number | undefined;
99
+ height?: number | undefined;
100
+ output_directory?: string | undefined;
101
+ }, {
102
+ output_format: string;
103
+ input_paths: string[];
104
+ quality?: number | undefined;
105
+ width?: number | undefined;
106
+ height?: number | undefined;
107
+ maintain_aspect_ratio?: boolean | undefined;
108
+ output_directory?: string | undefined;
109
+ }>;
110
+ execute: (args: z.infer<typeof BatchConvertArgsSchema>) => Promise<string>;
111
+ };
112
+ export declare const getImageInfoTool: {
113
+ name: string;
114
+ description: string;
115
+ parameters: z.ZodObject<{
116
+ image_path: z.ZodString;
117
+ }, "strip", z.ZodTypeAny, {
118
+ image_path: string;
119
+ }, {
120
+ image_path: string;
121
+ }>;
122
+ execute: (args: {
123
+ image_path: string;
124
+ }) => Promise<string>;
125
+ };
126
+ export declare const listSupportedFormatsTool: {
127
+ name: string;
128
+ description: string;
129
+ parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
130
+ execute: () => Promise<string>;
131
+ };
132
+ export {};
@@ -1,5 +0,0 @@
1
- /**
2
- * Export all services
3
- */
4
- export * from './image-analysis';
5
- export { imageAnalysisTools } from './image-analysis/tools';
@@ -1,26 +1,26 @@
1
1
  import { z } from 'zod';
2
2
  export declare const ProjectTemplateParams: z.ZodObject<{
3
3
  project_name: z.ZodOptional<z.ZodString>;
4
- output_type: z.ZodDefault<z.ZodOptional<z.ZodEnum<["cursorrules", "instructions", "both"]>>>;
4
+ project_path: z.ZodOptional<z.ZodString>;
5
5
  analysis_depth: z.ZodDefault<z.ZodOptional<z.ZodEnum<["basic", "detailed", "comprehensive"]>>>;
6
6
  include_examples: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
7
7
  custom_rules: z.ZodOptional<z.ZodString>;
8
8
  }, "strip", z.ZodTypeAny, {
9
- output_type: "cursorrules" | "instructions" | "both";
10
9
  analysis_depth: "basic" | "detailed" | "comprehensive";
11
10
  include_examples: boolean;
12
11
  project_name?: string | undefined;
12
+ project_path?: string | undefined;
13
13
  custom_rules?: string | undefined;
14
14
  }, {
15
15
  project_name?: string | undefined;
16
- output_type?: "cursorrules" | "instructions" | "both" | undefined;
16
+ project_path?: string | undefined;
17
17
  analysis_depth?: "basic" | "detailed" | "comprehensive" | undefined;
18
18
  include_examples?: boolean | undefined;
19
19
  custom_rules?: string | undefined;
20
20
  }>;
21
21
  export interface ProjectTemplateParams {
22
22
  project_name?: string;
23
- output_type?: 'cursorrules' | 'instructions' | 'both';
23
+ project_path?: string;
24
24
  analysis_depth?: 'basic' | 'detailed' | 'comprehensive';
25
25
  include_examples?: boolean;
26
26
  custom_rules?: string;
@@ -30,19 +30,19 @@ export declare const initProjectStandard: {
30
30
  description: string;
31
31
  parameters: z.ZodObject<{
32
32
  project_name: z.ZodOptional<z.ZodString>;
33
- output_type: z.ZodDefault<z.ZodOptional<z.ZodEnum<["cursorrules", "instructions", "both"]>>>;
33
+ project_path: z.ZodOptional<z.ZodString>;
34
34
  analysis_depth: z.ZodDefault<z.ZodOptional<z.ZodEnum<["basic", "detailed", "comprehensive"]>>>;
35
35
  include_examples: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
36
36
  custom_rules: z.ZodOptional<z.ZodString>;
37
37
  }, "strip", z.ZodTypeAny, {
38
- output_type: "cursorrules" | "instructions" | "both";
39
38
  analysis_depth: "basic" | "detailed" | "comprehensive";
40
39
  include_examples: boolean;
41
40
  project_name?: string | undefined;
41
+ project_path?: string | undefined;
42
42
  custom_rules?: string | undefined;
43
43
  }, {
44
44
  project_name?: string | undefined;
45
- output_type?: "cursorrules" | "instructions" | "both" | undefined;
45
+ project_path?: string | undefined;
46
46
  analysis_depth?: "basic" | "detailed" | "comprehensive" | undefined;
47
47
  include_examples?: boolean | undefined;
48
48
  custom_rules?: string | undefined;
@@ -0,0 +1 @@
1
+ export declare const projectRulesPromptTemplate = "\n\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u8F6F\u4EF6\u5F00\u53D1\u89C4\u8303\u4E13\u5BB6\uFF0C\u8BF7\u57FA\u4E8E\u63D0\u4F9B\u7684\u9879\u76EE\u67B6\u6784\u5206\u6790\uFF0C\u751F\u6210\u4E00\u4EFD\u5B8C\u6574\u7684\u9879\u76EE\u5F00\u53D1\u89C4\u5219\u6587\u4EF6\u3002\n\n## \u9879\u76EE\u4FE1\u606F\n- **\u9879\u76EE\u540D\u79F0**: {{projectName}}\n- **\u5206\u6790\u6DF1\u5EA6**: {{analysisDepth}}\n- **\u5305\u542B\u793A\u4F8B**: {{includeExamples}}\n\n## \u9879\u76EE\u67B6\u6784\u5206\u6790\n```\n{{projectAnalysis}}\n```\n\n{{customRulesSection}}\n\n## \u4EFB\u52A1\u8981\u6C42\n\u8BF7\u57FA\u4E8E\u9879\u76EE\u67B6\u6784\u5206\u6790\uFF0C\u667A\u80FD\u8BC6\u522B\u9879\u76EE\u7684\u6280\u672F\u6808\u548C\u8BED\u8A00\u7279\u5F81\uFF0C\u7136\u540E\u751F\u6210\u4E00\u4EFD\u5B8C\u6574\u7684project_rules.md\u6587\u4EF6\u5185\u5BB9\u3002\n\n### \u6280\u672F\u6808\u8BC6\u522B\u548C\u5206\u6790\u89C4\u5219\n\u8BF7\u5148\u4ED4\u7EC6\u5206\u6790\u9879\u76EE\u7ED3\u6784\uFF0C\u8BC6\u522B\u51FA\u9879\u76EE\u7684\u6280\u672F\u6808\u548C\u67B6\u6784\u6A21\u5F0F\uFF1A\n\n**\u5E38\u89C1\u6280\u672F\u6808\u8BC6\u522B\uFF1A**\n- **Node.js/TypeScript\u9879\u76EE**: package.json, tsconfig.json, *.ts, *.js\n- **Java\u540E\u7AEF\u9879\u76EE**: pom.xml, build.gradle, src/main/java, *.java\n- **Python\u9879\u76EE**: requirements.txt, setup.py, pyproject.toml, *.py\n- **Go\u9879\u76EE**: go.mod, go.sum, *.go\n- **C#/.NET\u9879\u76EE**: *.csproj, *.sln, *.cs\n- **Vue.js\u524D\u7AEF**: package.json, *.vue, vite.config.js\n- **React\u524D\u7AEF**: package.json, *.jsx, *.tsx\n- **\u5FAE\u670D\u52A1\u67B6\u6784**: docker-compose.yml, kubernetes, \u591A\u4E2A\u6A21\u5757\u76EE\u5F55\n- **\u5355\u4F53\u5E94\u7528**: \u4F20\u7EDF\u7684\u5206\u5C42\u67B6\u6784\n\n### \u6587\u4EF6\u5185\u5BB9\u8981\u6C42\n\u751F\u6210\u7684project_rules.md\u6587\u4EF6\u5E94\u8BE5\u5305\u542B\u4EE5\u4E0B\u5177\u4F53\u7AE0\u8282\uFF1A\n\n#### 1. \u9879\u76EE\u6982\u8FF0\n- \u4E3B\u8981\u6280\u672F\u6808\u548C\u7248\u672C\u4FE1\u606F\n- \u67B6\u6784\u6A21\u5F0F\uFF08\u5FAE\u670D\u52A1\u3001\u5355\u4F53\u3001\u5206\u5C42\u7B49\uFF09\n- \u9879\u76EE\u89C4\u6A21\u548C\u590D\u6742\u5EA6\u8BF4\u660E\n\n#### 2. \u76EE\u5F55\u7ED3\u6784\u89C4\u8303\n\u57FA\u4E8E\u5B9E\u9645\u9879\u76EE\u7ED3\u6784\uFF0C\u8BE6\u7EC6\u8BF4\u660E\uFF1A\n- \u5404\u76EE\u5F55\u7684\u4F5C\u7528\u548C\u5B58\u653E\u5185\u5BB9\n- \u6587\u4EF6\u7EC4\u7EC7\u89C4\u5219\n- \u547D\u540D\u7EA6\u5B9A\n\n#### 3. \u4EE3\u7801\u89C4\u8303\n- \u547D\u540D\u89C4\u8303\uFF08\u6587\u4EF6\u3001\u53D8\u91CF\u3001\u51FD\u6570\u3001\u7C7B\u3001\u5E38\u91CF\u7B49\uFF09\n- \u4EE3\u7801\u98CE\u683C\uFF08\u7F29\u8FDB\u3001\u683C\u5F0F\u7B49\uFF09\n- \u6CE8\u91CA\u8981\u6C42\n- \u5BFC\u5165\u89C4\u5219\n\n#### 4. \u6280\u672F\u6808\u4E13\u7528\u89C4\u8303\n\u6839\u636E\u8BC6\u522B\u7684\u6280\u672F\u6808\uFF0C\u5305\u542B\u5177\u4F53\u7684\u89C4\u8303\uFF1A\n- **\u6570\u636E\u5E93\u89C4\u8303**: ORM\u4F7F\u7528\u65B9\u5F0F\u3001\u5B57\u6BB5\u547D\u540D\u3001\u5173\u8054\u5173\u7CFB\u5904\u7406\n- **API\u8BBE\u8BA1\u89C4\u8303**: RESTful\u8BBE\u8BA1\u3001\u53C2\u6570\u6821\u9A8C\u3001\u8FD4\u56DE\u683C\u5F0F\n- **\u524D\u7AEF\u7EC4\u4EF6\u89C4\u8303**: \u7EC4\u4EF6\u547D\u540D\u3001props\u5B9A\u4E49\u3001\u4E8B\u4EF6\u5904\u7406\n- **\u670D\u52A1\u5C42\u89C4\u8303**: \u4E1A\u52A1\u903B\u8F91\u5C01\u88C5\u3001\u4E8B\u52A1\u5904\u7406\u3001\u5F02\u5E38\u5904\u7406\n\n#### 5. \u67B6\u6784\u6A21\u5F0F\u548C\u8BBE\u8BA1\u539F\u5219\n\u6839\u636E\u9879\u76EE\u67B6\u6784\uFF0C\u5305\u542B\uFF1A\n- \u5206\u5C42\u67B6\u6784\u89C4\u5219\uFF08Controller-Service-Repository\u7B49\uFF09\n- \u4F9D\u8D56\u6CE8\u5165\u6A21\u5F0F\n- \u9519\u8BEF\u5904\u7406\u6A21\u5F0F\n- \u6570\u636E\u9A8C\u8BC1\u6A21\u5F0F\n- \u6743\u9650\u63A7\u5236\u6A21\u5F0F\n\n#### 6. \u5F00\u53D1\u6700\u4F73\u5B9E\u8DF5\n\u9488\u5BF9\u9879\u76EE\u6280\u672F\u6808\u7684\u5177\u4F53\u5B9E\u8DF5\uFF1A\n- \u4EE3\u7801\u590D\u7528\u539F\u5219\n- \u7B2C\u4E09\u65B9\u5E93\u4F7F\u7528\u89C4\u8303\n\n#### 7. \u4EE3\u7801\u793A\u4F8B\u548C\u6A21\u677F\n\u5305\u542B\u9879\u76EE\u4E2D\u5E38\u7528\u7684\u4EE3\u7801\u6A21\u5F0F\uFF1A\n- Entity\u5B9A\u4E49\u6A21\u677F\n- Service\u5C42\u65B9\u6CD5\u6A21\u677F\n- Controller\u63A5\u53E3\u6A21\u677F\n- \u5176\u4ED6\u9879\u76EE\u7279\u5B9A\u7684\u5E38\u7528\u6A21\u677F\n\n### \u8F93\u51FA\u8981\u6C42\n1. **\u8BE6\u7EC6\u5177\u4F53**: \u6BCF\u4E2A\u89C4\u5219\u90FD\u8981\u5177\u4F53\u53EF\u64CD\u4F5C\uFF0C\u907F\u514D\u6A21\u7CCA\u63CF\u8FF0\n2. **\u9879\u76EE\u76F8\u5173**: \u57FA\u4E8E\u5B9E\u9645\u9879\u76EE\u7ED3\u6784\u548C\u6280\u672F\u6808\uFF0C\u5305\u542B\u9879\u76EE\u7279\u5B9A\u4FE1\u606F\n3. **\u7ED3\u6784\u6E05\u6670**: \u4F7F\u7528markdown\u683C\u5F0F\uFF0C\u5C42\u6B21\u5206\u660E\n4. **\u5B9E\u7528\u6027\u5F3A**: \u89C4\u5219\u8981\u80FD\u76F4\u63A5\u6307\u5BFC\u65E5\u5E38\u5F00\u53D1\u5DE5\u4F5C\n5. **\u6280\u672F\u51C6\u786E**: \u786E\u4FDD\u89C4\u5219\u4E0E\u9879\u76EE\u6280\u672F\u6808\u548C\u8BED\u8A00\u7279\u6027\u5B8C\u5168\u5339\u914D\n\n\u8BF7\u5C06\u751F\u6210\u7684\u6587\u4EF6\u4FDD\u5B58\u5230\u9879\u76EE\u6839\u76EE\u5F55\u4E0B\u7684.aico\u6587\u4EF6\u5939\u4E2D\uFF0C\u6587\u4EF6\u540D\u4E3Aproject_rules.md\u3002\n";
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 分段读取文件的选项
3
+ */
4
+ interface ChunkReadOptions {
5
+ /** 每次读取的行数,默认100行 */
6
+ linesPerChunk?: number;
7
+ /** 编码格式,默认utf8 */
8
+ encoding?: BufferEncoding;
9
+ }
10
+ /**
11
+ * 分段读取文件的结果
12
+ */
13
+ interface ChunkReadResult {
14
+ /** 当前块的内容 */
15
+ content: string;
16
+ /** 当前块的起始行号(从0开始) */
17
+ startLine: number;
18
+ /** 当前块的结束行号 */
19
+ endLine: number;
20
+ /** 是否是最后一个块 */
21
+ isLastChunk: boolean;
22
+ }
23
+ /**
24
+ * 异步迭代器,用于分段读取大文件
25
+ * @param filePath 文件路径
26
+ * @param options 读取选项
27
+ */
28
+ export declare function readLargeFileInChunks(filePath: string, options?: ChunkReadOptions): AsyncGenerator<ChunkReadResult, void, unknown>;
29
+ /**
30
+ * 读取文件指定行范围的内容
31
+ * @param filePath 文件路径
32
+ * @param startLine 起始行号(包含)
33
+ * @param endLine 结束行号(包含)
34
+ * @returns 指定行范围的内容
35
+ */
36
+ export declare function readFileLines(filePath: string, startLine: number, endLine: number): Promise<string>;
37
+ export {};
@@ -5,29 +5,17 @@ export declare const RequirementAnalyzerParams: z.ZodEffects<z.ZodObject<{
5
5
  md_file_path: z.ZodOptional<z.ZodString>;
6
6
  feature_name: z.ZodString;
7
7
  options: z.ZodDefault<z.ZodOptional<z.ZodObject<{
8
- analysis_depth: z.ZodDefault<z.ZodOptional<z.ZodEnum<["basic", "detailed", "comprehensive"]>>>;
9
- generate_sequence_diagram: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
10
- business_domain: z.ZodOptional<z.ZodString>;
11
- prompt_style: z.ZodDefault<z.ZodOptional<z.ZodEnum<["standard", "technical", "business"]>>>;
12
- include_code_examples: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
13
8
  custom_prompt: z.ZodOptional<z.ZodString>;
14
- language: z.ZodDefault<z.ZodOptional<z.ZodEnum<["zh-CN", "en"]>>>;
9
+ use_streaming: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
10
+ chunk_size: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
15
11
  }, "strip", z.ZodTypeAny, {
16
- analysis_depth: "basic" | "detailed" | "comprehensive";
17
- generate_sequence_diagram: boolean;
18
- prompt_style: "standard" | "technical" | "business";
19
- include_code_examples: boolean;
20
- language: "zh-CN" | "en";
21
- business_domain?: string | undefined;
12
+ chunk_size: number;
13
+ use_streaming: boolean;
22
14
  custom_prompt?: string | undefined;
23
15
  }, {
24
- analysis_depth?: "basic" | "detailed" | "comprehensive" | undefined;
25
- generate_sequence_diagram?: boolean | undefined;
26
- business_domain?: string | undefined;
27
- prompt_style?: "standard" | "technical" | "business" | undefined;
28
- include_code_examples?: boolean | undefined;
16
+ chunk_size?: number | undefined;
29
17
  custom_prompt?: string | undefined;
30
- language?: "zh-CN" | "en" | undefined;
18
+ use_streaming?: boolean | undefined;
31
19
  }>>>;
32
20
  auto_trigger: z.ZodDefault<z.ZodOptional<z.ZodObject<{
33
21
  enable: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
@@ -53,12 +41,8 @@ export declare const RequirementAnalyzerParams: z.ZodEffects<z.ZodObject<{
53
41
  }>>>;
54
42
  }, "strip", z.ZodTypeAny, {
55
43
  options: {
56
- analysis_depth: "basic" | "detailed" | "comprehensive";
57
- generate_sequence_diagram: boolean;
58
- prompt_style: "standard" | "technical" | "business";
59
- include_code_examples: boolean;
60
- language: "zh-CN" | "en";
61
- business_domain?: string | undefined;
44
+ chunk_size: number;
45
+ use_streaming: boolean;
62
46
  custom_prompt?: string | undefined;
63
47
  };
64
48
  input_type: "text" | "md_file";
@@ -77,13 +61,9 @@ export declare const RequirementAnalyzerParams: z.ZodEffects<z.ZodObject<{
77
61
  input_type: "text" | "md_file";
78
62
  feature_name: string;
79
63
  options?: {
80
- analysis_depth?: "basic" | "detailed" | "comprehensive" | undefined;
81
- generate_sequence_diagram?: boolean | undefined;
82
- business_domain?: string | undefined;
83
- prompt_style?: "standard" | "technical" | "business" | undefined;
84
- include_code_examples?: boolean | undefined;
64
+ chunk_size?: number | undefined;
85
65
  custom_prompt?: string | undefined;
86
- language?: "zh-CN" | "en" | undefined;
66
+ use_streaming?: boolean | undefined;
87
67
  } | undefined;
88
68
  content?: string | undefined;
89
69
  md_file_path?: string | undefined;
@@ -97,12 +77,8 @@ export declare const RequirementAnalyzerParams: z.ZodEffects<z.ZodObject<{
97
77
  } | undefined;
98
78
  }>, {
99
79
  options: {
100
- analysis_depth: "basic" | "detailed" | "comprehensive";
101
- generate_sequence_diagram: boolean;
102
- prompt_style: "standard" | "technical" | "business";
103
- include_code_examples: boolean;
104
- language: "zh-CN" | "en";
105
- business_domain?: string | undefined;
80
+ chunk_size: number;
81
+ use_streaming: boolean;
106
82
  custom_prompt?: string | undefined;
107
83
  };
108
84
  input_type: "text" | "md_file";
@@ -121,13 +97,9 @@ export declare const RequirementAnalyzerParams: z.ZodEffects<z.ZodObject<{
121
97
  input_type: "text" | "md_file";
122
98
  feature_name: string;
123
99
  options?: {
124
- analysis_depth?: "basic" | "detailed" | "comprehensive" | undefined;
125
- generate_sequence_diagram?: boolean | undefined;
126
- business_domain?: string | undefined;
127
- prompt_style?: "standard" | "technical" | "business" | undefined;
128
- include_code_examples?: boolean | undefined;
100
+ chunk_size?: number | undefined;
129
101
  custom_prompt?: string | undefined;
130
- language?: "zh-CN" | "en" | undefined;
102
+ use_streaming?: boolean | undefined;
131
103
  } | undefined;
132
104
  content?: string | undefined;
133
105
  md_file_path?: string | undefined;
@@ -146,13 +118,9 @@ export interface RequirementAnalyzerParams {
146
118
  md_file_path?: string;
147
119
  feature_name: string;
148
120
  options?: {
149
- analysis_depth?: 'basic' | 'detailed' | 'comprehensive';
150
- generate_sequence_diagram?: boolean;
151
- business_domain?: string;
152
- prompt_style?: 'standard' | 'technical' | 'business';
153
- include_code_examples?: boolean;
154
121
  custom_prompt?: string;
155
- language?: 'zh-CN' | 'en';
122
+ use_streaming?: boolean;
123
+ chunk_size?: number;
156
124
  };
157
125
  auto_trigger?: {
158
126
  enable?: boolean;
@@ -172,29 +140,17 @@ export declare const requirementAnalyzerTool: {
172
140
  md_file_path: z.ZodOptional<z.ZodString>;
173
141
  feature_name: z.ZodString;
174
142
  options: z.ZodDefault<z.ZodOptional<z.ZodObject<{
175
- analysis_depth: z.ZodDefault<z.ZodOptional<z.ZodEnum<["basic", "detailed", "comprehensive"]>>>;
176
- generate_sequence_diagram: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
177
- business_domain: z.ZodOptional<z.ZodString>;
178
- prompt_style: z.ZodDefault<z.ZodOptional<z.ZodEnum<["standard", "technical", "business"]>>>;
179
- include_code_examples: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
180
143
  custom_prompt: z.ZodOptional<z.ZodString>;
181
- language: z.ZodDefault<z.ZodOptional<z.ZodEnum<["zh-CN", "en"]>>>;
144
+ use_streaming: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
145
+ chunk_size: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
182
146
  }, "strip", z.ZodTypeAny, {
183
- analysis_depth: "basic" | "detailed" | "comprehensive";
184
- generate_sequence_diagram: boolean;
185
- prompt_style: "standard" | "technical" | "business";
186
- include_code_examples: boolean;
187
- language: "zh-CN" | "en";
188
- business_domain?: string | undefined;
147
+ chunk_size: number;
148
+ use_streaming: boolean;
189
149
  custom_prompt?: string | undefined;
190
150
  }, {
191
- analysis_depth?: "basic" | "detailed" | "comprehensive" | undefined;
192
- generate_sequence_diagram?: boolean | undefined;
193
- business_domain?: string | undefined;
194
- prompt_style?: "standard" | "technical" | "business" | undefined;
195
- include_code_examples?: boolean | undefined;
151
+ chunk_size?: number | undefined;
196
152
  custom_prompt?: string | undefined;
197
- language?: "zh-CN" | "en" | undefined;
153
+ use_streaming?: boolean | undefined;
198
154
  }>>>;
199
155
  auto_trigger: z.ZodDefault<z.ZodOptional<z.ZodObject<{
200
156
  enable: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
@@ -220,12 +176,8 @@ export declare const requirementAnalyzerTool: {
220
176
  }>>>;
221
177
  }, "strip", z.ZodTypeAny, {
222
178
  options: {
223
- analysis_depth: "basic" | "detailed" | "comprehensive";
224
- generate_sequence_diagram: boolean;
225
- prompt_style: "standard" | "technical" | "business";
226
- include_code_examples: boolean;
227
- language: "zh-CN" | "en";
228
- business_domain?: string | undefined;
179
+ chunk_size: number;
180
+ use_streaming: boolean;
229
181
  custom_prompt?: string | undefined;
230
182
  };
231
183
  input_type: "text" | "md_file";
@@ -244,13 +196,9 @@ export declare const requirementAnalyzerTool: {
244
196
  input_type: "text" | "md_file";
245
197
  feature_name: string;
246
198
  options?: {
247
- analysis_depth?: "basic" | "detailed" | "comprehensive" | undefined;
248
- generate_sequence_diagram?: boolean | undefined;
249
- business_domain?: string | undefined;
250
- prompt_style?: "standard" | "technical" | "business" | undefined;
251
- include_code_examples?: boolean | undefined;
199
+ chunk_size?: number | undefined;
252
200
  custom_prompt?: string | undefined;
253
- language?: "zh-CN" | "en" | undefined;
201
+ use_streaming?: boolean | undefined;
254
202
  } | undefined;
255
203
  content?: string | undefined;
256
204
  md_file_path?: string | undefined;
@@ -264,12 +212,8 @@ export declare const requirementAnalyzerTool: {
264
212
  } | undefined;
265
213
  }>, {
266
214
  options: {
267
- analysis_depth: "basic" | "detailed" | "comprehensive";
268
- generate_sequence_diagram: boolean;
269
- prompt_style: "standard" | "technical" | "business";
270
- include_code_examples: boolean;
271
- language: "zh-CN" | "en";
272
- business_domain?: string | undefined;
215
+ chunk_size: number;
216
+ use_streaming: boolean;
273
217
  custom_prompt?: string | undefined;
274
218
  };
275
219
  input_type: "text" | "md_file";
@@ -288,13 +232,9 @@ export declare const requirementAnalyzerTool: {
288
232
  input_type: "text" | "md_file";
289
233
  feature_name: string;
290
234
  options?: {
291
- analysis_depth?: "basic" | "detailed" | "comprehensive" | undefined;
292
- generate_sequence_diagram?: boolean | undefined;
293
- business_domain?: string | undefined;
294
- prompt_style?: "standard" | "technical" | "business" | undefined;
295
- include_code_examples?: boolean | undefined;
235
+ chunk_size?: number | undefined;
296
236
  custom_prompt?: string | undefined;
297
- language?: "zh-CN" | "en" | undefined;
237
+ use_streaming?: boolean | undefined;
298
238
  } | undefined;
299
239
  content?: string | undefined;
300
240
  md_file_path?: string | undefined;
@@ -0,0 +1 @@
1
+ export declare const apiTemplatePrompt = "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u540E\u7AEF\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\u3002\u8BF7\u57FA\u4E8E\u7528\u6237\u63D0\u4F9B\u7684\u8F93\u5165\u5185\u5BB9\uFF0C\u751F\u6210\u4E00\u4EFD\u5B8C\u6574\u3001\u8BE6\u7EC6\u7684API\u63A5\u53E3\u6280\u672F\u9700\u6C42\u6587\u6863\u3002\n\n## \u4EFB\u52A1\u8981\u6C42\n- \u5FC5\u987B\u8F93\u51FA\u5B8C\u6574\u7684Markdown\u683C\u5F0F\u6280\u672F\u9700\u6C42\u6587\u6863\n- \u4E0D\u8981\u53EA\u7ED9\u51FA\u603B\u7ED3\uFF0C\u8981\u8F93\u51FA\u5B8C\u6574\u7684\u6587\u6863\u5185\u5BB9\n- \u6BCF\u4E2A\u7AE0\u8282\u90FD\u8981\u6709\u8BE6\u7EC6\u7684\u5185\u5BB9\uFF0C\u4E0D\u80FD\u7701\u7565\n- \u6587\u6863\u957F\u5EA6\u5E94\u8BE5\u57283000\u5B57\u4EE5\u4E0A\n- \u91CD\u70B9\u63CF\u8FF0API\u63A5\u53E3\u8BBE\u8BA1\u3001\u6570\u636E\u7ED3\u6784\u3001\u4EA4\u4E92\u903B\u8F91\u7B49\u540E\u7AEF\u76F8\u5173\u5185\u5BB9\n\n## \u8F93\u5165\u4FE1\u606F\n- **\u529F\u80FD\u540D\u79F0**: {featureName}\n- **\u4E1A\u52A1\u9886\u57DF**: {businessDomain}\n- **\u751F\u6210\u65F6\u5E8F\u56FE**: {generateSequenceDiagram}\n\n## \u539F\u59CB\u9700\u6C42\u5185\u5BB9\n```\n{inputContent}\n```\n\n## \u6587\u6863\u7ED3\u6784\u8981\u6C42\n\u8BF7\u4E25\u683C\u6309\u7167\u4EE5\u4E0B\u7ED3\u6784\u8F93\u51FA\u5B8C\u6574\u7684\u9700\u6C42\u6587\u6863\uFF0C\u6BCF\u4E2A\u7AE0\u8282\u90FD\u8981\u6709\u8BE6\u5B9E\u7684\u5185\u5BB9\uFF1A\n\n# {featureName} - API\u63A5\u53E3\u6280\u672F\u9700\u6C42\u6587\u6863\n\n> **\u751F\u6210\u65F6\u95F4**: {currentTime}\n> **\u4E1A\u52A1\u9886\u57DF**: {businessDomain}\n> **\u63A5\u53E3\u7C7B\u578B**: RESTful API\n\n---\n\n## 1. \u9700\u6C42\u80CC\u666F\n\n**\u80CC\u666F**: [\u8BE6\u7EC6\u63CF\u8FF0API\u63A5\u53E3\u7684\u80CC\u666F\u3001\u4E1A\u52A1\u9700\u6C42\u548C\u76EE\u6807]\n\n**\u5173\u952E\u529F\u80FD**: [\u5217\u51FAAPI\u63A5\u53E3\u7684\u4E3B\u8981\u529F\u80FD\u70B9]\n\n**\u6D89\u53CA\u89D2\u8272**: [\u5217\u51FA\u6240\u6709\u76F8\u5173\u7CFB\u7EDF\u89D2\u8272]\n\n## 2. {featureName}\u529F\u80FD\u8BBE\u8BA1\u8BF4\u660E\n\n| | | | | |\n|---|---|---|---|---|\n|**\u6D41\u7A0B\u7F16\u53F7**|F001|**\u6D41\u7A0B\u540D\u79F0**|{featureName}|\n|**\u4E1A\u52A1\u529F\u80FD\u7F16\u53F7**|BF001|**\u4E1A\u52A1\u529F\u80FD\u540D\u79F0**|{featureName}|\n|**\u529F\u80FD\u8BBE\u8BA1\u7F16\u53F7**|FD001|**\u7CFB\u7EDF\u529F\u80FD\u540D\u79F0**|{featureName}|\n|**\u524D\u7F6E\u6761\u4EF6**|[\u8BE6\u7EC6\u63CF\u8FF0API\u8C03\u7528\u7684\u524D\u7F6E\u6761\u4EF6]|\n|**\u89D2\u8272\uFF08\u5C97\u4F4D\uFF09**|[\u8BE6\u7EC6\u63CF\u8FF0\u8C03\u7528\u65B9\u89D2\u8272\u53CA\u5176\u6743\u9650]|\n|**\u5165\u53E3\u6E20\u9053**|[\u63CF\u8FF0API\u8C03\u7528\u5165\u53E3]|\n|**\u529F\u80FD\u63CF\u8FF0**|[\u8BE6\u7EC6\u7684\u529F\u80FD\u63CF\u8FF0]|\n|**\u8C03\u7528\u80FD\u529B\u57DF/\u4E2D\u5FC3**|[\u5982\u9002\u7528\u7684\u5176\u4ED6\u7CFB\u7EDF\u63A5\u53E3]|\n\n## 3. API\u63A5\u53E3\u8BBE\u8BA1\n\n### 3.1 \u63A5\u53E3\u6982\u8FF0\n[\u8BE6\u7EC6\u63CF\u8FF0API\u63A5\u53E3\u7684\u6574\u4F53\u8BBE\u8BA1\u601D\u8DEF\u548C\u67B6\u6784]\n\n### 3.2 \u63A5\u53E3\u5217\u8868\n[\u5217\u51FA\u6240\u6709\u76F8\u5173\u7684API\u63A5\u53E3]\n\n### 3.3 \u63A5\u53E3\u7248\u672C\u7BA1\u7406\n[\u8BE6\u7EC6\u63CF\u8FF0API\u63A5\u53E3\u7684\u7248\u672C\u7BA1\u7406\u7B56\u7565]\n\n### 3.4 \u63A5\u53E3\u547D\u540D\u89C4\u8303\n[\u8BE6\u7EC6\u63CF\u8FF0API\u63A5\u53E3\u7684\u547D\u540D\u89C4\u8303\u548C\u8BBE\u8BA1\u539F\u5219]\n\n### 3.5 \u63A5\u53E3\u5206\u7EC4\u7B56\u7565\n[\u8BE6\u7EC6\u63CF\u8FF0API\u63A5\u53E3\u7684\u5206\u7EC4\u7B56\u7565\u548C\u7EC4\u7EC7\u7ED3\u6784]\n\n## 4. \u63A5\u53E3\u8BE6\u7EC6\u8BF4\u660E\n\n### 4.1 \u63A5\u53E31 - [\u63A5\u53E3\u540D\u79F0]\n#### 4.1.1 \u57FA\u672C\u4FE1\u606F\n- **\u63A5\u53E3\u5730\u5740**: [URL\u8DEF\u5F84]\n- **\u8BF7\u6C42\u65B9\u6CD5**: [GET/POST/PUT/DELETE\u7B49]\n- **\u534F\u8BAE**: [HTTP/HTTPS]\n- **\u5185\u5BB9\u7C7B\u578B**: [application/json\u7B49]\n\n#### 4.1.2 \u529F\u80FD\u63CF\u8FF0\n[\u8BE6\u7EC6\u63CF\u8FF0\u8BE5\u63A5\u53E3\u7684\u529F\u80FD]\n\n#### 4.1.3 \u8BF7\u6C42\u53C2\u6570\n[\u8BE6\u7EC6\u8BF4\u660E\u8BF7\u6C42\u53C2\u6570]\n\n|\u53C2\u6570\u540D|\u7C7B\u578B|\u662F\u5426\u5FC5\u586B|\u4F4D\u7F6E|\u8BF4\u660E|\n|------|----|--------|----|----|\n|[\u53C2\u65701]|[string/int\u7B49]|[\u662F/\u5426]|[query/body/path]|[\u8BE6\u7EC6\u8BF4\u660E]|\n|[\u53C2\u65702]|[string/int\u7B49]|[\u662F/\u5426]|[query/body/path]|[\u8BE6\u7EC6\u8BF4\u660E]|\n\n#### 4.1.4 \u8BF7\u6C42\u793A\u4F8B\n```json\n[\u8BF7\u6C42\u793A\u4F8BJSON]\n```\n\n#### 4.1.5 \u54CD\u5E94\u53C2\u6570\n[\u8BE6\u7EC6\u8BF4\u660E\u54CD\u5E94\u53C2\u6570]\n\n|\u53C2\u6570\u540D|\u7C7B\u578B|\u8BF4\u660E|\n|------|----|----|\n|[\u53C2\u65701]|[string/object\u7B49]|[\u8BE6\u7EC6\u8BF4\u660E]|\n|[\u53C2\u65702]|[string/object\u7B49]|[\u8BE6\u7EC6\u8BF4\u660E]|\n\n#### 4.1.6 \u54CD\u5E94\u793A\u4F8B\n```json\n[\u6210\u529F\u54CD\u5E94\u793A\u4F8BJSON]\n```\n\n#### 4.1.7 \u9519\u8BEF\u54CD\u5E94\u793A\u4F8B\n```json\n[\u9519\u8BEF\u54CD\u5E94\u793A\u4F8BJSON]\n```\n\n#### 4.1.8 \u9519\u8BEF\u7801\u8BF4\u660E\n[\u8BE6\u7EC6\u8BF4\u660E\u8BE5\u63A5\u53E3\u7684\u9519\u8BEF\u7801]\n\n|\u9519\u8BEF\u7801|\u8BF4\u660E|\n|------|----|\n|[\u9519\u8BEF\u78011]|[\u8BE6\u7EC6\u8BF4\u660E]|\n|[\u9519\u8BEF\u78012]|[\u8BE6\u7EC6\u8BF4\u660E]|\n\n### 4.2 \u63A5\u53E32 - [\u63A5\u53E3\u540D\u79F0]\n[\u6309\u7167\u4E0A\u8FF0\u683C\u5F0F\u7EE7\u7EED\u63CF\u8FF0\u5176\u4ED6\u63A5\u53E3]\n\n## 5. \u6570\u636E\u7ED3\u6784\u5B9A\u4E49\n\n### 5.1 \u8BF7\u6C42\u6570\u636E\u7ED3\u6784\n[\u8BE6\u7EC6\u5B9A\u4E49\u8BF7\u6C42\u6570\u636E\u7684\u7ED3\u6784]\n\n### 5.2 \u54CD\u5E94\u6570\u636E\u7ED3\u6784\n[\u8BE6\u7EC6\u5B9A\u4E49\u54CD\u5E94\u6570\u636E\u7684\u7ED3\u6784]\n\n### 5.3 \u6570\u636E\u6A21\u578B\u8BF4\u660E\n[\u8BE6\u7EC6\u8BF4\u660E\u5404\u6570\u636E\u6A21\u578B\u7684\u5B57\u6BB5\u542B\u4E49\u548C\u7EA6\u675F]\n\n### 5.4 \u6570\u636E\u9A8C\u8BC1\u89C4\u5219\n[\u8BE6\u7EC6\u8BF4\u660E\u6570\u636E\u7684\u9A8C\u8BC1\u89C4\u5219\u548C\u7EA6\u675F\u6761\u4EF6]\n\n### 5.5 \u6570\u636E\u8F6C\u6362\u89C4\u8303\n[\u8BE6\u7EC6\u8BF4\u660E\u6570\u636E\u5728\u4E0D\u540C\u7CFB\u7EDF\u95F4\u7684\u8F6C\u6362\u89C4\u8303]\n\n### 5.6 \u654F\u611F\u6570\u636E\u5904\u7406\n[\u8BE6\u7EC6\u8BF4\u660E\u654F\u611F\u6570\u636E\u7684\u52A0\u5BC6\u548C\u5904\u7406\u8981\u6C42]\n\n## 6. \u4EA4\u4E92\u903B\u8F91\u8BF4\u660E\n\n### 6.1 \u8C03\u7528\u65F6\u5E8F\n[\u8BE6\u7EC6\u63CF\u8FF0API\u8C03\u7528\u7684\u65F6\u5E8F\u903B\u8F91]\n\n### 6.2 \u4E1A\u52A1\u6D41\u7A0B\n[\u8BE6\u7EC6\u63CF\u8FF0API\u6D89\u53CA\u7684\u4E1A\u52A1\u6D41\u7A0B]\n\n### 6.3 \u5F02\u5E38\u5904\u7406\n[\u8BE6\u7EC6\u63CF\u8FF0API\u8C03\u7528\u5F02\u5E38\u7684\u5904\u7406\u903B\u8F91]\n\n### 6.4 \u91CD\u8BD5\u673A\u5236\n[\u8BE6\u7EC6\u63CF\u8FF0API\u8C03\u7528\u5931\u8D25\u65F6\u7684\u91CD\u8BD5\u673A\u5236]\n\n### 6.5 \u72B6\u6001\u7BA1\u7406\n[\u8BE6\u7EC6\u63CF\u8FF0API\u8C03\u7528\u8FC7\u7A0B\u4E2D\u7684\u72B6\u6001\u7BA1\u7406]\n\n### 6.6 \u8D85\u65F6\u5904\u7406\n[\u8BE6\u7EC6\u63CF\u8FF0API\u8C03\u7528\u7684\u8D85\u65F6\u5904\u7406\u673A\u5236]\n\n### 6.7 \u5E76\u53D1\u5904\u7406\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u5E76\u53D1\u8C03\u7528\u5904\u7406\u673A\u5236]\n\n## 7. \u8BA4\u8BC1\u4E0E\u6388\u6743\n\n### 7.1 \u8BA4\u8BC1\u65B9\u5F0F\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u8BA4\u8BC1\u65B9\u5F0F\uFF0C\u5982Token\u3001OAuth\u7B49]\n\n### 7.2 \u6388\u6743\u673A\u5236\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u6388\u6743\u673A\u5236]\n\n### 7.3 \u5B89\u5168\u8981\u6C42\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u5B89\u5168\u8981\u6C42]\n\n### 7.4 \u4F1A\u8BDD\u7BA1\u7406\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u4F1A\u8BDD\u7BA1\u7406\u673A\u5236]\n\n### 7.5 \u8BBF\u95EE\u63A7\u5236\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u8BBF\u95EE\u63A7\u5236\u7B56\u7565]\n\n### 7.6 \u5BA1\u8BA1\u65E5\u5FD7\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u5BA1\u8BA1\u65E5\u5FD7\u8981\u6C42]\n\n## 8. \u6027\u80FD\u8981\u6C42\n\n### 8.1 \u54CD\u5E94\u65F6\u95F4\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u54CD\u5E94\u65F6\u95F4\u8981\u6C42]\n\n### 8.2 \u5E76\u53D1\u5904\u7406\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u5E76\u53D1\u5904\u7406\u80FD\u529B\u8981\u6C42]\n\n### 8.3 \u9650\u6D41\u7B56\u7565\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u9650\u6D41\u7B56\u7565]\n\n### 8.4 \u7F13\u5B58\u7B56\u7565\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u7F13\u5B58\u4F7F\u7528\u7B56\u7565]\n\n### 8.5 \u8D1F\u8F7D\u5747\u8861\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u8D1F\u8F7D\u5747\u8861\u7B56\u7565]\n\n### 8.6 \u76D1\u63A7\u6307\u6807\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u76D1\u63A7\u6307\u6807\u8981\u6C42]\n\n## 9. \u4E1A\u52A1\u5BF9\u8C61\u65F6\u5E8F\u56FE\n\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u8BA4\u8BC1\u670D\u52A1\n participant \u6743\u9650\u670D\u52A1\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u6570\u636E\u5E93\n participant \u7F13\u5B58\u670D\u52A1\n participant \u6D88\u606F\u961F\u5217\n participant \u65E5\u5FD7\u670D\u52A1\n participant \u76D1\u63A7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u8BA4\u8BC1\u670D\u52A1: \u9A8C\u8BC1\u8BF7\u6C42\u4EE4\u724C\n \u8BA4\u8BC1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u8BA4\u8BC1\u7ED3\u679C\n API\u7F51\u5173->>\u6743\u9650\u670D\u52A1: \u68C0\u67E5\u8BBF\u95EE\u6743\u9650\n \u6743\u9650\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u6743\u9650\u4FE1\u606F\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1->>\u7F13\u5B58\u670D\u52A1: \u67E5\u8BE2\u7F13\u5B58\u6570\u636E\n alt \u7F13\u5B58\u547D\u4E2D\n \u7F13\u5B58\u670D\u52A1-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u7F13\u5B58\u6570\u636E\n \u4E1A\u52A1\u670D\u52A1->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u7F13\u5B58\u547D\u4E2D\n else \u7F13\u5B58\u672A\u547D\u4E2D\n \u4E1A\u52A1\u670D\u52A1->>\u6570\u636E\u5E93: \u67E5\u8BE2\u6570\u636E\n \u6570\u636E\u5E93-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u67E5\u8BE2\u7ED3\u679C\n \u4E1A\u52A1\u670D\u52A1->>\u7F13\u5B58\u670D\u52A1: \u5B58\u50A8\u5230\u7F13\u5B58\n \u4E1A\u52A1\u670D\u52A1->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u6570\u636E\u5E93\u67E5\u8BE2\n end\n \u4E1A\u52A1\u670D\u52A1->>\u6D88\u606F\u961F\u5217: \u53D1\u9001\u5F02\u6B65\u6D88\u606F\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u54CD\u5E94\u6570\u636E\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u8BBF\u95EE\u65E5\u5FD7\n API\u7F51\u5173->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u6027\u80FD\u6307\u6807\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n```\n\n### 9.2 \u66FF\u4EE3\u6D41\u7A0B\uFF08\u4E0D\u540C\u6709\u6548\u8DEF\u5F84\uFF09\n\n#### 9.2.1 \u8BA4\u8BC1/\u6388\u6743\u6D41\u7A0B\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u8BA4\u8BC1\u670D\u52A1\n participant \u6743\u9650\u670D\u52A1\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u8BA4\u8BC1\u670D\u52A1: \u9A8C\u8BC1\u8BF7\u6C42\u4EE4\u724C\n alt \u4EE4\u724C\u6709\u6548\n \u8BA4\u8BC1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u8BA4\u8BC1\u6210\u529F\n API\u7F51\u5173->>\u6743\u9650\u670D\u52A1: \u68C0\u67E5\u8BBF\u95EE\u6743\u9650\n \u6743\u9650\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u6743\u9650\u4FE1\u606F\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u54CD\u5E94\u6570\u636E\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n else \u4EE4\u724C\u65E0\u6548\n \u8BA4\u8BC1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u8BA4\u8BC1\u5931\u8D25\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u8BA4\u8BC1\u5931\u8D25\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE401\u9519\u8BEF\n end\n```\n\n#### 9.2.2 \u9519\u8BEF\u5904\u7406\u6D41\u7A0B\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u6570\u636E\u5E93\n participant \u65E5\u5FD7\u670D\u52A1\n participant \u76D1\u63A7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1->>\u6570\u636E\u5E93: \u67E5\u8BE2\u6570\u636E\n \u6570\u636E\u5E93-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u6570\u636E\u5E93\u9519\u8BEF\n \u4E1A\u52A1\u670D\u52A1->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u9519\u8BEF\u65E5\u5FD7\n \u4E1A\u52A1\u670D\u52A1->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u9519\u8BEF\u6307\u6807\n \u4E1A\u52A1\u670D\u52A1->>\u4E1A\u52A1\u670D\u52A1: \u6267\u884C\u9519\u8BEF\u6062\u590D\u903B\u8F91\n alt \u9519\u8BEF\u53EF\u6062\u590D\n \u4E1A\u52A1\u670D\u52A1->>\u6570\u636E\u5E93: \u91CD\u8BD5\u67E5\u8BE2\n \u6570\u636E\u5E93-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u67E5\u8BE2\u7ED3\u679C\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u54CD\u5E94\u6570\u636E\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n else \u9519\u8BEF\u4E0D\u53EF\u6062\u590D\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u9519\u8BEF\u54CD\u5E94\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE500\u9519\u8BEF\n end\n```\n\n#### 9.2.3 API\u6587\u6863\u81EA\u52A8\u751F\u6210\u6D41\u7A0B\n```mermaid\nsequenceDiagram\n participant \u5F00\u53D1\u8005\n participant API\u7F51\u5173\n participant \u6587\u6863\u751F\u6210\u5668\n participant \u7248\u672C\u7BA1\u7406\u5668\n participant \u5B58\u50A8\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5F00\u53D1\u8005->>API\u7F51\u5173: \u90E8\u7F72\u65B0API\u7248\u672C\n API\u7F51\u5173->>\u6587\u6863\u751F\u6210\u5668: \u89E6\u53D1\u6587\u6863\u751F\u6210\n \u6587\u6863\u751F\u6210\u5668->>\u7248\u672C\u7BA1\u7406\u5668: \u83B7\u53D6API\u89C4\u8303\n \u7248\u672C\u7BA1\u7406\u5668-->>\u6587\u6863\u751F\u6210\u5668: \u8FD4\u56DEAPI\u5B9A\u4E49\n \u6587\u6863\u751F\u6210\u5668->>\u6587\u6863\u751F\u6210\u5668: \u89E3\u6790API\u7ED3\u6784\n \u6587\u6863\u751F\u6210\u5668->>\u5B58\u50A8\u670D\u52A1: \u4FDD\u5B58\u6587\u6863\u7248\u672C\n \u5B58\u50A8\u670D\u52A1-->>\u6587\u6863\u751F\u6210\u5668: \u786E\u8BA4\u4FDD\u5B58\u6210\u529F\n \u6587\u6863\u751F\u6210\u5668-->>API\u7F51\u5173: \u8FD4\u56DE\u6587\u6863\u751F\u6210\u7ED3\u679C\n API\u7F51\u5173->>\u5F00\u53D1\u8005: \u901A\u77E5\u6587\u6863\u751F\u6210\u5B8C\u6210\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u6587\u6863\u751F\u6210\u65E5\u5FD7\n```\n\n### 9.3 \u5F02\u5E38\u6D41\u7A0B\uFF08\u9519\u8BEF\u5904\u7406\uFF09\n\n#### 9.3.1 \u9650\u6D41\u5904\u7406\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u9650\u6D41\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u9650\u6D41\u670D\u52A1: \u68C0\u67E5\u8BF7\u6C42\u9891\u7387\n \u9650\u6D41\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u9650\u6D41\u51B3\u5B9A\n alt \u8BF7\u6C42\u9891\u7387\u6B63\u5E38\n API\u7F51\u5173->>\u540E\u7EED\u670D\u52A1: \u5904\u7406\u8BF7\u6C42\n else \u8BF7\u6C42\u9891\u7387\u8FC7\u9AD8\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u9650\u6D41\u4E8B\u4EF6\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE429\u9519\u8BEF(\u8BF7\u6C42\u8FC7\u591A)\n end\n```\n\n#### 9.3.2 \u6570\u636E\u9A8C\u8BC1\u51B2\u7A81\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u6570\u636E\u9A8C\u8BC1\u5668\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001\u5305\u542B\u65E0\u6548\u6570\u636E\u7684\u8BF7\u6C42\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1->>\u6570\u636E\u9A8C\u8BC1\u5668: \u9A8C\u8BC1\u6570\u636E\u683C\u5F0F\n \u6570\u636E\u9A8C\u8BC1\u5668-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u9A8C\u8BC1\u5931\u8D25\n \u4E1A\u52A1\u670D\u52A1->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u9A8C\u8BC1\u9519\u8BEF\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE400\u9519\u8BEF(\u8BF7\u6C42\u6570\u636E\u65E0\u6548)\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE400\u9519\u8BEF\u53CA\u9519\u8BEF\u8BE6\u60C5\n```\n\n#### 9.3.3 API Schema\u9A8C\u8BC1\u9519\u8BEF\n```mermaid\nsequenceDiagram\n participant \u5F00\u53D1\u8005\n participant API\u7F51\u5173\n participant Schema\u9A8C\u8BC1\u5668\n participant \u7248\u672C\u7BA1\u7406\u5668\n participant \u65E5\u5FD7\u670D\u52A1\n participant \u76D1\u63A7\u670D\u52A1\n \n \u5F00\u53D1\u8005->>API\u7F51\u5173: \u90E8\u7F72API\u5B9A\u4E49\n API\u7F51\u5173->>Schema\u9A8C\u8BC1\u5668: \u9A8C\u8BC1API Schema\n Schema\u9A8C\u8BC1\u5668->>\u7248\u672C\u7BA1\u7406\u5668: \u83B7\u53D6\u5386\u53F2\u7248\u672C\n \u7248\u672C\u7BA1\u7406\u5668-->>Schema\u9A8C\u8BC1\u5668: \u8FD4\u56DE\u5386\u53F2\u5B9A\u4E49\n Schema\u9A8C\u8BC1\u5668->>Schema\u9A8C\u8BC1\u5668: \u6267\u884C\u517C\u5BB9\u6027\u68C0\u67E5\n alt Schema\u6709\u6548\n Schema\u9A8C\u8BC1\u5668-->>API\u7F51\u5173: \u8FD4\u56DE\u9A8C\u8BC1\u901A\u8FC7\n API\u7F51\u5173->>\u5F00\u53D1\u8005: \u901A\u77E5\u90E8\u7F72\u6210\u529F\n else Schema\u65E0\u6548\n Schema\u9A8C\u8BC1\u5668-->>API\u7F51\u5173: \u8FD4\u56DE\u9A8C\u8BC1\u5931\u8D25\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55Schema\u9519\u8BEF\n API\u7F51\u5173->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u9A8C\u8BC1\u5931\u8D25\u6307\u6807\n API\u7F51\u5173->>\u5F00\u53D1\u8005: \u8FD4\u56DE\u9519\u8BEF\u8BE6\u60C5\u548C\u4FEE\u590D\u5EFA\u8BAE\n end\n```\n\n### 9.4 \u8FB9\u7F18\u60C5\u51B5\u6D41\u7A0B\uFF08\u5E76\u53D1\u3001\u8D85\u65F6\u7B49\uFF09\n\n#### 9.4.1 API\u7248\u672C\u7BA1\u7406\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u7248\u672C\u7BA1\u7406\u5668\n participant \u4E1A\u52A1\u670D\u52A1v1\n participant \u4E1A\u52A1\u670D\u52A1v2\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001\u5E26\u7248\u672C\u53F7\u7684API\u8BF7\u6C42\n API\u7F51\u5173->>\u7248\u672C\u7BA1\u7406\u5668: \u89E3\u6790API\u7248\u672C\n \u7248\u672C\u7BA1\u7406\u5668-->>API\u7F51\u5173: \u8FD4\u56DE\u7248\u672C\u4FE1\u606F\n alt \u8BF7\u6C42v1\u7248\u672C\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1v1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1v1-->>API\u7F51\u5173: \u8FD4\u56DE\u54CD\u5E94\n else \u8BF7\u6C42v2\u7248\u672C\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1v2: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1v2-->>API\u7F51\u5173: \u8FD4\u56DE\u54CD\u5E94\n end\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n```\n\n#### 9.4.2 \u6027\u80FD/\u53EF\u6269\u5C55\u6027\u8981\u6C42\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant \u8D1F\u8F7D\u5747\u8861\u5668\n participant API\u7F51\u51731\n participant API\u7F51\u51732\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u6570\u636E\u5E93\n participant \u7F13\u5B58\u670D\u52A1\n participant \u76D1\u63A7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>\u8D1F\u8F7D\u5747\u8861\u5668: \u53D1\u9001API\u8BF7\u6C42\n \u8D1F\u8F7D\u5747\u8861\u5668->>API\u7F51\u51731: \u5206\u53D1\u8BF7\u6C42(\u8F6E\u8BE2\u7B56\u7565)\n API\u7F51\u51731->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1->>\u7F13\u5B58\u670D\u52A1: \u67E5\u8BE2\u7F13\u5B58\n alt \u7F13\u5B58\u547D\u4E2D\n \u7F13\u5B58\u670D\u52A1-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u7F13\u5B58\u6570\u636E\n else \u7F13\u5B58\u672A\u547D\u4E2D\n \u4E1A\u52A1\u670D\u52A1->>\u6570\u636E\u5E93: \u67E5\u8BE2\u6570\u636E\n \u6570\u636E\u5E93-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u67E5\u8BE2\u7ED3\u679C\n \u4E1A\u52A1\u670D\u52A1->>\u7F13\u5B58\u670D\u52A1: \u5B58\u50A8\u5230\u7F13\u5B58\n end\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u51731: \u8FD4\u56DE\u54CD\u5E94\u6570\u636E\n API\u7F51\u51731->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u6027\u80FD\u6307\u6807\n API\u7F51\u51731->>\u8D1F\u8F7D\u5747\u8861\u5668: \u8FD4\u56DE\u54CD\u5E94\n \u8D1F\u8F7D\u5747\u8861\u5668->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n```\n\n#### 9.4.3 API\u6027\u80FD\u964D\u7EA7\u5904\u7406\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u6027\u80FD\u76D1\u63A7\u5668\n participant \u964D\u7EA7\u7B56\u7565\u5668\n participant \u7F13\u5B58\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u6027\u80FD\u76D1\u63A7\u5668: \u68C0\u67E5\u670D\u52A1\u6027\u80FD\n \u6027\u80FD\u76D1\u63A7\u5668-->>API\u7F51\u5173: \u8FD4\u56DE\u6027\u80FD\u72B6\u6001\n alt \u6027\u80FD\u6B63\u5E38\n API\u7F51\u5173->>\u540E\u7EED\u670D\u52A1: \u6B63\u5E38\u5904\u7406\u8BF7\u6C42\n \u540E\u7EED\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u5B8C\u6574\u54CD\u5E94\n else \u6027\u80FD\u964D\u7EA7\n API\u7F51\u5173->>\u964D\u7EA7\u7B56\u7565\u5668: \u5E94\u7528\u964D\u7EA7\u7B56\u7565\n \u964D\u7EA7\u7B56\u7565\u5668-->>API\u7F51\u5173: \u8FD4\u56DE\u964D\u7EA7\u914D\u7F6E\n API\u7F51\u5173->>\u7F13\u5B58\u670D\u52A1: \u83B7\u53D6\u7F13\u5B58\u6570\u636E\n \u7F13\u5B58\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u7F13\u5B58\u54CD\u5E94\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u964D\u7EA7\u4E8B\u4EF6\n end\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n```\n\n## 10. \u4E1A\u52A1\u72B6\u6001\u63CF\u8FF0\n\n| | | |\n|---|---|---|\n|**\u72B6\u6001\u7F16\u53F7**|**\u72B6\u6001\u540D\u79F0**|**\u63CF\u8FF0**|\n|01|\u8BF7\u6C42\u63A5\u6536|API\u63A5\u6536\u5230\u8BF7\u6C42|\n|02|\u53C2\u6570\u9A8C\u8BC1|\u6B63\u5728\u9A8C\u8BC1\u8BF7\u6C42\u53C2\u6570|\n|03|\u4E1A\u52A1\u5904\u7406|\u6B63\u5728\u5904\u7406\u4E1A\u52A1\u903B\u8F91|\n|04|\u6570\u636E\u64CD\u4F5C|\u6B63\u5728\u6267\u884C\u6570\u636E\u64CD\u4F5C|\n|05|\u54CD\u5E94\u8FD4\u56DE|\u6B63\u5728\u8FD4\u56DE\u54CD\u5E94|\n|06|\u5904\u7406\u5B8C\u6210|\u8BF7\u6C42\u5904\u7406\u5B8C\u6210|\n|[\u6DFB\u52A0\u66F4\u591A\u72B6\u6001...]||\n\n## 11. \u5904\u7406\u903B\u8F91\u8BE6\u7EC6\u8BF4\u660E\n\n### 11.1 \u8BF7\u6C42\u5904\u7406\u903B\u8F91\n[\u8BE6\u7EC6\u63CF\u8FF0API\u8BF7\u6C42\u7684\u5904\u7406\u903B\u8F91]\n\n### 11.2 \u53C2\u6570\u9A8C\u8BC1\u903B\u8F91\n[\u8BE6\u7EC6\u63CF\u8FF0\u8BF7\u6C42\u53C2\u6570\u7684\u9A8C\u8BC1\u903B\u8F91]\n\n### 11.3 \u4E1A\u52A1\u5904\u7406\u903B\u8F91\n[\u8BE6\u7EC6\u63CF\u8FF0\u4E1A\u52A1\u903B\u8F91\u7684\u5904\u7406\u8FC7\u7A0B]\n\n### 11.4 \u6570\u636E\u64CD\u4F5C\u903B\u8F91\n[\u8BE6\u7EC6\u63CF\u8FF0\u6570\u636E\u64CD\u4F5C\u7684\u5904\u7406\u903B\u8F91]\n\n### 11.5 \u54CD\u5E94\u751F\u6210\u903B\u8F91\n[\u8BE6\u7EC6\u63CF\u8FF0\u54CD\u5E94\u6570\u636E\u7684\u751F\u6210\u903B\u8F91]\n\n### 11.6 \u9519\u8BEF\u5904\u7406\u903B\u8F91\n[\u8BE6\u7EC6\u63CF\u8FF0\u9519\u8BEF\u60C5\u51B5\u7684\u5904\u7406\u903B\u8F91]\n\n### 11.7 \u4E8B\u52A1\u7BA1\u7406\u903B\u8F91\n[\u8BE6\u7EC6\u63CF\u8FF0API\u8C03\u7528\u4E2D\u7684\u4E8B\u52A1\u7BA1\u7406\u903B\u8F91]\n\n## 12. \u76D1\u63A7\u4E0E\u65E5\u5FD7\n\n### 12.1 \u76D1\u63A7\u6307\u6807\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u76D1\u63A7\u6307\u6807]\n\n### 12.2 \u65E5\u5FD7\u8BB0\u5F55\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u65E5\u5FD7\u8BB0\u5F55\u8981\u6C42]\n\n### 12.3 \u544A\u8B66\u673A\u5236\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u544A\u8B66\u673A\u5236]\n\n### 12.4 \u6027\u80FD\u5206\u6790\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u6027\u80FD\u5206\u6790\u8981\u6C42]\n\n### 12.5 \u9519\u8BEF\u8FFD\u8E2A\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u9519\u8BEF\u8FFD\u8E2A\u8981\u6C42]\n\n### 12.6 \u8BBF\u95EE\u7EDF\u8BA1\n[\u8BE6\u7EC6\u63CF\u8FF0API\u7684\u8BBF\u95EE\u7EDF\u8BA1\u8981\u6C42]\n\n## 13. \u6D4B\u8BD5\u8981\u6C42\n\n### 13.1 \u529F\u80FD\u6D4B\u8BD5\n[\u8BE6\u7EC6\u63CF\u8FF0API\u529F\u80FD\u7684\u6D4B\u8BD5\u8981\u6C42]\n\n### 13.2 \u6027\u80FD\u6D4B\u8BD5\n[\u8BE6\u7EC6\u63CF\u8FF0API\u6027\u80FD\u7684\u6D4B\u8BD5\u8981\u6C42]\n\n### 13.3 \u5B89\u5168\u6D4B\u8BD5\n[\u8BE6\u7EC6\u63CF\u8FF0API\u5B89\u5168\u6027\u7684\u6D4B\u8BD5\u8981\u6C42]\n\n### 13.4 \u517C\u5BB9\u6027\u6D4B\u8BD5\n[\u8BE6\u7EC6\u63CF\u8FF0API\u517C\u5BB9\u6027\u7684\u6D4B\u8BD5\u8981\u6C42]\n\n### 13.5 \u538B\u529B\u6D4B\u8BD5\n[\u8BE6\u7EC6\u63CF\u8FF0API\u538B\u529B\u6D4B\u8BD5\u7684\u8981\u6C42]\n\n### 13.6 \u56DE\u5F52\u6D4B\u8BD5\n[\u8BE6\u7EC6\u63CF\u8FF0API\u56DE\u5F52\u6D4B\u8BD5\u7684\u8981\u6C42]\n\n## 14. \u4F2A\u4EE3\u7801\u793A\u4F8B\n\n```gherkin\nScenario Outline: \u7528\u6237\u901A\u8FC7API\u67E5\u8BE2\u8BA2\u5355\u4FE1\u606F\n Given \u7528\u6237\u5DF2\u901A\u8FC7\u8BA4\u8BC1\u5E76\u62E5\u6709\u67E5\u8BE2\u6743\u9650\n When \u7528\u6237\u5411/orders/<order_id>\u63A5\u53E3\u53D1\u9001GET\u8BF7\u6C42\n Then \u7CFB\u7EDF\u5E94\u8FD4\u56DE\u8BA2\u5355\u4FE1\u606F\u6216 <error_message>\n\n Examples:\n | order_id | error_message |\n | 12345 | null (\u6210\u529F\u8FD4\u56DE\u8BA2\u5355\u4FE1\u606F) |\n | 99999 | \"\u8BA2\u5355\u4E0D\u5B58\u5728\" |\n\nScenario Outline: API\u8BA4\u8BC1\u4E0E\u6388\u6743\u6D41\u7A0B\n Given \u5BA2\u6237\u7AEF\u4F7F\u7528<auth_type>\u65B9\u5F0F\u8FDB\u884C\u8BA4\u8BC1\n When \u5BA2\u6237\u7AEF\u8BBF\u95EE<api_endpoint>\u63A5\u53E3\u65F6\n Then \u7CFB\u7EDF\u5E94:\n 1. \u9A8C\u8BC1\u8BA4\u8BC1\u51ED\u8BC1\u7684\u6709\u6548\u6027\n 2. \u68C0\u67E5\u7528\u6237\u6743\u9650\n 3. \u6839\u636E\u9A8C\u8BC1\u7ED3\u679C\u8FD4\u56DE\u76F8\u5E94\u54CD\u5E94\n\n Examples:\n | auth_type | api_endpoint | \u9884\u671F\u884C\u4E3A |\n | Bearer Token | /orders | \u9A8C\u8BC1\u4EE4\u724C\u6709\u6548\u6027\uFF0C\u68C0\u67E5\u8BA2\u5355\u8BBF\u95EE\u6743\u9650 |\n | API Key | /products | \u9A8C\u8BC1API Key\uFF0C\u68C0\u67E5\u4EA7\u54C1\u8BBF\u95EE\u6743\u9650 |\n | \u65E0\u6548\u4EE4\u724C | /orders | \u8FD4\u56DE401\u672A\u6388\u6743\u9519\u8BEF |\n | \u65E0\u6743\u9650\u7528\u6237 | /admin | \u8FD4\u56DE403\u7981\u6B62\u8BBF\u95EE\u9519\u8BEF |\n\nScenario Outline: API\u8C03\u7528\u4E0E\u6570\u636E\u5904\u7406\u6D41\u7A0B\n Given \u5BA2\u6237\u7AEF\u5411<api_endpoint>\u53D1\u9001<http_method>\u8BF7\u6C42\n When \u8BF7\u6C42\u5305\u542B<data_status>\u6570\u636E\u65F6\n Then \u7CFB\u7EDF\u5E94:\n 1. \u9A8C\u8BC1\u8BF7\u6C42\u53C2\u6570\u683C\u5F0F\n 2. \u6267\u884C\u4E1A\u52A1\u903B\u8F91\u5904\u7406\n 3. \u8FD4\u56DE\u6807\u51C6\u5316\u54CD\u5E94\u683C\u5F0F\n\n Examples:\n | api_endpoint | http_method | data_status | \u5904\u7406\u903B\u8F91 |\n | /users | POST | \u6709\u6548\u6570\u636E | \u521B\u5EFA\u65B0\u7528\u6237\uFF0C\u8FD4\u56DE\u7528\u6237ID\u548C\u521B\u5EFA\u65F6\u95F4 |\n | /users | POST | \u7F3A\u5931\u5FC5\u586B\u9879 | \u8FD4\u56DE400\u9519\u8BEF\uFF0C\u8BE6\u7EC6\u8BF4\u660E\u7F3A\u5931\u5B57\u6BB5 |\n | /users/123 | PUT | \u66F4\u65B0\u6570\u636E | \u66F4\u65B0\u7528\u6237\u4FE1\u606F\uFF0C\u8FD4\u56DE\u66F4\u65B0\u540E\u7684\u5B8C\u6574\u7528\u6237\u4FE1\u606F |\n | /users/123 | DELETE | \u5B58\u5728\u8D44\u6E90 | \u5220\u9664\u7528\u6237\uFF0C\u8FD4\u56DE204\u72B6\u6001\u7801 |\n | /users/999 | GET | \u4E0D\u5B58\u5728\u8D44\u6E90 | \u8FD4\u56DE404\u9519\u8BEF\uFF0C\u8BF4\u660E\u8D44\u6E90\u672A\u627E\u5230 |\n | /users | GET | \u5927\u91CF\u6570\u636E | \u5206\u9875\u8FD4\u56DE\u7528\u6237\u5217\u8868\uFF0C\u5305\u542B\u603B\u6570\u548C\u5206\u9875\u4FE1\u606F |\n\nScenario Outline: API\u9650\u6D41\u4E0E\u9519\u8BEF\u6062\u590D\u5904\u7406\n Given \u5BA2\u6237\u7AEF\u5728<time_window>\u5185\u53D1\u9001<request_count>\u4E2A\u8BF7\u6C42\n When \u7CFB\u7EDF\u68C0\u6D4B\u5230<traffic_pattern>\u65F6\n Then \u7CFB\u7EDF\u5E94:\n 1. \u5E94\u7528\u9650\u6D41\u7B56\u7565\u63A7\u5236\u8BF7\u6C42\u9891\u7387\n 2. \u8FD4\u56DE\u9002\u5F53\u7684\u9650\u6D41\u54CD\u5E94\u7801\n 3. \u63D0\u4F9B\u91CD\u8BD5\u5EFA\u8BAE\u548C\u65F6\u95F4\u7A97\u53E3\u4FE1\u606F\n\n Examples:\n | time_window | request_count | traffic_pattern | \u9650\u6D41\u7B56\u7565 |\n | 1\u5206\u949F | 60\u4E2A\u8BF7\u6C42 | \u6B63\u5E38\u6D41\u91CF | \u5141\u8BB8\u8BF7\u6C42\u901A\u8FC7\uFF0C\u8BB0\u5F55\u8BBF\u95EE\u65E5\u5FD7 |\n | 1\u5206\u949F | 120\u4E2A\u8BF7\u6C42 | \u7A81\u53D1\u6D41\u91CF | \u8FD4\u56DE429\u72B6\u6001\u7801\uFF0C\u5EFA\u8BAE\u7B49\u5F8530\u79D2\u540E\u91CD\u8BD5 |\n | 1\u5206\u949F | 1000\u4E2A\u8BF7\u6C42 | \u6076\u610F\u653B\u51FB | \u7ACB\u5373\u62D2\u7EDD\u8BF7\u6C42\uFF0C\u8BB0\u5F55IP\u5E76\u89E6\u53D1\u5B89\u5168\u9632\u62A4\u673A\u5236 |\n | 5\u5206\u949F | 50\u4E2A\u8BF7\u6C42 | \u5468\u671F\u6027\u8BF7\u6C42 | \u5141\u8BB8\u8BF7\u6C42\u901A\u8FC7\uFF0C\u4F18\u5316\u7F13\u5B58\u7B56\u7565\u63D0\u5347\u54CD\u5E94\u901F\u5EA6 |\n | 1\u5C0F\u65F6 | 10000\u4E2A\u8BF7\u6C42 | \u6B63\u5E38\u4E1A\u52A1\u9AD8\u5CF0 | \u52A8\u6001\u8C03\u6574\u9650\u6D41\u9608\u503C\uFF0C\u542F\u7528\u8D1F\u8F7D\u5747\u8861\u7B56\u7565 |\n```\n\n---\n\n**\u91CD\u8981\u63D0\u9192**: \n1. \u8BF7\u8F93\u51FA\u5B8C\u6574\u7684Markdown\u6587\u6863\uFF0C\u4E0D\u8981\u7701\u7565\u4EFB\u4F55\u7AE0\u8282\n2. \u6BCF\u4E2A\u7AE0\u8282\u90FD\u8981\u6709\u5B9E\u8D28\u6027\u7684\u5185\u5BB9\uFF0C\u4E0D\u80FD\u53EA\u662F\u6A21\u677F\n3. \u6839\u636E\u8F93\u5165\u7684\u539F\u59CB\u5185\u5BB9\u8FDB\u884C\u5177\u4F53\u5206\u6790\uFF0C\u4E0D\u8981\u4F7F\u7528\u901A\u7528\u6A21\u677F\n4. \u6587\u6863\u603B\u957F\u5EA6\u5E94\u8BE5\u57283000\u5B57\u4EE5\u4E0A\n5. \u8868\u683C\u4E2D\u7684\u5185\u5BB9\u8981\u586B\u5199\u5177\u4F53\u4FE1\u606F\uFF0C\u4E0D\u8981\u4FDD\u7559\u5360\u4F4D\u7B26\n6. \u91CD\u70B9\u5173\u6CE8API\u63A5\u53E3\u8BBE\u8BA1\u3001\u6570\u636E\u7ED3\u6784\u3001\u4EA4\u4E92\u903B\u8F91\u7B49\u6280\u672F\u7EC6\u8282\n\n\u73B0\u5728\u8BF7\u5F00\u59CB\u751F\u6210\u5B8C\u6574\u7684API\u63A5\u53E3\u6280\u672F\u9700\u6C42\u6587\u6863\uFF1A";