1. /**
  2. * Configures API endpoint parameters for internal tooling with verbose logging.
  3. *
  4. * @param {object} config - Configuration object containing API endpoint details.
  5. * Expected properties: 'base_url', 'endpoints' (object).
  6. * endpoints: { 'endpoint_name': { 'param1': 'value1', 'param2': 'value2' } }
  7. * @param {object} logger - Logger object (e.g., Winston, console). Must have a `log` method.
  8. */
  9. function configureApiEndpoints(config, logger) {
  10. if (!config || !config.base_url || !config.endpoints) {
  11. logger.error("Invalid config provided. Missing base_url or endpoints.");
  12. return;
  13. }
  14. const base_url = config.base_url;
  15. const endpoints = config.endpoints;
  16. if (!endpoints) {
  17. logger.error("No endpoints defined in config.");
  18. return;
  19. }
  20. for (const endpointName in endpoints) {
  21. if (endpoints.hasOwnProperty(endpointName)) {
  22. const endpointConfig = endpoints[endpointName];
  23. if (!endpointConfig) {
  24. logger.warn(`No configuration found for endpoint: ${endpointName}`);
  25. continue;
  26. }
  27. const endpointUrl = `${base_url}/${endpointName}`;
  28. logger.debug(`Configuring endpoint: ${endpointUrl}`);
  29. // Inject parameters into the URL. Handles different data types.
  30. let params = [];
  31. for (const paramName in endpointConfig) {
  32. if (endpointConfig.hasOwnProperty(paramName)) {
  33. const paramValue = endpointConfig[paramName];
  34. if (paramValue !== undefined && paramValue !== null) { //Avoid undefined/null values
  35. params.push(`${paramName}=${encodeURIComponent(paramValue)}`); //Encode for URL safety
  36. } else {
  37. logger.warn(`Parameter ${paramName} is undefined/null for endpoint ${endpointName}. Skipping.`);
  38. }
  39. }
  40. }
  41. if (params.length > 0) {
  42. endpointUrl += `?${params.join('&')}`;
  43. }
  44. logger.info(`Endpoint configured: ${endpointUrl}`);
  45. }
  46. }
  47. }
  48. // Example usage (replace with your actual config and logger)
  49. // const myConfig = {
  50. // base_url: 'https://api.example.com',
  51. // endpoints: {
  52. // 'users': { 'id': 123, 'status': 'active' },
  53. // 'products': { 'category': 'electronics', 'sort': 'price' }
  54. // }
  55. // };
  56. // function myLogger(message) {
  57. // console.log(message);
  58. // }
  59. // configureApiEndpoints(myConfig, myLogger);

Add your comment