Handle an OData request against an already-resolved service.
The registry-independent seam: compose your own route, choose your own
middleware pipeline, and bind a specific service — e.g. a curated, Basic-auth
endpoint for Excel/Power BI beside the standard registry-resolved /odata space:
Route::any('excel/{path?}', fn (Request $r) =>
app(OData::class)->forService($r, app(ExcelService::class))
)->where('path', '.*')->middleware('auth.basic');
The service declares its own mount via route()/endpoint(). When mounting a
service on a non-standard prefix, override BOTH so path-stripping (route()) AND
the self-referential URLs — @odata.context, @odata.nextLink (endpoint()) — follow
that prefix; otherwise paginated responses emit next-links into the default
/odata namespace and downstream clients page into the wrong place.