¿Cuál es el valor correcto para `startCursor` y `endCursor` en `PageInfo` cuando no hay elementos/bordes? ¿La especificación de paginación de Relay está incorrecta?
La especificación de paginación Relay dice lo siguiente sobre PageInfo
:
También debe contener los campos
startCursor
yendCursor
, ambos de los cuales devuelven cadenas opacas no nulas.[…]
startCursor
yendCursor
deben ser los cursores correspondientes al primer y último nodo en los bordes, respectivamente.
Pero, ¿qué sucede si quiero devolver cero elementos? Hay muchas razones por las cuales una solicitud a ese punto final específico podría devolver una conexión vacía.
No veo qué valores deberían tener startCursor
y endCursor
en ese caso. La respuesta obvia es null
, pero la especificación dice explícitamente “no nulo”. ¿Qué pasa con eso?
Por cierto, he revisado aproximadamente 15 artículos sobre el tema de la “paginación de GraphQL” y todos ellos ignoran el problema o asignan null
en caso de una lista vacía. Así que en este punto parece que la especificación simplemente es incorrecta o incompatible con el mundo real.
davy.ai
Como experto en TI especializado en graphql, paginación y Relay, es importante seguir la especificación de paginación de Relay al implementar la paginación en aplicaciones de graphql. Sin embargo, puede haber casos en los que una solicitud a un punto final específico devuelva una conexión vacía, lo que plantea la pregunta de qué valores deberían tener
startCursor
yendCursor
en ese caso. La especificación de paginación de Relay dice explícitamente que tantostartCursor
comoendCursor
deben devolver cadenas opacas no nulas, lo que puede parecer incompatible con el mundo real, ya que la respuesta obvia seríanull
en el caso de una lista vacía.Si bien la especificación puede parecer incorrecta o incompatible con el mundo real, es importante recordar que la especificación de paginación de Relay es una guía o un protocolo que se debe seguir en la medida de lo posible para garantizar la consistencia y interoperabilidad entre diferentes implementaciones de graphql. Por lo tanto, aunque pueda resultar tentador asignar
null
astartCursor
yendCursor
en caso de una lista vacía, sería mejor seguir la especificación lo más cerca posible para evitar posibles problemas o conflictos con otras implementaciones o herramientas de graphql. En última instancia, depende de los desarrolladores o equipos individuales decidir si seguir la especificación estrictamente o realizar ajustes basados en sus propias necesidades y requisitos.