SOAP vs REST vs GraphQL for Dynamics 365

By Emil Björk · Microsoft business apps consultant, Gothenburg

How the three API styles compare for Dynamics 365 integrations — capabilities, when each fits, and the practical considerations for choosing.

Reviewed May 20263 min read · 670 wordsPublished
On this page (3)

Three predominant API styles offer different trade-offs for Dynamics 365 integrations: SOAP (the legacy enterprise standard), REST/OData (the dominant modern API style, what Dataverse uses), and GraphQL (the modern query-language alternative). Each has a place; choosing wisely matters.

SOAP overview.

  • XML-based.
  • WSDL contract.
  • Strict typing.
  • Built-in standards (WS-Security, WS-AtomicTransaction).
  • Verbose payloads.

Origin: late 1990s enterprise integration; still common in legacy.

REST overview.

  • Resource-oriented.
  • HTTP verbs (GET, POST, PUT, DELETE).
  • JSON typical.
  • Stateless.
  • Lighter than SOAP.

Dominant since mid-2000s; modern default.

OData

A specific REST flavour:

  • Standardised query semantics ($select, $filter, etc.).
  • Used by Dataverse and F&O.
  • Rich query capability.

GraphQL overview.

  • Single endpoint.
  • Client specifies query shape.
  • Strongly typed schema.
  • Subscriptions for real-time.
  • One round-trip for complex data.

Emerged 2015 from Facebook; popular for client-rich apps.

Comparison.

AspectSOAPREST/ODataGraphQL
FormatXMLJSONJSON
VerbosityHighModerateModerate
ContractWSDLOpenAPISchema
Query flexibilityLowModerate (OData)High
CachingHardHTTP-friendlyCustom
ToolsMature, enterpriseVastGrowing
Real-timeWS-* extensionsPush patternsSubscriptions

Dynamics 365 native.

  • Dataverse — REST/OData. SOAP organization service still supported but deprecated.
  • F&O — REST/OData via data entities. Custom services can use either.
  • GraphQL — not native; available via wrappers.

For Dynamics integrations, REST/OData is the canonical choice.

When SOAP still appears.

  • Integration with legacy enterprise systems (SAP, mainframes, banking).
  • Existing investments unfeasible to migrate.
  • Specific industry standards requiring SOAP.
  • Some Microsoft legacy APIs (older organization service).

For Dynamics, SOAP is for legacy compat, not new development.

When REST/OData wins (most Dynamics scenarios).

  • Calling Dynamics from any system.
  • Standard tools and libraries.
  • HTTP-friendly (caching, proxies).
  • Lighter than SOAP.

Default for new Dynamics integrations.

When GraphQL helps.

  • Front-end consumer benefits from query flexibility.
  • Mobile / bandwidth-constrained scenarios — request only what's needed.
  • Multiple data sources federated.
  • Strong developer experience preference.

Less common in Dynamics native scenarios; useful when fronting Dynamics + other systems.

Performance comparison.

  • REST — multiple endpoints; potentially multiple round-trips for related data.
  • OData $expand — fetch related in one call.
  • GraphQL — request exact shape; one round-trip.
  • SOAP — typically heavier payloads.

For complex queries, GraphQL can be most efficient; OData $expand often sufficient.

Caching.

  • REST — HTTP caching (ETags, Cache-Control).
  • GraphQL — harder; POST-based queries.
  • SOAP — typically no caching.

Caching favours REST.

Versioning.

  • REST/v1/, /v2/ paths or headers.
  • GraphQL — schema evolution (deprecate fields).
  • SOAP — namespace versions.

Each has pattern; all manageable.

Tooling.

  • REST — Swagger / OpenAPI, Postman, curl, every language.
  • OData — additional tools for OData specifically.
  • GraphQL — Apollo, Relay, GraphQL Playground.
  • SOAP — older tools; still many.

For Dynamics, REST tooling dominant.

Security.

  • REST — OAuth 2.0 typical.
  • GraphQL — same.
  • SOAP — WS-Security with signatures and encryption.

Modern: OAuth for all; WS-Security in legacy contexts.

Custom Dynamics services.

  • OData custom actions / functions — extend Dataverse standard API.
  • Custom REST APIs in Azure Functions — for non-Dataverse logic.
  • GraphQL wrappers — for specific scenarios.
  • SOAP services — rare; for legacy integration.

The right choice depends on consumer and pattern.

Multi-API support.

  • Some integrations expose multiple flavours.
  • API Gateway abstracts; consumers choose.
  • More work but maximises consumer choice.

Migration considerations.

  • SOAP → REST — common modernisation; significant effort.
  • REST → GraphQL — quality-of-life upgrade; substantial work.
  • REST to additional GraphQL — coexist; not migration.

Common pitfalls.

  • SOAP for new development. Almost always wrong choice today.
  • REST without OpenAPI — undiscoverable, hard to integrate.
  • GraphQL without query depth limits — DoS vulnerability.
  • OData over-fetch — without $select, fetching too much.
  • API style chosen by trend, not fit.

Best practices.

  • Default to REST/OData for Dynamics consumers.
  • Document with OpenAPI.
  • Use OAuth.
  • Version explicitly.
  • Consider GraphQL for complex client-rich apps.
  • Maintain SOAP only for legacy.

Hybrid landscapes

Most enterprises have all three:

  • Legacy SOAP for old integrations.
  • REST/OData for most.
  • GraphQL for specific scenarios.

Not religious choice; pragmatic per integration.

Strategic positioning

REST/OData is the right default for Dynamics 365 integrations. GraphQL is occasionally useful when client experience demands. SOAP is for legacy connectivity only.

For architects:

  • Choose pragmatically per integration.
  • Standardise where possible.
  • Document API styles in architecture.
  • Plan modernisation of SOAP legacy.

The teams that obsess over API style choice often lose sight of what matters: clear contracts, reliable operations, manageable evolution. Pick a style, do it well, focus on the outcomes.

Frequently asked questions

Which API style does Dynamics 365 use natively?

REST with OData. Dataverse exposes an OData v4 Web API, and Finance and Operations exposes data entities over OData. The SOAP-era organization service still exists for legacy compatibility, and GraphQL is only available through wrappers.

When does SOAP still appear?

In legacy enterprise integrations — SAP, mainframes, banking — and industry standards that mandate it. For new Dynamics development it is almost always the wrong choice.

When is GraphQL worth adding?

When a client-rich or mobile front end benefits from requesting exactly the shape it needs, or when several back ends are federated behind one endpoint. Add it alongside OData rather than replacing it, and enforce query depth limits.

What is the most common OData mistake?

Over-fetching — calling endpoints without $select and pulling every column. $select and $expand together usually make a single OData call as efficient as a GraphQL query.

Related guides

Browse every guide in Integrations or just Architecture patterns.

Was this helpful?

Signals which guides land and which need work. No account, no comment box — corrections go through the contact page.

Spot something wrong or want a topic covered? Send a correction or a topic request — both are welcome.