Preguntas y Respuestas de GraphQL - Nivel Básico

1. ¿Qué es GraphQL?

GraphQL es un lenguaje de consulta para APIs que permite a los clientes solicitar exactamente los datos que necesitan, evitando la sobrecarga de datos innecesarios.

2. ¿Cómo se define un esquema en GraphQL?

Se define usando el lenguaje de esquema de GraphQL (SDL). Un ejemplo de esquema básico:

type Query { hello: String }

3. ¿Cómo se hace una consulta simple en GraphQL?

Ejemplo de consulta para obtener un mensaje de saludo:

{ hello }

4. ¿Qué es una mutación en GraphQL?

Las mutaciones permiten modificar datos en el servidor. Ejemplo de una mutación para agregar un usuario:

mutation { addUser(name: "Juan") { id name } }

5. ¿Qué es un resolver en GraphQL?

Un resolver es una función que maneja una consulta o mutación y devuelve los datos solicitados.

6. ¿Cómo se define un tipo en GraphQL?

Ejemplo de un tipo de usuario:

type User { id: ID name: String email: String }

7. ¿GraphQL reemplaza a REST?

No, GraphQL es una alternativa a REST que ofrece mayor flexibilidad en la obtención de datos.

8. ¿Cómo se define un argumento en una consulta GraphQL?

Ejemplo de una consulta con un argumento:

type Query { user(id: ID!): User }

9. ¿Cómo se ejecuta una consulta en GraphQL?

Usando una herramienta como GraphiQL o Apollo Client.

10. ¿Qué es introspección en GraphQL?

Es la capacidad de una API GraphQL para describir su propio esquema y tipos disponibles.

11. ¿Qué es una suscripción en GraphQL?

Una suscripción permite recibir actualizaciones en tiempo real desde el servidor.

type Subscription { newUser: User }

12. ¿Qué es un tipo escalar en GraphQL?

Son tipos de datos básicos como String, Int, Float, Boolean y ID.

13. ¿Cómo se pueden definir tipos personalizados en GraphQL?

Ejemplo de tipo personalizado:

type Address { street: String city: String zip: String }

14. ¿Cómo se pueden definir relaciones entre tipos?

Ejemplo de relación entre User y Address:

type User { id: ID name: String address: Address }

15. ¿Qué herramientas se pueden usar para GraphQL en el frontend?

Apollo Client, Relay y urql son algunas herramientas populares.

16. ¿Cómo se pueden pasar parámetros a una mutación?

Ejemplo de mutación con parámetros:

mutation { createUser(name: "Maria", email: "maria@mail.com") { id name } }

17. ¿Qué es Apollo Server?

Es una implementación de GraphQL en Node.js para construir APIs GraphQL.

18. ¿Cómo se pueden agregar validaciones en GraphQL?

Se pueden implementar validaciones en los resolvers o usando directivas personalizadas.

19. ¿GraphQL es seguro?

Sí, pero es importante implementar autenticación y control de acceso en el servidor.

20. ¿Cómo se puede hacer paginación en GraphQL?

Usando parámetros como limit y offset en las consultas.

Preguntas y Respuestas de GraphQL - Nivel Básico

21. ¿Cómo se maneja la autenticación en GraphQL?

Generalmente se usa JWT (JSON Web Tokens) o sesiones, enviando el token en los headers de la petición.

22. ¿GraphQL usa HTTP?

Sí, GraphQL generalmente se implementa sobre HTTP, utilizando el método POST para consultas y mutaciones.

23. ¿Cómo se manejan los errores en GraphQL?

Los errores se devuelven en la sección "errors" de la respuesta JSON de GraphQL.

{ "errors": [ { "message": "User not found", "locations": [{"line": 2, "column": 3}] } ] }

24. ¿Qué es Apollo Client?

Apollo Client es una biblioteca para consumir APIs GraphQL desde el frontend.

25. ¿Cómo se pueden evitar problemas de sobrecarga en GraphQL?

