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

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

AI AI-Article API ASP.NET Core LLM LLMApi mockllmapi Nuget

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

Sunday, 02 November 2025

Вступ

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

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

GitHub тут

для проекту, для всіх публічних доменів і т. д.... ЩО МОЖНА ЗРОБИТИ.

Він створений комп'ютером.NuGetNuGet

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

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

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


Змішування і збіг

Декілька прикладів

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
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 глузування без додаткового надкладного:
  • Створено:

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

Користі:

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

Користі:

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 потік тільки кінцевих точок

Користі:

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 керування контекстом

Користі:

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

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

Користі:

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

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

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 для зневаджування

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

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 (без потоку)

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 (Немає зберігача екрана)

Створено:

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Створено:

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

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 + Керування контекстом

Створено:

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 (Протоколове тестування мостів)

Створено:

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
    • Керування контекстом

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

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

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% менше пам' яті

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

// 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. Менше служб для реєстрації = швидший запуск програм

Прозоріше

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

6. Код чітко показує протоколи, які використовує ваша програма

Полегшене випробування

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

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

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

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

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

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

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

З v1. 1. 0 до v1. 2. 0

// 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}

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

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

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.