Si comparamos eso con GraphQL, GraphQL es principalmente un lenguaje de consulta diseñado para trabajar con APIs. Entonces tenemos un sistema de tipos que describe exactamente los data que están disponibles para el cliente, cómo están conectados. Este es el grafo de data. Y luego, para describir los recorridos a través del grafo de data, definimos un conjunto de selección en GraphQL.
Veamos algunos ejemplos. Digamos que quiero ver todos los artículos en el grafo de noticias. En Cypher, escribo un patrón similar a un arte ASCII, los paréntesis representan nodos, en este caso, encuentro todos los nodos de artículo y los devuelvo. Con GraphQL, en mi conjunto de selección, comienzo con el campo de consulta de artículo y luego describo los campos de los artículos que quiero devolver.
¿Qué pasa si quiero ver los diez artículos más recientes? Bueno, Cypher tiene la funcionalidad para ordenar, limitar, omitir, para la paginación básica. Esto no está incorporado en GraphQL, pero podemos trabajar con estos elementos como argumentos de campo. Entonces, tal vez nuestro campo de consulta de artículos tenga un argumento de orden de clasificación y un argumento de límite que nos permite lograr lo mismo.
¿Qué pasa si quiero ver los diez artículos más recientes y sus temas? Bueno, en Cypher, agrego un patrón de grafo más complejo. Entonces puedes ver aquí que primero estamos haciendo coincidir todos los artículos y devolviendo el primero por fecha de publicación. Luego tenemos otro patrón de grafo donde estamos recorriendo desde este nodo de artículo a lo largo de esta relación tiene tema a los nodos de tema y devolviendo ambos. Y ahora vemos los diez artículos más recientes y sus temas relacionados. En GraphQL, simplemente agregaríamos a nuestro conjunto de selección para describir este recorrido ahora desde los artículos hasta los temas. Así que estamos comenzando a crear un conjunto de selección anidado aquí.
¿Qué pasa si también quiero, no solo los diez artículos más recientes, sus temas, sino también qué otros artículos hay en esos temas? Bueno, en Cypher simplemente agrego a mi patrón de grafo. Entonces ahora quiero recorrer a lo largo de esta relación tiene tema nuevamente para encontrar artículos que comparten temas similares. Y en GraphQL, agrego a mi conjunto de selección anidado ahora yendo desde los temas hasta los artículos y en este caso, devolviendo el título de esos artículos.
Pero ¿qué pasa si quiero algo como encontrar la ruta más corta en el grafo entre dos nodos, en este caso, el Servicio de Parques Nacionales y la FAA? Bueno, Cypher tiene funcionalidad de ruta más corta y funcionalidad de ruta de longitud variable incorporada en Cypher, por lo que puedo decir, encontrar la ruta más corta que conecta estas dos organizaciones. En este caso, siguiendo cualquier relación. Eso es lo que significa este asterisco entre corchetes, está diciendo seguir cualquier número de relaciones para encontrar la ruta más corta. Y puedo encontrarla a través de un par de artículos sobre escasez de mano de obra que ambas organizaciones están enfrentando. Esta funcionalidad no está realmente incorporada en GraphQL, por lo que GraphQL no tiene una forma nativa de expresar esta idea de una ruta más corta, aunque ciertamente podríamos implementar esta funcionalidad y exponerla a través de ciertos campos en GraphQL. Pero no es algo incorporado.
¿Qué pasa con los artículos recomendados? Muchos sitios de noticias, mientras leo un artículo, me muestran algo como, aquí hay otros artículos que podrían interesarme. Este tipo de cosas. Bueno, en Cypher, hay muchas formas de expresar ese tipo de cosas. Podría ver otros artículos que están viendo usuarios similares.
Comments