Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

230
Views
¿Cómo escribir una función escrita que administre mis rutas api?

Haciendo un pequeño experimento para reducir el olor del código y en ese esfuerzo estoy tratando de escribir una función escrita que me permita definir mis puntos finales en una ubicación dentro de mi aplicación. La idea es que, si alguna vez cambio o agrego rutas, puedo definirlas en un área que luego se dispersa en la aplicación.

El siguiente ejemplo es donde estoy actualmente. Si bien funciona , todavía es un poco desordenado y no exactamente SECO (repite el valor de enumeración como la path en la función getApiAddress() ).

¿Alguna idea de cómo puedo crear una función que me permita agregar n [] id:string mientras me deshago del {target: '', path: ''} y solo tengo un valor que puede aceptar esos valores de cadena de identificación ?

 const apiAddress = process.env === 'PRODUCTION' ? 'https://some-address.com' : 'http://localhost:5000'; export enum targetsEnum { transcribe = '/services/transcribe', transcribeId = '/services/transcribe/:id', } export type ApiTargets = targetsEnum.transcribe | targetsEnum.transcribeId; export const getApiAddress = (target: ApiTargets, id?: string[]): string => { const endpoints = [ { target: targetsEnum.transcribe, path: '/services/transcribe' }, { target: targetsEnum.transcribeId, path: `/services/transcribe/${id[0]}`, }, ]; const matchingEndpoint = endpoints.find( endpoint => endpoint.target === target ); return `${apiAddress}${matchingEndpoint.path}`; };
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

continuó trabajando en esto un poco más.

Con el enfoque a continuación, puede definir sus puntos finales en una ubicación (targetsEnum) y pasar eso a cualquier parte de su aplicación. Luego, el segundo argumento es una matriz de cadenas. Se inyectan en el valor de la enumeración mediante injectPathVariables().

ejemplo:

const endpoint = getApiAddress(ApiEndpointsEnum.youtubeId,['${youtubeId}']);

 const apiAddress = process.env === 'PRODUCTION' ? 'https://some-endpoint.com' : 'http://localhost:5000'; export enum testApiEndpointsEnum { test = '/test', testId = '/test/:id', testIdtestId = '/test/:id/test/:id', } export enum ApiEndpointsEnum { youtube = '/services/youtube', youtubeId = '/services/youtube/:id', transcribe = '/services/transcribe', transcribeId = '/services/transcribe/:id', } export type ApiTargets = | testApiEndpointsEnum.test | testApiEndpointsEnum.testId | testApiEndpointsEnum.testIdtestId // * ^ the TWO above this comment are for testing. | ApiEndpointsEnum.youtube | ApiEndpointsEnum.youtubeId | ApiEndpointsEnum.transcribe | ApiEndpointsEnum.transcribeId const injectPathVariables = ( target: ApiTargets[1], ids: string[] ): string => { let newStr = target; ids.forEach(i => { newStr = newStr.replace(':id', i); }); return newStr; }; const getApiAddress = (target: ApiTargets, ids?: string[]): string => { // * no ids provided + confirmation target doesn't need ids. if (ids === undefined && target.includes(':id') === false) { return `${apiAddress}${target}`; } // * no ids provided, but target does need ids. if ( (ids === undefined || ids.length === 0) && target.includes(':id') === true ) { return `${apiAddress}`; } // * ids have been provided. const injectedOutput = injectPathVariables(target, ids); if (injectedOutput.includes(':id')) { // * but not enough ids were provided for complete injection. return apiAddress; } // * sufficient ids have been provided return `${apiAddress}${injectedOutput}`; };
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!