Een van de belangrijkste dingen die ik wilde met LLMApi was de mogelijkheid om het zo licht mogelijk te zijn (dus simuleer gewoon het api type dat je wilt) EN super gemakkelijk te krijgen intp; dus je moet in staat zijn om alles net zo gemakkelijk te krijgen.
Met dit in gedachten heb ik het ontworpen met modulariteit in het achterhoofd (fluistert... in de toekomst wil ik dat je in staat bent om 'plugins' toe te voegen die nog meer mogelijk maken).Hier is het artikel over hoe tha tarchitectuur werkt en alles wat het is ins en outs.U kunt de
GitHub hier
Het is AI gegenereerd.NuGetNuGet
GitHub hiervoor het project, alle publieke domein, enz...
Meervoudige instanties
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();
Voordelen van een modulaire aanpak
/api/mock/**Migratiegids/api/mock/stream/**Samenvatting/api/mock/graphqlAchterwaarts compatibel (Unified Approach)/hub/mockBestaande code blijft werken zonder enige wijzigingen:/api/mock/contextsDit creëert: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();
- SignalR hub (indien toegevoegd)
/api/mock/**- SignalR management API (indien toegevoegd)Modulaire benadering
Voordelen:
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();
Minimale geheugenvoetafdruk
/api/mock/graphqlSnellere opstarttijdOmvat alleen RegularRequestHandler
Voordelen:
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();
Alleen GraphQL-instellingen opruimen
/api/mock/stream/**Geen onnodige REST-afhandelaarsPerfect voor het testen van de GraphQL-client
Voordelen:
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();
Lightweight streaming-only setup
/hub/mockPerfect voor EventSource testen/api/contextsGeen REST/GraphQL-overheadAlleen SignalR
Voordelen:
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();
Alleen real-time setup
/api/grpc-protosGeen HTTP-eindpunt overhead/api/grpc/{serviceName}/{methodName}Perfect voor WebSocket testenAlleen gRPC
- Roep mock gRPC-methoden op
# 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}'
Dynamisch proto uploaden zonder recompilatie
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();
Perfect voor gRPC client testen
/api/petstore/pet/{petId})/api/specsGebruiksvoorbeeld:Alleen openAPI
Automatisch hele OpenAPI-specs bespotten
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();
Geen handmatige endpoint mapping vereist
/api/mock/**Ondersteunt zowel statische (geconfigureerde) als dynamische (geuploade) specificaties/api/contexts/{contextId}Perfect voor API contract testenContextbeheer API
LLM-gespreksgeschiedenis tonen voor debuggen
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();
Wis de context om status te resetten
/api/mock/**Perfect voor het testen van stateful scenario's/api/mock/graphqlMix en matchusing 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();
Dit creëert:
/api/queries/graphql- REST eindpunten/hub/realtime- GraphQL eindpunt/api/contextsGeen streaming eindpuntenusing 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 eindpunt
/api/rest/**- SignalR hub/api/stream/stream/**- SignalR management API/api/graphql/graphqlGeen REST- of SSE-eindpunten/hub/liveVoorbeeld 3: Alles met verschillende patronen/api/hub/contextsDit creëert: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-streaming
/api/mock/**- GraphQL eindpunt/api/contexts/{contextId}- SignalR managementusing 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();
- REST eindpunten
/api/grpc-protosOpenAPI spec eindpunten (van geconfigureerde specificaties)/api/grpc/{service}/{method}- Context managementusing 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 proto management
/api/rest/**- gRPC-gesprekken/api/stream/stream/**OpenAPI-spec eindpunten/api/graphql/graphqlPerfect voor het testen van protocolbruggen/poorten/hub/realtimeVoorbeeld 6: Alles modulaire (Full Stack Testing)/api/hub/contextsDit creëert:/api/external/**- REST eindpunten/api/specs- SSE-streaming/api/grpc-protos- GraphQL eindpunt/api/grpc/{service}/{method}- SignalR hub/api/contexts/{contextId}- SignalR management- OpenAPI spec eindpunten
Uitgebreide integratietests
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();
Full-stack ontwikkeling met verschillende client types
Laad alleen de handlers die u daadwerkelijk gebruikt:
GraphQL alleen: ~40% minder geheugen
Sneller opstarten
// 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");
Duidelijkere intent
// This still works exactly as before
builder.Services.AddLLMockApi(configuration);
app.MapLLMockApi("/api/mock");
Gemakkelijker testen
app.MapLLMockRest("/rest");
app.MapLLMockGraphQL("/gql");
app.MapLLMockStreaming("/events");
app.MapLLMockSignalR("/ws", "/manage");
**Bestaande code blijft werken:**Flexibele patronen
Aankoppelen van protocollen op elk pad:
Migratiegids
builder.Services.AddLLMockApi(builder.Configuration);
app.MapLLMockApi("/api/mock", includeStreaming: true, includeGraphQL: true);
Van v1.1.0 tot 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");
Geen veranderingen nodig!
Vóór (v1/1.0):
|----------|------------|------------|----------|
| Na (v1,2.0 - Modular): | AddLLMockApi() | MapLLMockApi()Beide benaderingen werken identiek, maar de modulaire aanpak is explicieter en efficiënter.
| Samenvatting | AddLLMockRest() | MapLLMockRest()Kernprotocoldiensten
| Toevoegen methode Kaart Methode Gebruik geval | AddLLMockGraphQL() | MapLLMockGraphQL()Unified
| Alles (REST+Streaming+GraphQL+gRPC), achterwaarts compatibel | AddLLMockStreaming() | MapLLMockStreaming()REST
| Eenvoudige REST spotten | AddLLMockSignalR() | MapLLMockSignalR()GraphQL
| GraphQL-alleen-apps | AddLLMockOpenApi() | MapLLMockOpenApi()Streaming
SignaalR
|---------|------------|----------|
| Real-time WebSocket-gegevens | MapLLMockGrpcManagement()OpenAPI
| Mock van OpenAPI/Swagger specs | MapLLMockGrpc()Extra functies (Geen methode vereist)
| Kenmerk van de kaartmethode Gebruik koffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | MapLLMockOpenApiManagement()gRPC-beheer
| Uploaden/beheren .proto bestanden | MapLLMockApiContextManagement()gRPC-oproepen
Roep mock gRPC-methoden op.
AddLLMockApi()OpenAPI specs Dynamisch ladengRPC-diensten zijn inbegrepen in
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.