Estoy tratando de usar una API ( https://tracker.gg/developers/docs/titles/csgo ) y no funciona correctamente. Cuando trato de hacer una solicitud, solicita encabezados dentro de la búsqueda (nunca usé encabezados, solo búsqueda regular y una URL). Haciendo una pequeña búsqueda se me ocurrió:
async function fetchData() { const response = await fetch('https://public-api.tracker.gg/v2/csgo/standard/profile/steam/76561198008049283', { method: 'GET', headers: { 'TRN-Api-Key': 'XXXX-XXXXX-XXX-XXXXXX-XXX', //here goes the key that I got for this app. 'Accept': 'application/json', 'Accept-Encoding': 'gzip', }, mode: 'no-cors', }) const second = await response.json(); console.log(second); }Y cuando llamo a esta función, recibo dos errores dentro de la consola:
Mi conocimiento es demasiado básico en este momento y me gustaría obtener algunas ideas de lo que me estoy perdiendo y lo que podría hacer para aprender un poco más sobre la obtención de datos y cómo hacer validaciones cuando sea necesario (como una clave de autenticación)
Muy bien, después de jugar con la solicitud, me di cuenta de algo que debería haber sido obvio...
La solicitud que está tratando de hacer NO debería ocurrir en el navegador a menos que esté en el sitio de tracker.gg. En pocas palabras, debe realizar esta solicitud desde su aplicación ( servidor ). Servidor a servidor no tendrá efecto en cors.
Ahora entremos en los detalles sucios de ¿por qué? En primer lugar, su solicitud no incluirá el encabezado 'TRN-Api-Key' porque no está en la lista segura de CORS (como nos dice esta brillante respuesta). Básicamente, cuando realiza la solicitud de recuperación, elimina los encabezados que no están en la lista segura y, por lo tanto, 'TRN-Api-Key' se elimina de su solicitud de encabezado y no va a la API. Por lo tanto, está viendo que "no se envía ninguna clave de API" porque no se envía. Si elimina el modo: 'no-cors', se enviará la clave pero falla CORS. Si no tiene cors en uso, la solicitud debe realizarse en tracker.gg para tener el sitio de cors correcto.
Por lo tanto, los desarrolladores de este proyecto pensaron (y por una buena razón) que solo realizaría esta solicitud en un servidor (simplemente no es una forma segura de manejar la clave api al tenerla en el front-end). Si, en cambio, crea una API para que funcione con su API, su aplicación puede usar su propio servidor personalizado sin conocer la clave API (usando alguna forma de autenticación, por supuesto).
En pocas palabras, es responsabilidad de su servidor de juegos cuidar esta clave API y usarla de manera responsable para los usuarios de su aplicación. Lea los documentos de la API a la que está intentando acceder (también lea esa respuesta ya que es interesante).
Respuesta final: la clave API debe usarse para la comunicación de servidor a servidor como se pretendía (no en el navegador).