DEV Community

Nikhil Sarpatwari
Nikhil Sarpatwari

Posted on

Web API vs. XMLHttpRequest in Dynamics 365: Which One To Use?

As a Dynamics 365 developer, you’ve likely encountered situations where you need to make server-side calls in your JavaScript code. When working with the Web API, you have two primary options: Xrm.WebApi and XMLHttpRequest (XHR). While both get the job done, they differ significantly in approach, ease of use, and ideal use cases.

Let’s break them down to help you decide which one fits your needs.


Xrm.WebApi: The Dynamics 365 Native Approach

Xrm.WebApi is built into Dynamics 365 as part of the Xrm object. Microsoft designed it to simplify Web API interactions, especially when working within forms or web resources.

Why Use Xrm.WebApi?

  • Promise-based Asynchronous Calls: Leverages modern JavaScript promises for cleaner .then() and .catch() syntax.
  • Simplified Setup: No need to manage authentication or base URLs—Dynamics 365 handles it for you.
  • Built-in CRUD Methods: Offers easy-to-use methods like retrieveRecord, createRecord, updateRecord, and deleteRecord.
  • Standardized Error Handling: Delivers structured error messages aligned with Dynamics 365’s error model.

Example: Retrieving an Account Record

Xrm.WebApi.retrieveRecord("account", "a8a19cdd-88df-e311-b8e5-6c3be5a8b200", "?$select=name")
  .then((result) => {
    console.log(`Account Name: ${result.name}`);
  })
  .catch((error) => {
    console.error(`Error: ${error.message}`);
  });
Enter fullscreen mode Exit fullscreen mode

When to Use Xrm.WebApi

  • Performing standard CRUD operations within Dynamics 365.
  • Working within forms, web resources, or client-side scripts.
  • Needing built-in authentication and error handling.

XMLHttpRequest: The Low-Level, Flexible Approach

XMLHttpRequest (XHR) is a browser-native method for making HTTP requests. It’s more flexible but requires extra setup. Unlike Xrm.WebApi, it doesn’t rely on Dynamics 365, making it versatile for broader scenarios.

Why Use XMLHttpRequest?

  • Synchronous or Asynchronous Options: Supports both, though synchronous calls are generally discouraged.
  • Greater Flexibility: Gives you full control over headers, authentication, and request structure.
  • Works Outside Dynamics 365: Ideal for integrations where the Dynamics context isn’t available.

Example: Retrieving an Account Record Using XHR

const req = new XMLHttpRequest();
req.open("GET", `${Xrm.Utility.getGlobalContext().getClientUrl()}/api/data/v9.2/accounts(a8a19cdd-88df-e311-b8e5-6c3be5a8b200)?$select=name`, true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
  if (this.readyState === 4 && this.status === 200) {
    const result = JSON.parse(this.response);
    console.log(`Account Name: ${result.name}`);
  }
};
req.send();
Enter fullscreen mode Exit fullscreen mode

When to Use XMLHttpRequest

  • Handling advanced operations like batch requests or FetchXML queries.
  • Working outside the Dynamics 365 environment.
  • Requiring full control over the request structure.

Xrm.WebApi vs. XMLHttpRequest: A Quick Comparison

Feature Xrm.WebApi XMLHttpRequest
Ease of Use High (simplified setup) Moderate (manual setup)
Flexibility Limited to Dynamics 365 High (fully customizable)
Authentication Built-in Manual configuration
Best For CRUD in Dynamics context Complex or external calls

Final Thoughts

For most Dynamics 365 tasks, Xrm.WebApi is the go-to choice thanks to its simplicity, built-in authentication, and structured error handling. However, XMLHttpRequest shines when you need more control, like working outside Dynamics 365 or tackling complex queries.

In a future post, I’ll dive deeper into the synchronous vs. asynchronous ways of calling Xrm.WebApi in Dynamics 365 using JavaScript—stay tuned for that!

Heroku

Built for developers, by developers.

Whether you're building a simple prototype or a business-critical product, Heroku's fully-managed platform gives you the simplest path to delivering apps quickly — using the tools and languages you already love!

Learn More

Top comments (0)

👋 Kindness is contagious

If you found this post useful, please drop a ❤️ or a friendly comment!

Okay.