Tengo Axios con todos los interceptores. luego tengo la carpeta api y pongo cada base de solicitud de función en el punto final api dentro de ella.
por ejemplo:
api/user.js api/posts.js api/auth.jsy así sucesivamente... dentro de los archivos JS tengo varias solicitudes de obtención como esta:
export getUsers = ({onSuccess, onError, onDone}) => { return Axios.get("Smaple/users/url").then(res => { if ( res && res.data ) { onSuccess(res.data); } }).catch(err => { onError(err); }).finally(()=>{ onDone(); }) } Tengo múltiples funciones como esta. luego me doy cuenta de que me estoy duplicando porque el cuerpo del then , catch y finally son como los demás.
Entonces, ¿está bien crear una solicitud de obtención global como esta a continuación?
const GET_REQUEST = (URL, {onSuccess, onError, onDone}) => { return Axios.get(URL).then(res => { if ( res && res.data ) { onSuccess(res.data); } }).catch(err => { onError(err); }).finally(()=>{ onDone(err); }) } y luego el usuario GET_REQUEST así:
export getUsers = ({onSuccess, onError, onDone}) => { GET_REQUEST('Smaple/users/url', {onSuccess, onError, onDone}) } esto me hace pensar que tal vez más adelante en el futuro pueda manejar cada una de estas solicitudes de manera diferente y significa que mi GET_REQUEST debe tener múltiples declaraciones if y else. y creo que eso no es bueno. ¿Es esta una buena práctica o no?
Siguiendo uno de los principios del Código Limpio (le recomiendo mucho el libro llamado Código Limpio (Robert C Martin) ), su primer enfoque es el correcto. Trate de seguir el principio DRY tanto como pueda y evite pensar demasiado en cómo debería comportarse su código en el futuro. Esto lo llevará a soluciones más limpias y legibles.
Su código siempre está listo para ser refactorizado cuando sea necesario. No dudes en cambiar tu código una vez hecho. Pero dejaría el código con una sola función.
En cuanto al hecho de crear una función global, apuntaría a crear una clase (Conector a su servidor) y definir allí esta función.