Skip to main content

API layer in React with Axios

 

Why You Need an API Layer 


https://semaphoreci.com/blog/api-layer-react

3. Easily handle request cancellation

Thanks to the centralized nature of the API layer, you can effortlessly add custom features like cancellation to all API request definitions.

Your frontend application performs API calls asynchronously. This means that when calling the same API twice in a short amount of time, the response to the first request may arrive after the response to the second one. Because of this, your application may render inconsistent data.

A popular approach to deal with this problem is the debounce technique. The idea behind debounce is to wait a certain amount of time before executing the same operation twice. Implementing this and finding the right debounce time value for each scenario, however, is not easy. For this reason, you should consider API request cancellation. With request cancellation, the new API request simply cancels the previous one of the same type.

API request cancellation is simpler than debouncing and more useful. As you are about to see, adding such a feature to an API layer is easy and only requires a few lines of code. Considering that you might need request cancellation only in specific circumstances, the functions in your API layers should always pass a cancel boolean parameter to enable it as follows:


export function defineCancelApiObject(apiObject) { // an object that will contain a cancellation handler // associated to each API property name in the apiObject API object const cancelApiObject = {} // each property in the apiObject API layer object // is associated with a function that defines an API call // this loop iterates over each API property name Object.getOwnPropertyNames(apiObject).forEach((apiPropertyName) => { const cancellationControllerObject = { controller: undefined, } // associating the request cancellation handler with the API property name cancelApiObject[apiPropertyName] = { handleRequestCancellation: () => { // if the controller already exists, // canceling the request if (cancellationControllerObject.controller) { // canceling the request and returning this custom message cancellationControllerObject.controller.abort() } // generating a new controller // with the AbortController factory cancellationControllerObject.controller = new AbortController() return cancellationControllerObject.controller }, } }) return cancelApiObject }

Popular posts from this blog

setup prettier / eslint for create-react-app typescript

1. npm i -D prettier  2. create .prettierrc.json { "trailingComma": "all", "tabWidth": 2, "singleQuote": true, "jsxBracketSameLine": true,    "semi": false } 3. npm i -D eslint-config-prettier 4. in package.json, add this: "eslintConfig": { "extends": [ "react-app", "react-app/jest", "prettier" ] }, 5. install extension in VS Code Prettier extension

Big-Oh (O) Notation, and sorting in Javascript

Asymptotic notations are classified into three types: Worst case time complexity : It is a function defined as a result of a maximum number of steps taken on any instance of size n. It is usually expressed in  Big O notation . Average case time complexity : It is a function defined as a result of the average number of steps taken on any instance of size n. It is usually expressed in  Big theta notation . Best case time complexity : It is a function defined as a result of the minimum number of steps taken on any instance of size n. It is usually expressed in  Big omega notation . Space complexity : It is a function defined as a result of additional memory space needed to carry out the algorithm. It is usually expressed in  Big O notation . Big-Oh (O) notation Big Omega ( Ω ) notation Big Theta ( Θ ) notation Default sort() in JavaScript uses  insertion sort  by  V8 Engine of Chrome  and  Merge sort  by  Mozilla Firefox  and  Safari .   Heap Sort is regarded as an efficient algorithm, wi