/**
* Decodes API responses with fallback logic.
* @param {string} responseBody The raw response body from the API.
* @param {object} decodingMap An object mapping content-type to decoding functions.
* @returns {any} The decoded data, or null if decoding fails.
*/
function decodeApiResponse(responseBody, decodingMap) {
if (!responseBody) {
console.warn("Response body is empty.");
return null;
}
const contentType = responseBody.split(';')[0].split(':')[1].trim().toLowerCase(); // Extract content type
if (decodingMap && decodingMap[contentType]) {
try {
return decodingMap[contentType](responseBody); // Use specific decoder function
} catch (error) {
console.error(`Decoding failed for content type ${contentType}:`, error);
return null; // Fallback if specific decoder fails
}
} else {
console.warn(`No decoder found for content type: ${contentType}`);
return null; // Fallback if no decoder is defined
}
}
/**
* Example decoder functions (can be extended)
*/
function decodeJson(body) {
try {
return JSON.parse(body);
} catch (error) {
console.error("JSON parsing error:", error);
return null;
}
}
function decodeXml(body) {
try {
// Implement XML parsing here (e.g., using xml2js)
// For simplicity, this example just returns the body as a string.
return body;
} catch (error) {
console.error("XML parsing error:", error);
return null;
}
}
function decodePlainText(body) {
return body;
}
//Example usage:
// const decodingMap = {
// 'application/json': decodeJson,
// 'application/xml': decodeXml,
// 'text/plain': decodePlainText
// };
// const response = '{"name": "John", "age": 30}';
// const decodedData = decodeApiResponse(response, decodingMap);
// console.log(decodedData);
// const response2 = '<root><name>Jane</name></root>';
// const decodedData2 = decodeApiResponse(response2, decodingMap);
// console.log(decodedData2);
// const response3 = "This is plain text";
// const decodedData3 = decodeApiResponse(response3, decodingMap);
// console.log(decodedData3);
//const response4 = null;
//const decodedData4 = decodeApiResponse(response4, decodingMap);
//console.log(decodedData4);
Add your comment