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

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

# Вступ

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

Пам'ятаючи про це, я спроектував його з модуляцією в думках (шепіння. у майбутньому, я хочу, щоб ви могли додати "plugins," які уможливлюють ще більше).[Ось стаття про те, як працює тапітектура та ін'єкція.](https://github.com/scottgal/LLMApi)Ви можете знайти

> GitHub тут

[![для проекту, для всіх публічних доменів і т. д....](https://img.shields.io/nuget/v/mostlylucid.mockllmapi.svg)](https://www.nuget.org/packages/mostlylucid.mockllmapi)
[![ЩО МОЖНА ЗРОБИТИ.](https://img.shields.io/nuget/dt/mostlylucid.mockllmapi.svg)](https://www.nuget.org/packages/mostlylucid.mockllmapi)

Він створений комп'ютером.[NuGet](https://github.com/scottgal/LLMApi)NuGet

# Ви можете знайти

**GitHub тут**для проекту, для всіх публічних доменів і т. д....

## Приклади модулярної архітектури

- [Нові у v1. 2. 0+:](#backward-compatible-unified-approach)
- [Повна модуляція!](#modular-approach)
  - [Тепер кожен з протоколів (REST, Streaming, GraphQL, GRPC, OpenAPI) може бути додано і заплановано незалежно.](#rest-only)
  - [Плюс динамічне завантаження, керування контекстом та інше!](#graphql-only)
  - [Зміст](#streaming-only)
  - [Зворотний сумісний (універсальний підхід)](#signalr-only)
  - [Модулярний підхід](#grpc-only)
  - [Тільки НИЖКАConstellation name (optional)](#openapi-only)
  - [Лише GraphQL](#context-management-api)
  - [Лише потік](#mix-and-match)
- [Лише сигнал](#multiple-instances)
- [Лише gRPC](#benefits-of-modular-approach)
- [Лише OpenAPI](#migration-guide)
- [API керування контекстом](#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/**`Довідник з міграції
- `/api/mock/stream/**`Зведення
- `/api/mock/graphql`Зворотний сумісний (універсальний підхід)
- `/hub/mock`Існуючий код продовжує працювати без будь- яких змін:
- `/api/mock/contexts`Створено:

---


## - Еквівалентні кінцеві точки

### - SSE потік кінцевих точок

- Кінцева точка GraphQL

```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/**`- API керування сигналами (якщо додано)

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

- Тільки НИЖКАConstellation name (optional)
- Ідеально для простого програмного інтерфейсу REST глузування без додаткового надкладного:
- Створено:

---


### - Тільки кінцеві точки

Користі:

```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`Швидкий час запуску

**Включити лише RegetRequestHandler**

- Лише GraphQL
- Чудово для програм, призначених лише для GraphQL:
- Створено:

---


### - Лише кінцева точка GraphQL

Користі:

```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();
```

**Очистити налаштування лише GraphQL**

- `/api/mock/stream/**`Немає зайвих рекомендацій

**Чудово для тестування клієнта GraphQL**

- Лише потік
- Досконало для тестування клієнтів потоку SSE:
- Створено:

---


### - SSE потік тільки кінцевих точок

Користі:

```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`Без перенавантаження REST/ GrraphQL

**Лише сигнал**

- Ідеально для прототипу панелі приладів у режимі реального часу:
- Створено:
- - Вуздечка сигнального зв'язку.

---


### - API керування контекстом

Користі:

```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`Не вказано кінцевої точки HTTP
- `/api/grpc/{serviceName}/{methodName}`Ідеально для тестування Веб- сокета

**Лише gRPC**

- Чудово для тестування клієнтів gRPC з динамічними визначеннями прото:
- Створено:
- - Вивантажити/manage.proto файли (POST, GET, DELETE)

**- Висміювання методів gRPC**

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

---


### Користі:

Динамічне прото- вивантаження без переобладнання

```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();
```

**Ідеально для тестування клієнта gRPC**

- LLM створює реалістичні відповіді на протобуф`/api/petstore/pet/{petId}`)
- `/api/specs`Приклад використання:

**Лише OpenAPI**

- Чудово для насмішок існуючих специфік OpenAPI/Swagging:
- Створено:
- Всі кінцеві точки, визначені у ваших параметрах OpenAPI (наприклад,
- - Вивантаження/ керування специфікаціями OpenAPI динамічно (POST, GET, DELETE)

---


### Користі:

Автоматично висміювати всі специфіки OpenAPI

```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/**`Підтримка статичних (налаштованих) і динамічних (завантажених) специфікацій
- `/api/contexts/{contextId}`Чудово для тестування контрактів API

**API керування контекстом**

- Додати перегляд і зміну історії контексту:
- Створено:
- - Еквівалентні кінцеві точки
- - Перегляд і модифікація історії спілкування

---


### Користі:

Переглянути історію розмов LLM для зневаджування

#### Змінити контекст для пов' язаних відповідей

```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/**`Досконало для тестування умовних сценаріїв
- `/api/mock/graphql`Змішування і збіг
- Об' єднати протоколи, як потрібно для вашого випадку використання:

---


#### Приклад 1: REST + GraphQL (без потоку)

```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`- Еквівалентні кінцеві точки
- `/hub/realtime`- Кінцева точка GraphQL
- `/api/contexts`Кінцевих точок потоку немає
- Приклад 2: GraphQL + lightR (Немає зберігача екрана)

---


#### Створено:

```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();
```

**- Кінцева точка GraphQL**

- `/api/rest/**`- Вуздечка сигнального зв'язку.
- `/api/stream/stream/**`- API керування сигнальними R
- `/api/graphql/graphql`Не вказано кінцевих пунктів REST або SSE
- `/hub/live`Приклад 3: все з різними візерунками
- `/api/hub/contexts`Створено:

---


#### - Еквівалентні кінцеві точки

```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();
```

**- SSE потік**

- `/api/mock/**`- Кінцева точка GraphQL
- - Вуздечка сигнального зв'язку.
- `/api/contexts/{contextId}`- Керування сигналізатором
- Приклад 4: REST + 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`Специфікації OpenAPI кінцеві точки (від налаштованих специфікацій)
- `/api/grpc/{service}/{method}`- Керування контекстом
- Без потоку, GraphQL, GRPC
- Приклад 5: gRPC + OpenAPI (Протоколове тестування мостів)

---


#### Створено:

```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();
```

**- Керування прото gRPC**

- `/api/rest/**`- Звонки gRPC
- `/api/stream/stream/**`Параметри OpenAPI кінцеві точки
- `/api/graphql/graphql`Чудово для перевірки мостів/ gateways
- `/hub/realtime`Приклад 6: все моденно (перевірка стека)
- `/api/hub/contexts`Створено:
- `/api/external/**`- Еквівалентні кінцеві точки
- `/api/specs`- SSE потік
- `/api/grpc-protos`- Кінцева точка GraphQL
- `/api/grpc/{service}/{method}`- Вуздечка сигнального зв'язку.
- `/api/contexts/{contextId}`- Керування сигналізатором

**- Специфічні точки OpenAPI**

- - Керування OpenAPI
- - Керування прото gRPC
- - Звонки gRPC
- - Керування контекстом

---


## Досконало для:

Перевірка інтегралізації

```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. **Багатопротоколові шлюзи API**

Повнофункціональний розвиток з різноманітними типами клієнтів

- Декілька прикладів
- Запустити декілька незалежних програм для висміювання з різними налаштуваннями:
- Користь від мінливого підходу

### 2. **Зменшений відбиток пам' яті**

Завантажувати лише обробники, якими ви користуєтеся:

### 3. **Лише REST: ~30% менше пам'яті**

Тільки GraphQL: ~40% менше пам' яті

### 4. **Тільки потік: ~40% менше пам' яті**

Швидкий запуск

```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");
```

---


## Тестові протоколи у ізоляції:

### Жодних змін у руйнуванні

**Існуючий код продовжує працювати:**Гнучкі візерунки

**Змонтувати протоколи на будь- якому шляху:**

**Довідник з міграції**

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

**З v1. 1. 0 до 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");
```

Зміни не потрібно!

---


## Ваш існуючий код працює як є.

### Необов' язковий: Впорядкувати до модулярного підходу для переваг

Перед (v1. 1. 0):
|----------|------------|------------|----------|
| **Після (v1. 2. 0 - Modular):** | `AddLLMockApi()` | `MapLLMockApi()`Обидва підходи працюють однаково, але модульний підхід більш явно і ефективно.
| **Зведення** | `AddLLMockRest()` | `MapLLMockRest()`Служби Core ProtocolComment
| **** **Інструменти/ д/ д/ д/ д + + +\\ мапа +}Використовуйте її** | `AddLLMockGraphQL()` | `MapLLMockGraphQL()`Універсальний
| **** речі (REST+Strorching+Graph+L+gRPC), } сумісні ♪** | `AddLLMockStreaming()` | `MapLLMockStreaming()`РИСТConstellation name (optional)
| **♪ Some R щік' s AND AND AND AND AND AND AND TO TH CAH AND AND AND AND ♪** | `AddLLMockSignalR()` | `MapLLMockSignalR()`GraphQL
| **♪ GraphQL- only apps ♪** | `AddLLMockOpenApi()` | `MapLLMockOpenApi()`Потік

### Пн. д. д. д. д. н. е.

OSDR
|---------|------------|----------|
| **♪ Real-time WebSocket data}** | `MapLLMockGrpcManagement()`OpenAPI
| **Дзвінок від OpenAPI/Swragues}** | `MapLLMockGrpc()`Додаткові можливості (не потрібен додатковий метод)
| **** * ** Map **--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------** | `MapLLMockOpenApiManagement()`Керування gRPC
| **** ..._________________________________________________________________________________________________________________________________//////** | `MapLLMockApiContextManagement()`Виклики gRPC

**+Invoke глузувати з gRPCcics}**

- Керування OpenAPI`AddLLMockApi()`♪------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Керування контекстом
- ♪ Перегляд/modifier LLM talkion History ♪
- Примітки:

**До програми включено служби gRPC**