fabric-rest-api-perf-remediate — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited fabric-rest-api-perf-remediate (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Structured diagnostic workflows and automation scripts for identifying and resolving performance bottlenecks in Microsoft Fabric REST API integrations.
api.fabric.microsoft.com are slow or timing outInvoke-RestMethod supportDetermine the root cause category before applying a fix:
API Call Slow or Failing?
├── HTTP 429 returned?
│ ├── YES → Throttling. See §1 Throttling Diagnosis
│ └── NO → Continue
├── HTTP 430 returned?
│ ├── YES → Capacity exhausted. See §2 Capacity Limits
│ └── NO → Continue
├── HTTP 202 + LRO stalling?
│ ├── YES → Polling issue. See §3 LRO Optimization
│ └── NO → Continue
├── Large result sets slow?
│ ├── YES → Pagination. See §4 Pagination Tuning
│ └── NO → Continue
├── Token acquisition slow?
│ ├── YES → Auth latency. See §5 Token Performance
│ └── NO → General latency. See §6 Baseline BenchmarkingFabric throttles per-user, per-API within a time window. When exceeded, the API returns HTTP 429 with a Retry-After header (in seconds).
Diagnosis Steps:
Retry-After header values to understand cooldown periodsResolution Patterns:
| Pattern | Description |
|---|---|
| Exponential backoff | Respect Retry-After, then add jitter to avoid thundering herd |
| Request batching | Group related calls to reduce total API invocations |
| Caller isolation | Use separate service principals for independent workloads |
| Rate limiter | Implement a client-side token bucket before sending requests |
Key Facts:
Retry-After value is in seconds (commonly 30-60s)See throttling-deep-dive.md for implementation patterns.
Spark jobs and compute-bound operations have a separate throttle tied to the Fabric capacity SKU. When the max queue limit is reached, new jobs return HTTP 430.
Capacity Queue Limits:
| SKU | Queue Limit |
|---|---|
| F2 / F4 | 4 |
| F8 | 8 |
| F16 | 16 |
| F32 | 32 |
| F64 (P1) | 64 |
| F128 (P2) | 128 |
| F256 (P3) | 256 |
| F512 (P4) | 512 |
| F1024 | 1024 |
| F2048 | 2048 |
| Trial | Not supported |
Resolution:
Many Fabric APIs return HTTP 202 Accepted with three critical headers:
Location — polling URL (Get Operation State endpoint)x-ms-operation-id — operation GUID for constructing polling URLsRetry-After — seconds to wait before first pollCommon Performance Issues:
| Issue | Symptom | Fix |
|---|---|---|
| Aggressive polling | Hundreds of GET calls, wastes quota | Honor Retry-After, use exponential backoff |
| Ignoring Location header | Building URLs manually, missing result endpoint | Use Location header directly; it transitions from State to Result when complete |
| Not checking for result | Polling succeeds but result never fetched | After Succeeded status, call Get Operation Result |
| Missing failure handling | Stuck in infinite poll loop | Check for Failed and Skipped statuses |
LRO Status Values: Succeeded, Failed, Skipped, Completed
Run the LRO polling benchmark script to profile your polling efficiency.
See lro-patterns.md for complete polling implementation patterns.
Fabric paginated APIs return continuationToken and continuationUri in response bodies. Performance degrades when consuming large result sets sequentially.
Optimization Strategies:
continuationUri directly rather than rebuilding URLs with continuationTokenTemplate: Use the pagination walker template for efficient enumeration.
Slow Entra ID token acquisition adds latency to every API call chain.
Diagnosis:
Optimization:
| Technique | Impact |
|---|---|
| Token caching | Eliminate redundant auth round-trips |
| MSAL token cache serialization | Persist tokens across process restarts |
| Certificate-based auth | Faster than client secret for service principals |
| Reduce scope requests | Request only needed scopes per call |
Before remediate, establish a performance baseline.
Run the baseline benchmark script to capture:
Compare results against expected ranges in the baseline reference.
| Code | Meaning | Action |
|---|---|---|
| 200 | Success | Process response |
| 201 | Created (LRO complete) | Fetch result |
| 202 | Accepted (LRO started) | Begin polling via Location header |
| 400 | Bad request | Validate request body/parameters |
| 401 | Unauthorized | Refresh token, check scopes |
| 403 | Forbidden | Verify workspace/item permissions |
| 404 | Not found | Confirm workspace/item IDs |
| 429 | Throttled | Wait Retry-After seconds, then retry |
| 430 | Capacity exhausted | Reduce concurrent jobs or scale SKU |
| Problem | Likely Cause | Resolution |
|---|---|---|
| All calls slow (>2s) | Token not cached | Implement MSAL token caching |
| Intermittent 429s | Burst pattern | Add rate limiter with token bucket |
| LRO never completes | Operation failed silently | Check for Failed status in poll response |
| Pagination returns duplicates | Stale continuationToken | Always use fresh continuationUri from latest response |
| 430 on Spark submit | Capacity queue full | Check Monitoring Hub, scale SKU, or wait |
| Token acquisition >3s | Network/DNS issue | Test connectivity to login.microsoftonline.com |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.