API Gateway patterns for Dynamics 365
By Emil Björk · Microsoft business apps consultant, Gothenburg
How API gateways enhance Dynamics 365 integration architecture — Azure API Management, security, rate limiting, transformation.
On this page (5)
When many consumers integrate with Dynamics 365 — or when Dynamics needs to expose APIs externally — an API Gateway sits in front of the actual APIs to provide cross-cutting concerns: authentication, rate limiting, transformation, logging, versioning. Azure API Management (APIM) is Microsoft's offering; for serious Dynamics integration architectures, an API gateway is foundational infrastructure.
What an API gateway does.
- Authentication / authorisation — verify caller identity.
- Rate limiting — protect backend from overload.
- Request / response transformation — adapt formats.
- Caching — reduce backend load.
- Logging and analytics — visibility.
- Routing — direct traffic to appropriate backend.
- Versioning — multiple API versions coexist.
The gateway centralises these concerns; backends focus on business logic.
Why for Dynamics 365.
- Standardise external API access to Dataverse.
- Hide multiple backends — Dataverse + F&O + custom services behind one façade.
- Security boundary — additional defense layer.
- Throttle protection — prevent overwhelming Dataverse limits.
- Developer experience — discoverable, documented APIs.
Azure API Management (APIM).
- Developer portal — API documentation, testing.
- Policies — declarative request / response handling.
- Products — group APIs for consumers.
- Subscriptions — per-consumer keys.
- Backends — connections to actual API sources.
- Versions and revisions — version management.
Mature product; widely used.
Common patterns.
API façade
Multiple backends, one external API:
- External consumers see unified API.
- Gateway routes to appropriate backend.
- Backend complexity hidden.
For Dynamics + F&O + custom services, single external API simplifies consumer experience.
Throttling
Protect Dataverse:
- Gateway limits caller to N requests / minute.
- Aggregated across all calls.
- 429 returned when exceeded.
Dataverse has its own throttling; gateway adds tenant-level throttle and queue management.
Transformation
Adapt request / response:
- External format vs Dataverse format.
- Add / remove fields.
- Reformat dates, currencies.
- Inject defaults.
Reduces backend complexity; clients see clean API.
Caching
Frequently-read data:
- Cache response at gateway.
- Subsequent calls served from cache.
- TTL configured.
For read-heavy reference data (product catalog, country list), dramatically reduces Dataverse load.
Security policies.
- OAuth 2.0 — token validation.
- IP filtering.
- Client certificate authentication.
- JWT validation — claims-based access.
Each policy at gateway level; backend doesn't reimplement.
Versioning.
- v1 API endpoint.
- v2 updated API.
- Both coexist; consumers migrate gradually.
Without versioning, breaking changes break consumers; with, smooth evolution.
Backend mapping.
- Dataverse — OData API endpoint.
- F&O — data entities OData endpoint.
- Custom services — Azure Functions, App Services.
- External APIs — third-party services.
Gateway abstracts which backend; routing logic per request.
Developer portal.
- Self-service API documentation.
- Try-it-out console.
- API key generation.
- Usage analytics per developer.
For external developer ecosystems, the developer portal is the front door.
Monitoring at gateway.
- Per-API request volume.
- Latency distribution.
- Error rate.
- Per-consumer usage.
Centralised observability for all API traffic.
Common APIM policies.
<policies>
<inbound>
<validate-jwt header-name="Authorization">
<openid-config url="..." />
<required-claims>
<claim name="aud" match="any">
<value>api://my-api</value>
</claim>
</required-claims>
</validate-jwt>
<rate-limit calls="100" renewal-period="60" />
<set-backend-service base-url="https://my-dataverse..." />
</inbound>
<outbound>
<set-header name="X-Powered-By" exists-action="delete" />
</outbound>
</policies>
Policies declarative; powerful at expressing common patterns.
Multi-tenant scenarios.
- ISVs serving multiple customers via single gateway.
- Per-tenant routing.
- Tenant-isolated rate limits.
- Tenant-specific transformations.
The gateway handles multi-tenancy without backend complexity.
Pricing considerations.
- APIM Pricing tiered (Consumption, Developer, Basic, Standard, Premium).
- Premium for enterprise scale.
- Cost vs benefit modelling.
For high-volume APIs, Premium tier necessary.
Comparison with direct Dataverse API.
- Direct — simple, less control, no transformation.
- Gateway-mediated — more setup, more control, more observability.
Direct API fine for internal apps and Power Platform. Gateway for external consumers, multi-system façade, security perimeter.
Common pitfalls.
- Gateway as just passthrough. Adds latency without value.
- Heavy transformation logic at gateway. Should be in business logic layer.
- No documentation. Developer portal empty; adoption low.
- No versioning. Breaking changes propagate.
- Rate limits wrong. Too restrictive frustrates; too loose lets abuse through.
- Authentication misconfigured. Authorised callers blocked or unauthorised allowed.
Best practices.
- Document everything — schema, examples, errors.
- Version from day one.
- Standardised error responses.
- Comprehensive monitoring.
- Caching where data permits.
- Security policies tested.
- Performance tested.
Alternative: Power Platform's connectors as gateway.
- For Power Platform-only consumers, custom connectors serve similar purpose.
- Less for external consumers.
APIM is broader; custom connectors more Power Platform-specific.
Strategic positioning
API Management is the modern way to expose Dynamics 365 APIs to external consumers and to integrate multiple backends behind a unified façade. The investment in APIM setup pays back through:
- Cleaner consumer experience.
- Centralised security and rate limiting.
- Better observability.
- Easier evolution.
For organisations with multiple consumers of Dynamics APIs, multiple backend systems, or aspirations to expose APIs externally (B2B, partner ecosystems), API Gateway is essential infrastructure. Skip it and you'll end up reinventing pieces poorly across multiple integrations.
Related guides
- Integration patterns for Dynamics 365 CRMThe standard integration patterns for CRM-side Dynamics 365 — webhooks, Dataverse plug-ins, Service Bus integration, virtual tables, and pull vs push.
- Polling vs push patterns for Dynamics 365 integrationsHow to choose between polling and push integration patterns for Dynamics 365 — trade-offs, performance, freshness, and when each fits.
- Dataverse plug-ins vs Power AutomateThe decision between a C# plug-in and a Power Automate flow for integration logic in Dataverse — transactions, latency, throughput, ownership.
- Integrating Dynamics 365 with Zapier and MakeWhere Zapier and Make (formerly Integromat) fit next to Power Automate for Dynamics 365 — the honest cases for each, the governance problems.
- PCF controls vs embedded canvas appsTwo ways to put custom UI on a Dynamics 365 form — a Power Apps component framework control or an embedded canvas app — and how to choose based on data access.
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.