Se pueden usar técnicas como limitación de profundidad de consulta, persistencia de consultas y caché.

26. ¿Cómo se pueden proteger las APIs GraphQL?

Implementando autenticación, control de acceso, rate limiting y validaciones en los resolvers.

27. ¿Qué es DataLoader en GraphQL?

Es una herramienta que ayuda a evitar el problema de N+1 consultas optimizando el acceso a la base de datos.

28. ¿Cómo se pueden filtrar datos en GraphQL?

Pasando argumentos en la consulta, por ejemplo:

query { users(filter: { age: 30 }) { id name } }

29. ¿GraphQL soporta WebSockets?

Sí, GraphQL soporta WebSockets para suscripciones en tiempo real.

30. ¿Cómo se pueden realizar consultas anidadas en GraphQL?

Ejemplo de consulta anidada:

query { user(id: 1) { name address { city zip } } }

 

Preguntas y Respuestas de GraphQL - Nivel Básico

31. ¿Cómo se pueden implementar roles en GraphQL?

Se pueden definir permisos en los resolvers y verificar el rol del usuario antes de devolver datos.

32. ¿Qué es un resolver en GraphQL?

Es una función que proporciona la lógica para recuperar los datos de un campo en una consulta.

33. ¿Cómo se manejan las relaciones entre entidades en GraphQL?

Se pueden definir relaciones en el esquema y usar resolvers para recuperar datos relacionados.

34. ¿Qué es introspección en GraphQL?

Es una característica que permite a los clientes consultar el esquema del servidor para conocer sus tipos y operaciones disponibles.

35. ¿Cómo se puede optimizar el rendimiento en GraphQL?

Utilizando técnicas como caching, DataLoader y limitación de la profundidad de consulta.

36. ¿Qué diferencia hay entre GraphQL y REST en cuanto a respuestas?

GraphQL permite a los clientes definir la estructura de la respuesta, mientras que REST devuelve respuestas fijas según los endpoints.

37. ¿Cómo se pueden manejar datos paginados en GraphQL?

Usando argumentos como "limit" y "offset" o implementando el esquema de "cursor-based pagination".

38. ¿Qué es un fragmento en GraphQL?

Es una forma de reutilizar partes de una consulta para evitar redundancia.

fragment userInfo on User { id name email } query { users { ...userInfo } }

39. ¿GraphQL permite el versionado de API?

GraphQL no necesita versionado tradicional, ya que los clientes pueden solicitar solo los campos que necesitan.

40. ¿Cómo se puede implementar GraphQL en un backend de Node.js?

Se puede usar Apollo Server o Express con graphql-js para definir esquemas y resolvers.

 

Preguntas y Respuestas de GraphQL - Nivel Básico

41. ¿Cómo se maneja la seguridad en GraphQL?

Se puede manejar mediante autenticación, autorización, validación de entrada y control de acceso en los resolvers.

42. ¿Qué es Apollo Server?

Es una implementación de servidor GraphQL para Node.js que facilita la creación de APIs GraphQL.

43. ¿Cómo se pueden depurar consultas en GraphQL?

Se pueden usar herramientas como GraphiQL, Apollo Sandbox y logs en los resolvers.

44. ¿GraphQL es compatible con bases de datos relacionales?

Sí, se puede usar con bases de datos relacionales a través de ORMs como Prisma o Sequelize.

45. ¿Cómo se pueden manejar errores personalizados en GraphQL?

Se pueden lanzar errores en los resolvers y definir una estructura personalizada en la respuesta.

46. ¿GraphQL permite operaciones en lote?

Sí, se pueden enviar múltiples consultas o mutaciones en una sola petición.

47. ¿Cómo se pueden suscribir los clientes a eventos en GraphQL?

Mediante suscripciones usando WebSockets con Apollo Server o GraphQL Subscriptions.

48. ¿Qué diferencia hay entre una consulta y una mutación en GraphQL?

Las consultas recuperan datos, mientras que las mutaciones los modifican o crean.

