# LLMApi: 模块架构示例

<!--category-- AI, LLM,  LLMApi, ASP.NET Core, API, Nuget, mockllmapi, AI-Article-->
<datetime class="hidden">2025-11-02T12:30</datetime>

# 一. 导言导言 导言 导言 导言

我对LLMApi想要的其中一件关键的事情是 它能够尽可能轻巧地轻量 \ @(}所以只是模拟你想要的Api类型\)}和非常容易获得 Intp{;} 这样你就应该能同样轻松得到一切

你可以找到[ 吉特Hub在这里 ](https://github.com/scottgal/LLMApi)所有公共域等 ... *

> 这是来自 GitHub.的现场直播,

[![Nuget 元数](https://img.shields.io/nuget/v/mostlylucid.mockllmapi.svg)](https://www.nuget.org/packages/mostlylucid.mockllmapi)
[![Nuget 元数](https://img.shields.io/nuget/dt/mostlylucid.mockllmapi.svg)](https://www.nuget.org/packages/mostlylucid.mockllmapi)

你可以找到[ 吉特Hub在这里 ](https://github.com/scottgal/LLMApi)所有公共域等 ... *

# 模块结构示例

**新建于 v1.2.0+:** 完整模块性 @! 每一个协议@(REST, Streaming}MS K3 圖形QL,SignalRMSKO5 gRPC\, OpenAPI}) 现在可以独立添加并绘制

## 目录目录

- [向后对齐 *\ ( 统一方法*)\ {](#backward-compatible-unified-approach)
- [模块式方法](#modular-approach)
  - [只只保留](#rest-only)
  - [仅图解QL](#graphql-only)
  - [仅串流](#streaming-only)
  - [仅信号](#signalr-only)
  - [仅gRPC](#grpc-only)
  - [仅限 OpenAPI](#openapi-only)
  - [API 内部管理](#context-management-api)
  - [混合和匹配](#mix-and-match)
- [多个实例](#multiple-instances)
- [模块化方法的惠益](#benefits-of-modular-approach)
- [《移徙指南指南》](#migration-guide)
- [摘要摘要](#summary)

---


## 向后对齐 *\ ( 统一方法*)\ {

**现有代码继续工作,没有任何改动@: @ @**

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Registers ALL services (REST, Streaming, GraphQL)
builder.Services.AddLLMockApi(builder.Configuration);

// Optional: Add SignalR
builder.Services.AddLLMockSignalR(builder.Configuration);

builder.Services.AddRazorPages();

var app = builder.Build();

app.UseStaticFiles();
app.UseRouting();
app.MapRazorPages();

// Maps ALL endpoints (REST, Streaming, GraphQL) at /api/mock
app.MapLLMockApi("/api/mock", includeStreaming: true, includeGraphQL: true);

// Optional: Map SignalR
app.MapLLMockSignalR("/hub/mock", "/api/mock");

app.Run();
```

**此创建@ : @%**

- `/api/mock/**` -+REST端点
- `/api/mock/stream/**` - SSE 流端点
- `/api/mock/graphql` - 图形QL 终点
- `/hub/mock` @-_讯号枢纽#(_if添加@)}
- `/api/mock/contexts` “-讯号管理 API @( 添加#)

---


## 模块式方法

### 只只保留

完全可以进行简单的REST API模拟,无需额外超载:

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register ONLY REST services
builder.Services.AddLLMockRest(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map ONLY REST endpoints
app.MapLLMockRest("/api/mock");

app.Run();
```

**此创建@ : @%**

- `/api/mock/**` 仅 -REST 端点

**福利*:**

- 最小记忆足迹
- 快速启动时间
- 仅包括常规请求Handler

---


### 仅图解QL

适合图形QL-}只允许应用程序@:

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register ONLY GraphQL services
builder.Services.AddLLMockGraphQL(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map ONLY GraphQL endpoint
app.MapLLMockGraphQL("/api/mock");

app.Run();
```

**此创建@ : @%**

- `/api/mock/graphql` 仅 -图形QL端点

**福利*:**

- 清洁图形QL - @ 仅设置
- 无不必要的 REST 处理器
- GraphQL 客户端测试完美

---


### 仅串流

适合测试 SSE 流客户端@: @

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register ONLY Streaming services
builder.Services.AddLLMockStreaming(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map ONLY Streaming endpoints
app.MapLLMockStreaming("/api/mock");

app.Run();
```

**此创建@ : @%**

- `/api/mock/stream/**` - SSE 只流端点

**福利*:**

- 轻量级串流@ - @ 仅设置
- 完全用于事件源测试
- 无REST/GraphQL 间接费用

---


### 仅信号

时间仪表板原型制作@: @%

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register ONLY SignalR services (includes core services automatically)
builder.Services.AddLLMockSignalR(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "llama3";
    options.SignalRPushIntervalMs = 5000;
});

var app = builder.Build();

app.UseRouting();

// Map ONLY SignalR endpoints
app.MapLLMockSignalR("/hub/mock", "/api/contexts");

app.Run();
```

**此创建@ : @%**

- `/hub/mock` - 信号枢纽
- `/api/contexts` -背景管理API

**福利*:**

- 仅在时间设置@ - @ title only setting
- 没有 HTTP 终端间接费用
- 适合 WebSock 测试

---


### 仅gRPC

适合测试具有动态原型定义的 GRPC 客户端@: @

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register services (gRPC included in AddLLMockApi)
builder.Services.AddLLMockApi(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map ONLY gRPC endpoints
app.MapLLMockGrpcManagement("/api/grpc-protos");  // Proto file management
app.MapLLMockGrpc("/api/grpc");                   // gRPC service calls

app.Run();
```

**此创建@ : @%**

- `/api/grpc-protos` -上传@/管理 @.proto 文件 @MS K3POST}, Get\,Delete)
- `/api/grpc/{serviceName}/{methodName}` - 启动模拟 GRPC 方法

**福利*:**

- 动态原生上传而不重新编译
- 适合GRPC客户端测试
- LLM 产生现实的原生本源响应

**用法示例 @:**

```bash
# 1. Upload a proto definition
curl -X POST http://localhost:5116/api/grpc-protos \
  -H "Content-Type: text/plain" \
  --data 'syntax = "proto3"; service UserService { rpc GetUser(GetUserRequest) returns (User); }'

# 2. Call the gRPC method
curl -X POST http://localhost:5116/api/grpc/UserService/GetUser \
  -H "Content-Type: application/json" \
  -d '{"user_id": 123}'
```

---


### 仅限 OpenAPI

完全可以模拟现有的 OpenAPI/ @Swaggerspeces@:}

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register ONLY OpenAPI services
builder.Services.AddLLMockOpenApi(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "llama3";
    options.OpenApiSpecs = new List<OpenApiSpecConfig>
    {
        new OpenApiSpecConfig
        {
            Name = "PetStore",
            Source = "https://petstore3.swagger.io/api/v3/openapi.json",
            BasePath = "/api/petstore"
        }
    };
});

var app = builder.Build();

app.UseRouting();

// Map ONLY OpenAPI endpoints
app.MapLLMockOpenApi();                      // Loads configured specs
app.MapLLMockOpenApiManagement("/api/specs"); // Dynamic spec management

app.Run();
```

**此创建@ : @%**

- 您在 OpenAPI spec 中定义的所有端点@ ( @ e @ MS K1}\ g.,} * `/api/petstore/pet/{petId}`)
- `/api/specs` -上傳/管理開放API畫面動態(POST}, 得到,DELETEMS K5

**福利*:**

- 自动模拟整个 OpenAPI 规格
- 无需人工绘制终点点图
- 支持静态的 @ ( @ configendd)}和动态的@ MS K2_ puploaded @ MPK3}speces
- 完全适合API合同测试

---


### API 内部管理

添加上下文历史查看和修改@: @%

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register REST services
builder.Services.AddLLMockRest(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map REST endpoints
app.MapLLMockRest("/api/mock");

// Add context management API
app.MapLLMockApiContextManagement("/api/contexts");

app.Run();
```

**此创建@ : @%**

- `/api/mock/**` -+REST端点
- `/api/contexts/{contextId}` -View @/ 修改对话框历史

**福利*:**

- 查看用于调试的 LLM 对话框历史
- 修改上下文以引导响应
- 要重设置状态的清晰上下文
- 适合测试状态假设情景

---


### 混合和匹配

使用时需要的组合协议@: @%

#### 1:REST +图QL(没有流

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register REST and GraphQL services
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockGraphQL(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map both protocols
app.MapLLMockRest("/api/mock");
app.MapLLMockGraphQL("/api/mock");

app.Run();
```

**此创建@ : @%**

- `/api/mock/**` -+REST端点
- `/api/mock/graphql` - 图形QL 终点
- 无溪流端点

---


#### “2:”图解QL @+}信号机@(没有 REST_)

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register GraphQL and SignalR services
builder.Services.AddLLMockGraphQL(builder.Configuration);
builder.Services.AddLLMockSignalR(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map both protocols
app.MapLLMockGraphQL("/api/queries");
app.MapLLMockSignalR("/hub/realtime", "/api/contexts");

app.Run();
```

**此创建@ : @%**

- `/api/queries/graphql` - 图形QL 终点
- `/hub/realtime` - 信号枢纽
- `/api/contexts` -讯号管理API
- 没有 REST 或 SSE 端点

---


#### 示例 “3:” 所有不同模式的事物

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register all services modularly
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockStreaming(builder.Configuration);
builder.Services.AddLLMockGraphQL(builder.Configuration);
builder.Services.AddLLMockSignalR(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map each protocol with custom patterns
app.MapLLMockRest("/api/rest");           // /api/rest/**
app.MapLLMockStreaming("/api/stream");    // /api/stream/stream/**
app.MapLLMockGraphQL("/api/graphql");     // /api/graphql/graphql
app.MapLLMockSignalR("/hub/live", "/api/hub");

app.Run();
```

**此创建@ : @%**

- `/api/rest/**` -+REST端点
- `/api/stream/stream/**` -SSE流
- `/api/graphql/graphql` - 图形QL 终点
- `/hub/live` - 信号枢纽
- `/api/hub/contexts` -讯号管理

---


#### 4:REST +开放API @+上下文管理

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register REST and OpenAPI services
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockOpenApi(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map all three capabilities
app.MapLLMockRest("/api/mock");
app.MapLLMockOpenApi();
app.MapLLMockApiContextManagement("/api/contexts");

app.Run();
```

**此创建@ : @%**

- `/api/mock/**` -+REST端点
- OpenAPI spec 端点 @ ( @ 来自已配置的specs@ MS K1} @
- `/api/contexts/{contextId}` 内容管理
- 没有串流@ ,图形QL @ MS K1信号R,或 gRPC

---


#### 5: gRPC + OpenAPI _( 议定书桥桥测试_)

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register services for both protocols
builder.Services.AddLLMockApi(builder.Configuration);  // Includes gRPC
builder.Services.AddLLMockOpenApi(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map both protocols
app.MapLLMockGrpcManagement("/api/grpc-protos");
app.MapLLMockGrpc("/api/grpc");
app.MapLLMockOpenApi();

app.Run();
```

**此创建@ : @%**

- `/api/grpc-protos` -+GRPC原型管理
- `/api/grpc/{service}/{method}` GRPC的电话
- OpenAPI 指定端点
- 用于测试协议桥的完美操作@/}门道

---


#### 例如“6: ”所有模块 “(” Full Stack 测试“MS K2”

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Register everything modularly
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockStreaming(builder.Configuration);
builder.Services.AddLLMockGraphQL(builder.Configuration);
builder.Services.AddLLMockSignalR(builder.Configuration);
builder.Services.AddLLMockOpenApi(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "llama3";
    options.OpenApiSpecs = new List<OpenApiSpecConfig>
    {
        new OpenApiSpecConfig
        {
            Name = "External API",
            Source = "https://api.example.com/openapi.json",
            BasePath = "/api/external"
        }
    };
});

var app = builder.Build();

app.UseRouting();

// Map everything at different paths
app.MapLLMockRest("/api/rest");
app.MapLLMockStreaming("/api/stream");
app.MapLLMockGraphQL("/api/graphql");
app.MapLLMockSignalR("/hub/realtime", "/api/hub");
app.MapLLMockOpenApi();
app.MapLLMockOpenApiManagement("/api/specs");
app.MapLLMockGrpcManagement("/api/grpc-protos");
app.MapLLMockGrpc("/api/grpc");
app.MapLLMockApiContextManagement("/api/contexts");

app.Run();
```

**此创建@ : @%**

- `/api/rest/**` -+REST端点
- `/api/stream/stream/**` -SSE流
- `/api/graphql/graphql` - 图形QL 终点
- `/hub/realtime` - 信号枢纽
- `/api/hub/contexts` -讯号管理
- `/api/external/**` - OpenAPI 标准端点
- `/api/specs` 开放API管理
- `/api/grpc-protos` -+GRPC原型管理
- `/api/grpc/{service}/{method}` GRPC的电话
- `/api/contexts/{contextId}` 内容管理

**完美地适合:**

- 全面综合测试
- 测试微观服务结构
- 多关-protocol API网关
- 与各种客户类型开发完整-stack development

---


## 多个实例

运行多个独立的模拟API, 配置不同@ : @%

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Development endpoints - high randomness
builder.Services.AddLLMockRest(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "llama3";
    options.Temperature = 1.5;
});

builder.Services.AddLLMockGraphQL(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "llama3";
    options.Temperature = 1.5;
});

var app = builder.Build();

app.UseRouting();

// Development endpoints
app.MapLLMockRest("/api/dev");
app.MapLLMockGraphQL("/api/dev");

// Stable test endpoints (would need separate config)
app.MapLLMockRest("/api/test");
app.MapLLMockGraphQL("/api/test");

app.Run();
```

---


## 模块化方法的惠益

### 1. **减少内存足印**

只装入您实际使用的“ :” 处理器@ action

- 仅REST 仅@: @ @ @ ~30%# 小于内存
- 仅图形QL@: @ ~40%}小于内存
- 只串流@ : @ *\ MS K1} 减少内存

### 2. **快速启动**

注册@ = @ 快速程序启动服务更少

### 3. **更清晰的意图**

代码明确显示您应用程序使用的协议

### 4. **较易测试**

单独测试协议@: @%

```csharp
// Test file for REST only
builder.Services.AddLLMockRest(config);
app.MapLLMockRest("/api/mock");

// Test file for GraphQL only
builder.Services.AddLLMockGraphQL(config);
app.MapLLMockGraphQL("/api/mock");
```

### 5. **无断断更改**

现有代码继续工作

```csharp
// This still works exactly as before
builder.Services.AddLLMockApi(configuration);
app.MapLLMockApi("/api/mock");
```

### 6. **灵活模式**

在任何路径上挂载协议@: @%

```csharp
app.MapLLMockRest("/rest");
app.MapLLMockGraphQL("/gql");
app.MapLLMockStreaming("/events");
app.MapLLMockSignalR("/ws", "/manage");
```

---


## 《移徙指南指南》

### 从v1.1.0到 vMS K1

**无需更改@! @%** 您现有的代码以 @ - @is@ MS K1} 有效 。

**可选性:: 移动到模块化的受益方式**

**在“(”之前**

```csharp
builder.Services.AddLLMockApi(builder.Configuration);
app.MapLLMockApi("/api/mock", includeStreaming: true, includeGraphQL: true);
```

**在“(v1.2.0”之后**

```csharp
// Only include what you need
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockGraphQL(builder.Configuration);

app.MapLLMockRest("/api/mock");
app.MapLLMockGraphQL("/api/mock");
```

这两种方法同样有效,但模块法更明确、效率更高。

---


## 摘要摘要

### 核心礼宾事务

“|” 接近“|” 添加方法“MS K2” 地图方法“|” 使用大小写“MSC4”
|----------|------------|------------|----------|
| **统一** | `AddLLMockApi()` | `MapLLMockApi()` -=YTET -伊甸园字幕组=- 翻译:
| **休息** | `AddLLMockRest()` | `MapLLMockRest()` @|#简单休息,嘲弄 #|#
| **图QL** | `AddLLMockGraphQL()` | `MapLLMockGraphQL()` @ |_ 图QL-}只使用应用程序@|{
| **串流** | `AddLLMockStreaming()` | `MapLLMockStreaming()` |SSE流 仅|
| **信号R** | `AddLLMockSignalR()` | `MapLLMockSignalR()` @| @ real@-_时间网络软体数据 @ |#
| **Op开放API** | `AddLLMockOpenApi()` | `MapLLMockOpenApi()` 由 OpenAPI @/_Swagger speases@|}來自OpenAPI#MSK 1_spects_| mock}(來自 OptionAPI#MSPI% MS K1_ Swagger species < MSK2- } 來自 OmployAppi+MSK_ MSGQ_ MISC_ 来自 OpanAPI} MSk0_ mock_

### 附加特性 @ (_ 无添加方法 需要@ MSC1} @

| 使用大小写 @|
|---------|------------|----------|
| **gRPPC 管理** | `MapLLMockGrpcManagement()` |上传@/管理 @.proto 文件 @MS K3
| **gRPPC 调用** | `MapLLMockGrpc()` @|_Invoke 模拟 GRPC 方法@|_#
| **OpenAPIP 管理** | `MapLLMockOpenApiManagement()` | 动态装入 OpenAPI spets |
| **内容管理** | `MapLLMockApiContextManagement()` |View @/ 修改LLM对话历史@|

**注::**

- g/RPPC服务包括: `AddLLMockApi()` 分开绘制
- OpenAPI 管理允许在运行时进行动态套装
- 与保持对话状态的任何协议进行背景管理
- 所有特征可以混合,并视需要加以配合

**选择最适合您需要的方法@! @**