Jebi.SDK.Rest
1.0.1
dotnet add package Jebi.SDK.Rest --version 1.0.1
NuGet\Install-Package Jebi.SDK.Rest -Version 1.0.1
<PackageReference Include="Jebi.SDK.Rest" Version="1.0.1" />
<PackageVersion Include="Jebi.SDK.Rest" Version="1.0.1" />
<PackageReference Include="Jebi.SDK.Rest" />
paket add Jebi.SDK.Rest --version 1.0.1
#r "nuget: Jebi.SDK.Rest, 1.0.1"
#:package Jebi.SDK.Rest@1.0.1
#addin nuget:?package=Jebi.SDK.Rest&version=1.0.1
#tool nuget:?package=Jebi.SDK.Rest&version=1.0.1
Jebi
Jebi is a .NET library that maps JSON data onto a relational database, applying configurable transformation rules to bridge structural differences between source JSON and the target EF Core model.
Architecture
Jebi is split into two distinct layers:
Server (hosted service)
A single combined REST server exposes both the Catalog and Ingestion Plan surfaces:
| Project | Role |
|---|---|
apps/Servers/Jebi.Catalog.IngestionPlan.Server.Rest |
Production server — Catalog + Plan REST API |
Endpoints:
api/source/*— JSON schema managementapi/target/*— EF Core DbContext metadataapi/bindings/*— binding configurations and transformation rulesapi/plan/*— ingestion plan setup and key correlations
Client (NuGet package)
| Package | Description |
|---|---|
Jebi.SDK.Rest |
Published NuGet package. Wires IJebiSdkService against the remote server + local execution engine. |
How It Works
Consumer App
└── IJebiSdkService (from Jebi.SDK.Rest package)
├── Catalog calls ──→ HTTP → Jebi Server (api/source, api/target, api/bindings)
├── Plan calls ──→ HTTP → Jebi Server (api/plan)
└── Execute ──→ local → JebiIngestionDb + consumer's target DbContext(s)
The server holds all metadata (schemas, target models, binding rules, plans). Execution runs client-side against the consumer's own databases.
Infrastructure Projects
| Project | Purpose |
|---|---|
src/Catalog/Jebi.Catalog.Infrastructure |
Catalog persistence (source / target / binding) |
src/Ingestion/Jebi.Ingestion.Plan.Infrastructure |
Plan persistence (setup / key correlations / run results) |
src/Ingestion/Jebi.Ingestion.Execute.Infrastructure |
Runtime execution (EF provider, target integration) |
src/Shared/Jebi.Shared.Infrastructure |
Shared EF base components |
The server requires two connection strings:
"ConnectionStrings": {
"JebiCatalogDb": "...",
"JebiPlanDb": "..."
}
SDK Registration
REST (production)
builder.Services.AddJebiSdkRest(
serverBaseAddress: "https://jebi.example.com",
jebiIngestionConnectionString: "Data Source=jebi-execute.db",
tenantRemoteTokenOptions: tenantOptions,
ensureTargetDatabases: true,
typeof(MyTargetDbContext));
Local (development / testing)
builder.Services.AddJebiSdkLocal(
jebiCatalogConnectionString: "Data Source=catalog.db",
jebiIngestionConnectionString: "Data Source=plan.db",
ensureTargetDatabases: true,
typeof(MyTargetDbContext));
Facade Usage
var jebi = serviceProvider.GetRequiredService<IJebiSdkService>();
var binding = await jebi.CreateBindingConfigurationAsync(new JebiCreateBindingConfigurationRequestDto
{
SourceSchemaName = "CustomerSchema",
TargetContextName = "MyTargetDbContext",
Name = "CustomerBinding"
});
await jebi.AddPropertyBindingRuleAsync(new JebiAddPropertyBindingRuleRequestDto
{
BindingConfigurationId = binding.BindingConfigurationId,
SourcePropertyName = "CustomerDef.customerId",
TargetPropertyFullyQualifiedName = "MyApp.Customer.CustomerId"
});
var result = await jebi.RunFromBindingAsync(new JebiRunFromBindingRequestDto
{
BindingConfigurationName = "CustomerBinding",
JsonPayload = jsonPayload,
Options = new JebiIngestionOptionsDto { ValidateSchema = true, PersistRequested = true }
});
Solution Filters
Work on a focused subset of the solution using the available filters:
dotnet build Jebi.Catalog.slnf
dotnet build Jebi.Ingestion.slnf
dotnet build Jebi.SDK.slnf
dotnet build Jebi.AppHost.slnf
Architecture Boundaries
Check project boundary rules:
bash scripts/ci/check-project-boundaries.sh
Validates that:
- consumer apps have
DisableTransitiveProjectReferences=true - SDK surface packages do not expose internal projects as
compiledependencies
Also enforced in CI via the Architecture Boundaries workflow.
Docker
Pull and run the server:
docker pull ghcr.io/boffoli/jebi-catalog-ingestionplan-server-rest:latest
docker run -d -p 8080:8080 ghcr.io/boffoli/jebi-catalog-ingestionplan-server-rest:latest
See docs/docker-demo-launchers.md for ready-to-use launcher scripts.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- AutoMapper (>= 12.0.1)
- AutoMapper.Extensions.Microsoft.DependencyInjection (>= 12.0.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.