49. ¿Cómo se pueden estructurar esquemas grandes en GraphQL?

Dividiendo el esquema en módulos y usando la función "mergeSchemas" de Apollo o herramientas similares.

50. ¿GraphQL permite la ejecución de middleware?

Sí, se pueden usar middleware en resolvers para tareas como autenticación o validación de datos.

Preguntas y Respuestas de GraphQL - Nivel Básico

51. ¿Cómo se maneja la autenticación en GraphQL?

Se puede manejar usando JWT (JSON Web Tokens), sesiones o API keys y verificarlas en los resolvers.

52. ¿Qué es GraphiQL?

Es una herramienta de interfaz de usuario para explorar y probar APIs GraphQL.

53. ¿Cómo se pueden evitar ataques de denegación de servicio (DoS) en GraphQL?

Implementando límites de profundidad de consulta, rate limiting y timeouts en las peticiones.

54. ¿Qué es DataLoader en GraphQL?

Es una biblioteca para reducir el número de consultas a la base de datos mediante batching y caching.

55. ¿Cómo se pueden manejar múltiples orígenes de datos en GraphQL?

Se pueden usar múltiples resolvers para recuperar datos de diferentes fuentes, como bases de datos y APIs externas.

56. ¿Qué es un esquema federado en GraphQL?

Es un enfoque que permite dividir un esquema en múltiples microservicios y combinarlos en una API unificada.

57. ¿Cómo se pueden validar entradas en GraphQL?

Se pueden definir reglas de validación en los resolvers o usar bibliotecas como Yup o Joi.

58. ¿GraphQL permite el cacheo de respuestas?

Sí, mediante soluciones como Apollo Client Cache, Redis o estrategias de caching en el servidor.

59. ¿Cómo se pueden extender tipos en GraphQL?

Usando la palabra clave "extend type" para agregar nuevos campos o funcionalidades a un tipo existente.

60. ¿Cómo se pueden documentar APIs GraphQL?

Se pueden usar comentarios en el esquema, herramientas como GraphQL Playground o generar documentación automática con GraphQL Docs.

 

Preguntas y Respuestas de GraphQL - Nivel Básico

61. ¿Cómo se pueden manejar errores en GraphQL?

Se pueden capturar errores en los resolvers y devolver mensajes personalizados en la respuesta.

62. ¿Qué diferencia hay entre REST y GraphQL en cuanto a manejo de errores?

En REST, los errores se manejan con códigos HTTP; en GraphQL, se devuelven en el campo "errors" de la respuesta.

63. ¿Cómo se pueden crear alias en GraphQL?

Usando nombres personalizados en la consulta, por ejemplo: { aliasNombre: usuario { id, nombre } }

64. ¿GraphQL soporta autenticación por OAuth?

Sí, se puede implementar autenticación OAuth mediante tokens de acceso en las cabeceras de la petición.

65. ¿Cómo se pueden optimizar consultas en GraphQL?

Usando técnicas como DataLoader, fragmentos, persistencia de consultas y limitando la profundidad de las consultas.

66. ¿Se pueden hacer peticiones GraphQL desde un navegador?

Sí, usando fetch API en JavaScript o clientes como Apollo Client.

67. ¿Cómo se pueden definir valores por defecto en GraphQL?

Asignando un valor en la declaración del argumento, por ejemplo: edad: Int = 18

68. ¿Cómo se pueden realizar peticiones POST en GraphQL?

Enviando una solicitud HTTP POST con el cuerpo en formato JSON, incluyendo la consulta y variables.

69. ¿GraphQL permite usar variables en las consultas?

Sí, las variables se definen fuera de la consulta y se pasan en el cuerpo de la solicitud.

70. ¿Se puede limitar el número de resultados en una consulta GraphQL?

Sí, mediante argumentos como "limit" o "first" en los resolvers.

 

Preguntas y Respuestas de GraphQL - Nivel Básico

71. ¿GraphQL permite consultas anidadas?

