graphql-request vs urql vs apollo-client vs react-apollo
Librerías de gestión de datos GraphQL
graphql-requesturqlapollo-clientreact-apolloPaquetes similares:

Librerías de gestión de datos GraphQL

Las librerías de gestión de datos GraphQL son herramientas que facilitan la interacción con APIs GraphQL, permitiendo a los desarrolladores realizar consultas y mutaciones de manera eficiente. Estas librerías manejan la comunicación entre el cliente y el servidor, optimizando la forma en que se obtienen y gestionan los datos en aplicaciones web. Cada una de estas librerías tiene sus propias características y enfoques, lo que las hace adecuadas para diferentes tipos de proyectos y necesidades.

Tendencia de descargas de npm

3 Años

Ranking de GitHub Stars

Detalle de estadísticas

Paquete
Descargas
Stars
Tamaño
Issues
Publicación
Licencia
graphql-request13,112,8486,121420 kB60hace un añoMIT
urql1,518,1508,985140 kB33hace 2 mesesMIT
apollo-client583,95619,781-410hace 6 añosMIT
react-apollo167,0586,790-205hace 7 añosMIT

Comparación de características: graphql-request vs urql vs apollo-client vs react-apollo

Integración con React

  • graphql-request:

    GraphQL Request no tiene una integración específica con React, pero se puede utilizar fácilmente dentro de componentes React para realizar consultas. Su simplicidad permite a los desarrolladores implementarlo rápidamente sin necesidad de configuraciones complejas.

  • urql:

    Urql ofrece un enfoque flexible para la integración con React, permitiendo a los desarrolladores utilizar hooks personalizados y componentes de alto orden. Su arquitectura modular permite una personalización fácil y un manejo eficiente de las consultas.

  • apollo-client:

    Apollo Client se integra perfectamente con React a través de React Apollo, ofreciendo hooks y componentes de alto nivel que facilitan la gestión de datos en aplicaciones React. Permite un enfoque declarativo para manejar el estado y las consultas, lo que mejora la legibilidad del código.

  • react-apollo:

    React Apollo está diseñado específicamente para React, proporcionando hooks como useQuery y useMutation que simplifican la gestión de datos en componentes funcionales. Esto permite a los desarrolladores manejar el estado de la UI de manera eficiente y reactiva.

Gestión de Caché

  • graphql-request:

    GraphQL Request no incluye un sistema de caché por defecto, lo que significa que cada consulta se realiza directamente al servidor. Esto puede ser adecuado para aplicaciones simples, pero no es ideal para proyectos que requieren optimización de rendimiento.

  • urql:

    Urql ofrece un sistema de caché que es configurable y personalizable, permitiendo a los desarrolladores definir cómo se almacenan y gestionan los datos. Esto proporciona flexibilidad en la optimización del rendimiento de la aplicación.

  • apollo-client:

    Apollo Client cuenta con un sistema de caché avanzado que permite almacenar y gestionar datos de manera eficiente. Esto reduce la cantidad de solicitudes al servidor y mejora el rendimiento de la aplicación al reutilizar datos ya obtenidos.

  • react-apollo:

    React Apollo utiliza el sistema de caché de Apollo Client, lo que permite a los desarrolladores beneficiarse de una gestión de datos eficiente y optimizada. Esto facilita la sincronización de datos entre el cliente y el servidor, mejorando la experiencia del usuario.

Tamaño y Complejidad

  • graphql-request:

    GraphQL Request es una librería muy ligera y fácil de usar, ideal para proyectos pequeños o cuando se necesita una solución rápida sin la sobrecarga de características adicionales.

  • urql:

    Urql es una librería ligera que se centra en la simplicidad y la flexibilidad. Su diseño modular permite a los desarrolladores incluir solo las características que necesitan, manteniendo la aplicación ligera y fácil de mantener.

  • apollo-client:

    Apollo Client es una librería más pesada y compleja debido a su amplia gama de características y funcionalidades. Esto puede ser un inconveniente para proyectos pequeños que no requieren todas sus capacidades.

  • react-apollo:

    React Apollo, al estar basado en Apollo Client, hereda su complejidad, pero ofrece herramientas que facilitan su uso en aplicaciones React. Esto puede ser un desafío para desarrolladores nuevos en el ecosistema.

Soporte y Comunidad

  • graphql-request:

    GraphQL Request tiene una comunidad más pequeña, pero su simplicidad lo hace fácil de aprender. La documentación es clara, aunque puede que no haya tantos recursos como en otras librerías más grandes.

  • urql:

    Urql tiene una comunidad en crecimiento y una buena documentación, pero puede que no tenga el mismo nivel de soporte que Apollo Client. Sin embargo, su enfoque modular atrae a muchos desarrolladores que buscan flexibilidad.

  • apollo-client:

    Apollo Client tiene una gran comunidad y un sólido soporte, con una amplia documentación y recursos disponibles. Esto facilita la resolución de problemas y el aprendizaje de nuevas características.

  • react-apollo:

    React Apollo se beneficia del soporte de la comunidad de Apollo Client, lo que significa que hay muchos recursos y ejemplos disponibles para ayudar a los desarrolladores a integrarlo en sus aplicaciones.

