2.5 KiB
API Service
Purpose: trip planning, route/stage/POI/rule/offline/export endpoints.
MVP implementation should first work with mock providers and fixtures.
Provider interfaces:
- RoutingProvider.
- PoiProvider.
- ElevationProvider.
- WeatherProvider.
- RulesProvider.
- DeviceExportProvider.
Recommended backend:
- FastAPI or equivalent.
- PostgreSQL + PostGIS.
- Redis/worker for long-running imports/offline pack jobs.
See schemas/openapi.yaml and schemas/database.sql.
Implemented MVP
This package currently uses an Express TypeScript API with mock providers, BRouter bikepacking routing, optional OSRM fallback, and optional Overpass POIs. It implements:
POST /v1/tripsPOST /v1/routes/planPOST /v1/stages/planGET /v1/routes/:routeId/poisGET /v1/routes/:routeId/gapsGET /v1/rulesPOST /v1/offline-packsGET /v1/routes/:routeId/export?format=gpxPOST /v1/reports
Run locally:
npm -w @pikebacker/api run dev
The default provider mode is mock; it uses deterministic fixtures from packages/shared aligned with examples/sample_trip_request.json. A request can pass provider: "brouter" to use BRouter candidate selection or provider: "osrm" to use the configured OSRM endpoint. External routing/POI/rules providers return clear setup errors until their adapters and credentials are added.
For provider: "brouter", the API maps Pikebacker profiles to candidate BRouter profiles and selects by Pikebacker suitability score:
loaded_gravel:gravel,safety,trekkingbeginner_safe:safety,trekking,gravelhardtail_bikepacking:gravel,mtb,trekkingroad_touring:trekking,fastbike-lowtraffic,safetyebikepacking:trekking,safety,gravel
Environment
PORT=8000
ROUTING_PROVIDER=mock
POI_PROVIDER=mock
RULES_PROVIDER=mock
OSRM_BASE_URL=https://router.project-osrm.org
OSRM_PROFILE=bike
BROUTER_BASE_URL=https://brouter.de/brouter
BROUTER_PROFILE=
OVERPASS_BASE_URL=https://overpass-api.de/api/interpreter
No API keys are required for mock mode, BRouter public routing, OSRM demo routing, or Overpass public POI lookup. Keep external provider keys in environment variables only. Public routing/POI endpoints are not production dependencies.
To try live OSM POIs:
POI_PROVIDER=overpass npm -w @pikebacker/api run dev
Public Overpass instances can time out or reject broad queries. The route planner degrades by returning the route with a warning if POI lookup fails.