Apollo-link-rest: Permitir especificar "encabezados" por punto final

Creado en 5 feb. 2019  ·  11Comentarios  ·  Fuente: apollographql/apollo-link-rest


Creo que debería ser posible especificar encabezados exclusivos por punto final.

Por ejemplo: tengo la API REST de WordPress y la API REST de WooCommerce (v2 y v3) configuradas como mis diferentes puntos finales. Por lo tanto, debería ser posible proporcionar diferentes encabezados de autorización para cada punto final.

enhancement💡 feature help wanted 🛠

Comentario más útil

@paulpdaniels, este sería un ejemplo en el que estoy usando la API REST de WP con el encabezado de autorización como punto final predeterminado, y las API REST de WooCommerce v2 y v3 como puntos finales separados - v3 requiere autorización y v2 no:

import { camelCase, snakeCase } from 'lodash';
import { RestLink } from 'apollo-link-rest';

if (typeof window === 'undefined') {
  global.btoa = str => Buffer.from(str).toString('base64');
}

const restLink = new RestLink({
  uri: 'https://example.com/wp/v2',
  headers: {
    authorization: `Basic ${btoa('client_key:secret_key')}`,
  },
  endpoints: {
    'wc-v2': {
      uri: 'https://example.com/wp-json/wc/v2',
      headers: {
        authorization: undefined,
      },
    },
    'wc-v3': {
      uri: 'https://example.com/wp-json/wc/v3',
      headers: {
        authorization: `Basic ${btoa('another_client_key:secret')}`,
      },
    },
  },
  fieldNameNormalizer: camelCase,
  fieldNameDenormalizer: snakeCase,
});

Todos 11 comentarios

¡Buen punto! ¿Posiblemente deberíamos permitir que nuestra configuración de encabezados inicial sea un encabezado / hash o función para ejecutar cada vez? @efoken @paulpdaniels

Tiene sentido, tbh pensé que así es como funcionaba ahora, pero supongo que no me he ocupado de un problema de tener múltiples recursos con diferentes requisitos de encabezado.

@efoken ¿tienes un ejemplo de _cómo_ te gustaría usarlo? Solo para tener una idea de cómo sería un caso de uso típico.

@paulpdaniels, este sería un ejemplo en el que estoy usando la API REST de WP con el encabezado de autorización como punto final predeterminado, y las API REST de WooCommerce v2 y v3 como puntos finales separados - v3 requiere autorización y v2 no:

import { camelCase, snakeCase } from 'lodash';
import { RestLink } from 'apollo-link-rest';

if (typeof window === 'undefined') {
  global.btoa = str => Buffer.from(str).toString('base64');
}

const restLink = new RestLink({
  uri: 'https://example.com/wp/v2',
  headers: {
    authorization: `Basic ${btoa('client_key:secret_key')}`,
  },
  endpoints: {
    'wc-v2': {
      uri: 'https://example.com/wp-json/wc/v2',
      headers: {
        authorization: undefined,
      },
    },
    'wc-v3': {
      uri: 'https://example.com/wp-json/wc/v3',
      headers: {
        authorization: `Basic ${btoa('another_client_key:secret')}`,
      },
    },
  },
  fieldNameNormalizer: camelCase,
  fieldNameDenormalizer: snakeCase,
});

¿Alguna noticia sobre esto? Estoy en una situación en la que uso rest-link y tengo mi propio punto final que requiere autenticación y otro punto final de terceros que requiere una clave.

¿Hay ejemplos de cómo hacer esto ahora?

También tengo una situación en la que necesito un encabezado de autorización en algunos puntos finales pero no en otros. No puedo encontrar una manera de lograr esto.

¿Se ha trabajado en esto? Tengo una situación en la que un punto final necesita autenticación básica y otro necesita autenticación de portador

¿Alguien ha encontrado una solución a esto todavía?

¿Alguna solución para esto? También estoy en una situación en la que necesito personalizar los encabezados para diferentes puntos finales.

¿Ha habido alguna actualización sobre esto? Actualmente trabajando en un proyecto que requiere autenticación y encabezados diferentes para cada punto final. ¿Hay una solución para esto?

Puede proporcionar una implementación customFetch que analice la URL de destino e inserte / agregue encabezados basados ​​en un prefijo de URL, por lo que esto es factible hoy.

Por favor avise si esa solución no le funciona.

¿Fue útil esta página
0 / 5 - 0 calificaciones