/**
* Configures API endpoint parameters for internal tooling with verbose logging.
*
* @param {object} config - Configuration object containing API endpoint details.
* Expected properties: 'base_url', 'endpoints' (object).
* endpoints: { 'endpoint_name': { 'param1': 'value1', 'param2': 'value2' } }
* @param {object} logger - Logger object (e.g., Winston, console). Must have a `log` method.
*/
function configureApiEndpoints(config, logger) {
if (!config || !config.base_url || !config.endpoints) {
logger.error("Invalid config provided. Missing base_url or endpoints.");
return;
}
const base_url = config.base_url;
const endpoints = config.endpoints;
if (!endpoints) {
logger.error("No endpoints defined in config.");
return;
}
for (const endpointName in endpoints) {
if (endpoints.hasOwnProperty(endpointName)) {
const endpointConfig = endpoints[endpointName];
if (!endpointConfig) {
logger.warn(`No configuration found for endpoint: ${endpointName}`);
continue;
}
const endpointUrl = `${base_url}/${endpointName}`;
logger.debug(`Configuring endpoint: ${endpointUrl}`);
// Inject parameters into the URL. Handles different data types.
let params = [];
for (const paramName in endpointConfig) {
if (endpointConfig.hasOwnProperty(paramName)) {
const paramValue = endpointConfig[paramName];
if (paramValue !== undefined && paramValue !== null) { //Avoid undefined/null values
params.push(`${paramName}=${encodeURIComponent(paramValue)}`); //Encode for URL safety
} else {
logger.warn(`Parameter ${paramName} is undefined/null for endpoint ${endpointName}. Skipping.`);
}
}
}
if (params.length > 0) {
endpointUrl += `?${params.join('&')}`;
}
logger.info(`Endpoint configured: ${endpointUrl}`);
}
}
}
// Example usage (replace with your actual config and logger)
// const myConfig = {
// base_url: 'https://api.example.com',
// endpoints: {
// 'users': { 'id': 123, 'status': 'active' },
// 'products': { 'category': 'electronics', 'sort': 'price' }
// }
// };
// function myLogger(message) {
// console.log(message);
// }
// configureApiEndpoints(myConfig, myLogger);
Add your comment