Sí, se pueden realizar consultas anidadas para obtener datos relacionados en una sola petición.

72. ¿Cómo se define un tipo de entrada en GraphQL?

Con la palabra clave "input", por ejemplo: input UsuarioInput { nombre: String, edad: Int }

73. ¿Cómo se usa un tipo de entrada en una mutación?

Se usa como argumento en la mutación, por ejemplo: mutation { crearUsuario(input: UsuarioInput) { id, nombre } }

74. ¿Qué es el esquema en GraphQL?

Es la definición de los tipos, consultas y mutaciones disponibles en una API GraphQL.

75. ¿Cómo se define una consulta con argumentos?

Se especifican en la definición del esquema, por ejemplo: type Query { usuario(id: ID!): Usuario }

76. ¿Cómo se pueden agregar comentarios en un esquema GraphQL?

Usando el símbolo "#" antes del texto del comentario.

77. ¿Qué es una suscripción en GraphQL?

Es una operación que permite recibir actualizaciones en tiempo real cuando cambian los datos.

78. ¿Cómo se define una suscripción en GraphQL?

Se usa la palabra clave "type Subscription", por ejemplo: type Subscription { usuarioCreado: Usuario }

79. ¿GraphQL es compatible con WebSockets?

Sí, las suscripciones en GraphQL suelen implementarse usando WebSockets para recibir datos en tiempo real.

80. ¿Cómo se pueden filtrar resultados en GraphQL?

Se pueden usar argumentos en las consultas, como "filter" o "where", para aplicar condiciones a los datos.

 

Preguntas y Respuestas de GraphQL - Nivel Básico

81. ¿Cómo se manejan los errores de validación en GraphQL?

GraphQL devuelve un objeto "errors" en la respuesta con detalles sobre el error.

82. ¿Cómo se pueden combinar múltiples consultas en una sola petición?

Se pueden combinar dentro de una misma consulta GraphQL utilizando múltiples selecciones de campos.

83. ¿Qué son las directivas en GraphQL?

Son funciones especiales que modifican la ejecución de una consulta, como @include y @skip.

84. ¿Cómo se usa la directiva @include en GraphQL?

Se usa para incluir un campo condicionalmente, por ejemplo: { usuario { nombre edad @include(if: true) } }

85. ¿Cómo se usa la directiva @skip en GraphQL?

Se usa para excluir un campo condicionalmente, por ejemplo: { usuario { nombre edad @skip(if: false) } }

86. ¿Qué es la introspección en GraphQL?

Es una funcionalidad que permite consultar el esquema de GraphQL para obtener información sobre tipos y operaciones disponibles.

87. ¿Cómo se usa la introspección en GraphQL?

Se pueden hacer consultas como: { __schema { types { name } } }

88. ¿Qué es GraphiQL?

Es una herramienta de interfaz gráfica para explorar y probar APIs GraphQL.

89. ¿Cómo se pueden prevenir consultas costosas en GraphQL?

Se pueden establecer límites de profundidad y complejidad en el servidor.

90. ¿GraphQL permite la paginación?

Sí, mediante parámetros como "first", "after", "last" y "before".

 

Preguntas y Respuestas de GraphQL - Nivel Básico

91. ¿Qué significa que GraphQL es fuertemente tipado?

Significa que todos los datos y operaciones en GraphQL deben cumplir con un esquema predefinido.

92. ¿Cómo se define un tipo enum en GraphQL?

Se usa la palabra clave "enum", por ejemplo: enum Estado { ACTIVO, INACTIVO, PENDIENTE }

93. ¿Qué es un alias en GraphQL?

Permite cambiar el nombre de un campo en la respuesta, por ejemplo: { usuarioActivo: usuario(id: 1) { nombre } }

94. ¿Para qué sirven las fragmentos en GraphQL?

Para reutilizar partes de consultas, por ejemplo: fragment DatosUsuario on Usuario { nombre edad }

95. ¿Cómo se usa un fragmento en una consulta?

