2025-08-05
CAML vs REST vs JSON for SharePoint Lists

CAML vs REST vs JSON in Microsoft Lists: The Uncomfortable Truth About Performance, Scale, and “Modern” Choices
Overview
Power Platform pros love REST and JSON formatting—but many real-world Lists still run better with CAML for complex, server-side filtering. We compare the strengths, tradeoffs, and gotchas so you can pick the right tool before you ship.
Who This Is For
-
Power Platform makers & SharePoint admins
-
Power Automate flow builders
-
Architects owning Lists at >5k items or complex filters
-
Teams fighting throttling, timeouts, or sluggish views
Key Takeaways
-
CAML isn’t dead: It excels at complex AND/OR logic, nested lookups, calculated fields, and large lists by pushing work to the SharePoint backend.
-
REST is everywhere—but not invincible: Great for integrations and cloud tooling, but prone to throttling, payload bloat, and client-side stitching under load.
-
JSON Formatting = instant UI wins: Perfect for quick, pretty views—until item counts spike and browsers choke on heavy client-side logic.
-
Match tool to task:
-
CAML → heavy server-side filtering, large datasets, strict column selection
-
REST → interoperability, connectors, Power BI/Teams/3rd-party integrations
-
JSON → lightweight, tactical UI enhancements (not long-term dashboards)
-
Deep Dive
Why CAML Refuses to Die
-
Strengths
-
Complex, deeply nested filters with efficient server-side execution
-
Precise column selection and paging; avoids dragging megabytes over the wire
-
Plays nicely with list view thresholds (5,000+) when queries are indexed/specific
-
-
Watch-outs
-
Verbose XML; steeper learning curve and scarcer “modern” docs
-
-
Best For
-
Large lists, intricate business rules, calculated fields, multi-lookup filters
-
REST: The Double-Edged Default
-
Strengths
-
Universal, documented, connector-friendly (Power Automate, Power BI, Teams)
-
Easy JSON payloads; broad CRUD coverage
-
-
Watch-outs
-
Throttling (429s), retries, and silent slowdowns at scale
-
Client-heavy data shaping (looping, merging, filtering) → increased latency
-
Batch writes need careful orchestration and error handling
-
-
Best For
-
Integrations, dashboards, cross-cloud scenarios, quick automation glue
-
JSON Formatting: Custom UI or Unseen Trap?
-
Strengths
-
Fast, code-light visual polish (status pills, bars, icons, buttons)
-
Empowers makers without custom SPFx or app builds
-
-
Watch-outs
-
Client-side performance cost grows with item count & nested conditions
-
Maintainability: complex formatting = “curly-brace spaghetti”
-
Platform changes can break clever hacks; don’t use to “hide” permissions
-
-
Best For
-
Small/medium lists, tactical views, temporary dashboards, internal boards
-
Decision Framework (quick rubric)
-
Complex filters or giant lists? Start with CAML.
-
Need integrations or broad tooling support? Use REST, but load-test for throttling.
-
Need UI polish today? Apply JSON lightly; keep logic simple and views lean.
-
Production readiness: index key columns, minimize returned fields, test with prod-scale data.
-
Security: set real permissions; don’t “hide” data with formatting tricks.
Performance & Resilience Checklist
-
Index columns used in filters/sorts
-
Return only needed fields (select/expand minimal)
-
Use CAML for multi-layered logic and tight server-side filtering
-
For REST: implement exponential backoff, chunking, and idempotent retries
-
Avoid client-side loops on large payloads; push work server-side where possible
-
Keep JSON formatting minimal; test with real item counts and older browsers/devices
-
Monitor: latency, 429 rates, payload sizes, and failed retries in production
Real-World Gotchas Highlighted
-
REST migrations that pass dev tests but collapse at 40k–75k items due to throttling and payload size
-
JSON-heavy views that look great at 500 items but lag badly at 10k+
-
Security reviews flagging formatting-exposed metadata that should’ve been permission-trimmed
Practical “When to Use What”
-
CAML: approval rules spanning calculated + lookup fields; complex AND/OR; threshold-safe paging
-
REST: Power BI taps, Teams tabs, third-party connectors, cross-service automations
-
JSON: executive status board, quick color-coding, link buttons—short-term, low-complexity
Call to Action
Have a spicy CAML snippet, a REST throttling war story, or a clever JSON trick? Share it—your workaround might save someone else’s rollout.
Host: Mirko Peters