๐ข Ed-Fi API Publisher v1.4: Now Available
The Ed-Fi Alliance is pleased to announce the release of Ed-Fi API Publisher v1.4. This release adds support for Ed-Fi API v8, reads large sources faster with cursor paging, lets a failed run resume where it stopped, and reports through its exit code whether a run lost documents. It also moves the API Publisher to .NET 10.
Highlightsโ
Ed-Fi API v8 Supportโ
The API Publisher can now publish from and to Ed-Fi API v8, in any combination with the Ed-Fi ODS/API:
- from an ODS/API to Ed-Fi API v8
- from Ed-Fi API v8 to an ODS/API
- between two Ed-Fi API v8 instances
Support is validated against Ed-Fi API v8.0. The API Publisher now reads each API's Discovery document to find where it serves its resources and its token endpoint, so a connection needs only the API's base URL, key and secret. New optional connection settings (authUrl, dataManagementUrlSegment, changeQueriesUrlSegment) cover APIs that sit behind a proxy or declare an address their callers cannot reach.
Considerations for API Hosts lists the claim sets, API client setup and prerequisites for an Ed-Fi API v8 target.
Cursor Pagingโ
When the source is an Ed-Fi ODS/API 7.3+ or Ed-Fi API 8.1+, the API Publisher reads each resource with partitioned cursor paging instead of offset paging. Each resource is split into partitions that are read in parallel, and a page deep in a resource is no slower to read than the first one, which shortens publishing for large resources. Other sources, including Ed-Fi API v8.0, are read with offset paging as before.
Cursor paging is on by default. Use --disableCursorPaging=true to return to offset paging.
Resumable Runsโ
A run that fails partway through can now be continued with --resumeLastRun=true instead of starting again, for sources read with cursor paging. The API Publisher keeps its progress in a run state file, written to the working directory unless --runStatePath is set.
Exit Codes That Report Lost Documentsโ
Each run now ends with a summary table and a specific exit code:
| Code | Meaning |
|---|---|
0 | Success |
1 | Documents rejected beyond the tolerance |
2 | Run incomplete |
3 | Authentication failure |
4 | Invalid configuration |
The toleratedItemErrorCount option sets how many rejected documents a run may have and still succeed.
Reliability and Memoryโ
429 Too Many Requestsresponses from the source are retried, honoringRetry-After, and concurrent source requests can be capped withmaxConcurrentSourceRequests.- Bearer token refresh is retried before the token expires, and a
401response triggers a new token and a replay of the request. - Bounded processing buffers and streamed page reads lower memory growth on long runs.
- A new
processDeletesAndKeyChangesOnFullPublishoption applies deletes and key changes on a full publish.
Before You Upgradeโ
- .NET 10 required. Install the .NET 10 runtime before upgrading a deployment that uses the portable
EdFi.ApiPublisherpackage. The Windows package includes the runtime, and the Docker image is built on .NET 10. - Exit codes changed. A run that lost documents no longer exits with
0, and failures no longer share a single code of-1(255on Linux and macOS). Update any automation that tests for-1or255. Best-effort behavior is available with--toleratedItemErrorCount=-1. - Ed-Fi API v8 behind a rewriting proxy. The API Publisher now asks Ed-Fi API v8 for
datadirectly, so a proxy that only routes/data/v3/*answers404. Remove the rewrite, or set--sourceDataManagementUrlSegment=data/v3or--targetDataManagementUrlSegment=data/v3. An ODS/API is unaffected. - Token endpoint taken from Discovery. A connection without
authUrlnow requests its token from theoauthURL the API declares. If the API declares an address its callers cannot reach, setauthUrlon the connection.
The release notes list the other behavior changes, including the new defaults for buffering and 429 retries.
Known Issuesโ
Ed-Fi API v8.0 rejects requests above its default rate limit, so turn on --enableRateLimit when publishing into it. It does not provide snapshot isolation as a source, so publish from it while it is not being changed. Writes that time out on every retry are not yet reported as failed. See Known Issues Details for these and the few data values that differ between the two APIs.
Try It Outโ
Download v1.4.0 from the GitHub release, then see What's New and API Publisher Configuration for the new options.
What's Nextโ
You can track upcoming work in the Roadmap Boards on GitHub.
We'd love to hear how v1.4 works for you. Report bugs or request features through the Ed-Fi Community Hub.