Se usa con "...", por ejemplo: { usuario { ...DatosUsuario } }

96. ¿GraphQL soporta autenticación?

Sí, se puede implementar autenticación usando tokens como JWT.

97. ¿Cómo se pueden realizar consultas anidadas en GraphQL?

Se pueden incluir campos relacionados dentro de la consulta, por ejemplo: { usuario { nombre direccion { ciudad pais } } }

98. ¿Cómo se pueden actualizar datos en GraphQL?

Mediante mutaciones, por ejemplo: mutation { actualizarUsuario(id: 1, nombre: "Nuevo") { id nombre } }

99. ¿Cómo se pueden eliminar datos en GraphQL?

También mediante mutaciones, por ejemplo: mutation { eliminarUsuario(id: 1) { id } }

100. ¿Se pueden usar múltiples mutaciones en una sola petición?

Sí, es posible agrupar varias mutaciones en una misma consulta.

 

Preguntas y Respuestas de GraphQL - Nivel Básico

101. ¿Cómo se puede manejar la autorización en GraphQL?

Se puede manejar a nivel de resolvers usando middleware o directivas personalizadas.

102. ¿Qué es Apollo Client?

Es una librería de JavaScript para consumir APIs GraphQL en el frontend.

103. ¿Qué es Apollo Server?

Es una implementación de servidor GraphQL en JavaScript.

104. ¿Cómo se define una suscripción en GraphQL?

Usando la palabra clave "subscription", por ejemplo: subscription { nuevaPublicacion { id titulo } }

105. ¿Para qué sirven las suscripciones en GraphQL?

Permiten recibir actualizaciones en tiempo real cuando ocurren cambios en los datos.

106. ¿Qué protocolo se usa comúnmente para las suscripciones en GraphQL?

WebSockets es el protocolo más común para manejar suscripciones en GraphQL.

107. ¿Qué es un esquema en GraphQL?

Es la definición de los tipos de datos y operaciones disponibles en una API GraphQL.

108. ¿Cómo se define un esquema en GraphQL?

Usando la sintaxis SDL (Schema Definition Language), por ejemplo: type Usuario { id: ID! nombre: String! }

109. ¿Cómo se pueden evitar ataques de denegación de servicio (DoS) en GraphQL?

Implementando límites de profundidad, análisis de complejidad y validaciones de seguridad.

110. ¿GraphQL es compatible con REST?

Sí, GraphQL puede coexistir con APIs REST y hasta integrarse con ellas.

 

Preguntas y Respuestas de GraphQL - Nivel Básico

111. ¿Qué diferencia hay entre GraphQL y SQL?

GraphQL es un lenguaje de consulta para APIs, mientras que SQL es para bases de datos relacionales.

112. ¿Cómo se pueden manejar errores en GraphQL?

GraphQL devuelve errores estructurados dentro del campo "errors" de la respuesta JSON.

113. ¿Qué es un resolver en GraphQL?

Es una función que obtiene los datos solicitados en una consulta GraphQL.

114. ¿Cómo se definen los resolvers en GraphQL?

Generalmente en el backend con funciones que resuelven los datos de cada campo solicitado.

115. ¿Se pueden usar variables en GraphQL?

Sí, se pueden definir variables en una consulta usando el símbolo "$".

116. ¿Cómo se pasan variables en una consulta GraphQL?

Se envían en el cuerpo de la petición junto con la consulta.

117. ¿GraphQL soporta paginación?

Sí, mediante argumentos como "limit" y "offset" o usando el enfoque de "cursors".

118. ¿Qué es un input type en GraphQL?

Es un tipo especial para enviar datos como argumento en mutaciones.

119. ¿Cómo se define un input type?

Con la palabra clave "input", por ejemplo: input UsuarioInput { nombre: String edad: Int }

120. ¿Cómo se usa un input type en una mutación?

Se pasa como argumento, por ejemplo: mutation { crearUsuario(datos: { nombre: "Ana", edad: 30 }) { id } }