Curva de Aprendizaje

  • graphql-request:

    GraphQL Request tiene una curva de aprendizaje muy baja, lo que permite a los desarrolladores comenzar rápidamente con consultas GraphQL sin complicaciones.

  • urql:

    Urql tiene una curva de aprendizaje moderada, ofreciendo una buena documentación y ejemplos que facilitan su adopción. Su flexibilidad permite a los desarrolladores adaptarse a diferentes estilos de programación.

  • apollo-client:

    Apollo Client puede tener una curva de aprendizaje más pronunciada debido a su complejidad y la cantidad de características que ofrece. Los desarrolladores nuevos pueden necesitar más tiempo para familiarizarse con su funcionamiento.

  • react-apollo:

    React Apollo puede ser más fácil de aprender para aquellos que ya están familiarizados con React, ya que se integra de manera natural en el flujo de trabajo de React. Sin embargo, la complejidad de Apollo Client puede ser un obstáculo.

Cómo elegir: graphql-request vs urql vs apollo-client vs react-apollo

  • graphql-request:

    Opta por GraphQL Request si buscas una librería ligera y sencilla para realizar consultas GraphQL sin complicaciones. Es perfecta para proyectos pequeños o cuando se necesita una integración rápida y directa con una API GraphQL.

  • urql:

    Elige Urql si prefieres una librería flexible y ligera que se pueda adaptar fácilmente a tus necesidades. Es ideal para aplicaciones que requieren un enfoque modular y personalizable en la gestión de datos.

  • apollo-client:

    Elige Apollo Client si necesitas una solución completa y robusta para manejar el estado local y remoto en aplicaciones complejas. Es ideal para proyectos grandes que requieren un manejo avanzado de caché y optimización de consultas.

  • react-apollo:

    Selecciona React Apollo si estás desarrollando aplicaciones React y deseas una integración profunda con el ecosistema de React. Proporciona herramientas específicas para manejar el estado y las consultas de manera declarativa dentro de componentes React.

README para graphql-request

graphql-request

Minimal GraphQL client supporting Node and browsers for scripts or simple apps.

GitHub Action npm version

Highlights

  • Most simple & lightweight GraphQL client
  • Promise-based API (works with async / await)
  • Pure ESM package
  • First class TypeScript support
    • Including TypedDocumentNode
  • Isomorphic (works in both Node and Browsers)

Install

npm add graphql-request graphql

TypeScript Setup

This package uses package.exports. Therefore if you are a TypeScript user you must:

  1. have your tsconfig.json moduleResolution set to "bundler" or "node16"/"nodenext".
  2. Have your package.json type set to "module".

Quick Start

Send a GraphQL document using a static request function:

import { gql, request } from 'graphql-request'

const document = gql`
  {
    company {
      ceo
    }
  }
`
await request('https://api.spacex.land/graphql/', document)

The function can be passed a configuration object for more complex cases:

await request({
  url,
  document,
  variables,
  requestHeaders,
})

A class is available for constructing your own instances:

import { gql, GraphQLClient } from 'graphql-request'

const document = gql`
  {
    company {
      ceo
    }
  }
`
const endpoint = 'https://api.spacex.land/graphql/'
const client = new GraphQLClient(endpoint)
await client.request(document)

Examples

Node Version Support

We only (officially) support versions of Nodejs of the following status:

  • Current
  • LTS
  • Maintenance and end of life not yet reached

So for example on Oct 24 2023 that would mean these versions: 18, 20, 21.

Any issue that exists solely for an unsupported version of Nodejs will be rejected (not worked on).

Reference

⚠️ This reference is incomplete. Check out the examples for more reference material.

Configuration

ErrorPolicy

By default GraphQLClient will throw when an error is received. However, sometimes you still want to resolve the (partial) data you received. You can define errorPolicy in the GraphQLClient constructor.

const client = new GraphQLClient(endpoint, { errorPolicy: 'all' })
None (default)

Allow no errors at all. If you receive a GraphQL error the client will throw.

Ignore

Ignore incoming errors and resolve like no errors occurred

All

Return both the errors and data, only works with rawRequest.

IgnoreOperationName

OperationName has been introduced to address issues reported here Support operation name, However, on certain occasions this information may not be needed in requests. In such cases, you might consider ignoring operationName to avoid the extraction steps currently performed by a parsing operation when the document is provided in string format.

By default the GraphQLClient tries to extract the operationName from the document. You can define excludeOperationName in the constructor of GraphQLClient to avoid the extraction process if it is not needed. This can be useful if you don't use operationName and want to optimise queries by reducing the amount of computation as much as possible, especially if we are in a context where we are using documents in string format to reduce bundle size.

// example where the operation name is not ignored
const client = new GraphQLClient(endpoint, {
  method: 'POST',
})
// example in which the operation name is ignored
const client = new GraphQLClient(endpoint, {
  method: 'POST',
  excludeOperationName: true,
})

Knowledge Base

Why was the file upload feature taken away? Will it return?

In this issue we decided to make this library more stable and maintainable. In principal the feature is still in scope of this library and will make a return when we find time to do the feature right.

Why do I have to install graphql?

graphql-request uses methods exposed by the graphql package to handle some internal logic. On top of that, for TypeScript users, some types are used from the graphql package to provide better typings.

Do I need to wrap my GraphQL documents inside the gql template exported by graphql-request?

No. It is there for convenience so that you can get the tooling support like automatic formatting and syntax highlighting. You can use gql from graphql-tag if you need it for some reason too.

What sets graphql-request apart from other clients like Apollo, Relay, etc.?

graphql-request is the most minimal and simplest to use GraphQL client. It's perfect for small scripts or simple apps.

Compared to GraphQL clients like Apollo or Relay, graphql-request doesn't have a built-in cache and has no integrations for frontend frameworks. The goal is to keep the package and API as minimal as possible.

Project Stats

Package Installs

NPM Usage Trend of graphql-request

Repo Beats

Alt