# LLMApi: До прикладів модульної архітектури

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

# Введение

Однією з ключових речей, яку я хотів з LLMApi було те, щоб він був якомога легшим. ( тож просто симулювати api тип, який ви хочете. ♫ ) І бути дуже легко отримати intp ♫ МSK2 ♫ тож ви маєте мати змогу отримати все так само легко ♫

Ви можете знайти[ Тут GitHub ](https://github.com/scottgal/LLMApi)для проекту, всі громадські домени і т.д.

> NOTA: Це live з 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)

Ви можете знайти[ Тут GitHub ](https://github.com/scottgal/LLMApi)для проекту, всі громадські домени і т.д.

# Наприклад, модульна архітектура

**Новое в v1.2.0+:** Полна модулярність! Кожен протокол (RESTM SK2 Streaming, GraphQLMska4 SignalRM Ska5 gRPCMска6 OpenAPIMSKA7 тепер можна додавати та мапувати незалежно від інших Mska8 До того ж, динамічне завантаження спеціалізу Мska9 управління контекстом МSK10 і більше M Ska11

## Стосунок

- [Верхні комп 'ютери (Единий підхідM SK1](#backward-compatible-unified-approach)
- [Модулярний підхід](#modular-approach)
  - [Тільки REST](#rest-only)
  - [Лише GraphQL](#graphql-only)
  - [Тільки стріминг](#streaming-only)
  - [Тільки SignalR](#signalr-only)
  - [Тільки gRPC](#grpc-only)
  - [Тільки OpenAPI](#openapi-only)
  - [Інтегральний інтерфейс управління контекстом](#context-management-api)
  - [Поєднати та порівняти](#mix-and-match)
- [Багато речей](#multiple-instances)
- [Прибутки модульного підходу](#benefits-of-modular-approach)
- [Руководство по міграції](#migration-guide)
- [Підсумок](#summary)

---


## Верхні комп 'ютери (Единий підхідM SK1

**Поширений код продовжує працювати без будь-яких змін:**

```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` - GraphQL кінцевий пункт
- `/hub/mock` - СигналR-хоб МSK1 якщо додаватиM SK2
- `/api/mock/contexts` - Сигнальний інтерфейс управління R  якщо додаватиM SK2

---


## Модулярний підхід

### Тільки REST

Чудово для простого монтажу API REST без додаткової накладної плати:

```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

**Прибутки:**

- Найнижчий відбиток пам 'яті
- Гостріший час запуску
- Тільки RegularRequestHandler

---


### Лише GraphQL

Чудово для GraphQL-только для застосуванняM SK1

```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 стрім Clients:

```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 лише в terminaх потоку

**Прибутки:**

- Легкий стріминг-встановлення лише
- Чудово для тестування EventSource
- Жодного REST/GraphQL над głową

---


### Тільки SignalR

Чудово для реального проектування

```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` - СигналR
- `/api/contexts` - інтерфейс управління контекстом

**Прибутки:**

- Установлення лише на час Real-
- Жодного кінцевого пункту HTTP над głową
- Чудово для тестування WebSocket

---


### Тільки 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` - ЗагрузитиM SK1 управляти .proto-файлами МSK3ПOST, Вхопити
- `/api/grpc/{serviceName}/{methodName}` - викликати макет gRPC

**Прибутки:**

- Динамічний прото завантаження без рекомплікації
- Чудово для тестування gRPC
- LLM генерує реалістичні Protobuf відповіді

**До прикладу використання:**

```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/Спекти сварювача:

```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 описі (eM SK1g., `/api/petstore/pet/{petId}`)
- `/api/specs` - ЗавантаженняM SK1 динамічно управляти розрахунками OpenAPI POST, GET

**Прибутки:**

- Автоматично відтворювати цілий опис OpenAPI
- Немає ручного картування кінцевих точок
- Obsługа zarówno статистичних (configured), як і динамічних (uploadedM SK3
- Чудово для тестування контракту 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}` - ПодивитисяM SK1 змінити історію розмови

**Прибутки:**

- Подивіться історію обговорення LLM для виправлення
- Modiфікувати контекст, щоб керувати відповідями
- Виczyść контекст, щоб відновити стан
- Чудово для тестування емоційних сценаріїв

---


### Поєднати та порівняти

Об 'єднати протоколи, як це потрібно для вашого пристрою:

#### До прикладу 1: РEST + GraphQL МSK2Не стрімуванняM SK3

```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` - GraphQL кінцевий пункт
- Жодних кінцевих точок потоку

---


#### До прикладу 2: ГрафQL + СигналR МSK2 Ніяких випробувань

```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` - GraphQL кінцевий пункт
- `/hub/realtime` - СигналR
- `/api/contexts` - Програмний інтерфейс управління SignalR
- Жодних кінцевих точок 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` - GraphQL кінцевий пункт
- `/hub/live` - СигналR
- `/api/hub/contexts` - Zarządzanie сигналомR

---


#### До прикладу 4: REST + OpenAPI МSK2 Контекстовий менеджмент

```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 (з конфігурованих розрахунків)
- `/api/contexts/{contextId}` - Управлення контекстом
- Немає потоку, GraphQL, SignalRM SK2 або gRPC

---


#### До прикладу 5: gRPC + OpenAPI МSK2 Тестування протоколу моста МSK3

```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: Все модульне ( Полне тестування на складі МSK2

```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` - GraphQL кінцевий пункт
- `/hub/realtime` - СигналR
- `/api/hub/contexts` - Zarządzanie сигналомR
- `/api/external/**` - OpenAPI
- `/api/specs` - Zarządzanie OpenAPI
- `/api/grpc-protos` - прото-менеджмент gRPC
- `/api/grpc/{service}/{method}` - виклики gRPC
- `/api/contexts/{contextId}` - Управлення контекстом

**Чудово для:**

- Комплексне тестування інтеграції
- Випробовування мікросервисних архітектур
- Мульти-protocol API порти
- Полне- розробка стека з різними типами клієнта

---


## Багато речей

Використовувати багато незалежних mock 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. **Снижена залежність від пам 'яті**

Загрузити лише техніки, які ви використовуєте

- Тільки REST: M SK1 менша пам 'ять
- Лише GraphQL: M SK1 менша пам 'ять
- Streaming only: M SK1 менша пам 'ять

### 2. **Найшвидший запуск**

Менше послуг для rejestracji = швидший запуск aplikacji

### 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 до vМSK1

**Ніяких змін не вимагається!** Ваш поточний код працює як-is.

**Опціонально: Переход до модульного підходу для переваг**

**До МSK0v1.1.0):**

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

**Після (v1.2.0 - МодулярногоM SK3**

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

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

Обидві підходи працюють однаково,, але модульний підхід більш чіткий і ефективнийM SK1

---


## Підсумок

### Основные послуги протоколу

| Дослідження МSK1 Metodа додавання МSK2 Карта метод | Застосування
|----------|------------|------------|----------|
| **Об 'єднані** | `AddLLMockApi()` | `MapLLMockApi()` | Все (RESTMSC2StreamingM SK3GraphQL+gRPCMスク5 зворотній зв 'язок МSK6
| **РEST** | `AddLLMockRest()` | `MapLLMockRest()` | Проста робота для решти |
| **GraphQL** | `AddLLMockGraphQL()` | `MapLLMockGraphQL()` | GraphQL
| **Стримування** | `AddLLMockStreaming()` | `MapLLMockStreaming()` | СШ лише потоку МSK1
| **Сигналь Р** | `AddLLMockSignalR()` | `MapLLMockSignalR()` | Реальний МSK1 час даних веб-сокета МSK2
| **OpenAPI** | `AddLLMockOpenApi()` | `MapLLMockOpenApi()` | Похибка від OpenAPI/Speccs для стискання |

### Додаткові характеристики (Не обов 'язково додавати метод

| Функція МSK1 Карта метод МSK2 Застосування |
|---------|------------|----------|
| **Менеджмент gRPC** | `MapLLMockGrpcManagement()` | завантажитиM SK1 управляти МSK2proto файлами |
| **Виклики gRPC** | `MapLLMockGrpc()` | Викликати макет gRPC методів |
| **Менеджмент OpenAPI** | `MapLLMockOpenApiManagement()` | Динамично завантажувати спецификації OpenAPI |
| **Керування контекстом** | `MapLLMockApiContextManagement()` | Подивіться МSK1 змінити історію розмови LLM |

**Примітки:**

- Услуги gRPC включені в `AddLLMockApi()` але окремимими картами
- Менеджмент OpenAPI дозволяє динамічним розрахункам завантаження в час запуску
- Керування контекстом працює з будь-яким протоколом, який підтримує стан розмови
- Усі функції можна поєднати і підлаштувати, як потрібно.

**Виберіть підхід, який найкраще підходить вашим потребам!**