Apollo-link-rest: μ—”λ“œ 포인트 λ‹Ή '헀더'지정 ν—ˆμš©

에 λ§Œλ“  2019λ…„ 02μ›” 05일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: apollographql/apollo-link-rest


μ—”λ“œ 포인트 λ‹Ή 독점 헀더λ₯Ό 지정할 수 μžˆμ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

예 : WordPress REST API와 WooCommerce REST API (v2 및 v3)λ₯Ό λ‹€λ₯Έ μ—”λ“œ 포인트둜 κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 각 μ—”λ“œ ν¬μΈνŠΈμ— λŒ€ν•΄ μ„œλ‘œ λ‹€λ₯Έ Authorization 헀더λ₯Ό 제곡 ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

enhancementπŸ’‘ feature help wanted πŸ› 

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@paulpdaniels 이것은 인증 ν—€λ”κ°€μžˆλŠ” WP REST APIλ₯Ό κΈ°λ³Έ μ—”λ“œ 포인트둜 μ‚¬μš©ν•˜κ³  WooCommerce REST API v2 및 v3을 λ³„λ„μ˜ μ—”λ“œ 포인트둜 μ‚¬μš©ν•˜λŠ” μ˜ˆμž…λ‹ˆλ‹€. v3μ—λŠ” 승인이 ν•„μš”ν•˜κ³  v2λŠ” λ‹€μŒμ„ μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

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,
});

λͺ¨λ“  11 λŒ“κΈ€

쒋은 지적! μ•„λ§ˆλ„ μš°λ¦¬λŠ” 초기 헀더 ꡬ성이 헀더 / ν•΄μ‹œ λ˜λŠ” ν•¨μˆ˜κ°€ 될 λ•Œλ§ˆλ‹€ μ‹€ν–‰λ˜λ„λ‘ν•΄μ•Όν•©λ‹ˆκΉŒ? νŠΈμœ— λ‹΄μ•„ κ°€κΈ°

말이 λΌμš”. μ§€κΈˆμ€ κ·Έλ ‡κ²Œ μž‘λ™ν•œλ‹€κ³  μƒκ°ν–ˆμ§€λ§Œ 헀더 μš”κ΅¬ 사항이 λ‹€λ₯Έ μ—¬λŸ¬ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 문제λ₯Ό 닀루지 μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€.

@efoken 당신은 그것을 μ‚¬μš©ν•˜κ³  싢은 _how_의 μ˜ˆκ°€ μžˆμŠ΅λ‹ˆκΉŒ? 일반적인 μ‚¬μš© 사둀가 μ–΄λ–»κ²Œ λ³΄μ΄λŠ”μ§€ μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€.

@paulpdaniels 이것은 인증 ν—€λ”κ°€μžˆλŠ” WP REST APIλ₯Ό κΈ°λ³Έ μ—”λ“œ 포인트둜 μ‚¬μš©ν•˜κ³  WooCommerce REST API v2 및 v3을 λ³„λ„μ˜ μ—”λ“œ 포인트둜 μ‚¬μš©ν•˜λŠ” μ˜ˆμž…λ‹ˆλ‹€. v3μ—λŠ” 승인이 ν•„μš”ν•˜κ³  v2λŠ” λ‹€μŒμ„ μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

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,
});

이것에 λŒ€ν•œ μ†Œμ‹μ΄ μžˆμŠ΅λ‹ˆκΉŒ? μ €λŠ” rest-linkλ₯Ό μ‚¬μš©ν•˜κ³  인증이 ν•„μš”ν•œ 자체 μ—”λ“œ ν¬μΈνŠΈμ™€ ν‚€κ°€ ν•„μš”ν•œ λ‹€λ₯Έ 타사 μ—”λ“œ ν¬μΈνŠΈκ°€μžˆλŠ” 상황에 μžˆμŠ΅λ‹ˆλ‹€.

μ§€κΈˆμ΄ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법에 λŒ€ν•œ μ˜ˆκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

λ˜ν•œ 일뢀 μ—”λ“œ ν¬μΈνŠΈμ—λŠ” 인증 헀더가 ν•„μš”ν•˜μ§€λ§Œ λ‹€λ₯Έ μ—”λ“œ ν¬μΈνŠΈμ—λŠ” ν•„μš”ν•˜μ§€ μ•Šμ€ 상황이 μžˆμŠ΅λ‹ˆλ‹€. 이 μž‘μ—…μ„ μˆ˜ν–‰ ν•  방법을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

이것에 λŒ€ν•œ μž‘μ—…μ΄ μˆ˜ν–‰ λ˜μ—ˆμŠ΅λ‹ˆκΉŒ? ν•œ λμ μ—λŠ” κΈ°λ³Έ 인증이 ν•„μš”ν•˜κ³  λ‹€λ₯Έ λμ μ—λŠ” μ „λ‹¬μž 인증이 ν•„μš”ν•œ 상황이 μžˆμŠ΅λ‹ˆλ‹€.

아무도 이것에 λŒ€ν•œ 해결책을 아직 μ°Ύμ•˜μŠ΅λ‹ˆκΉŒ?

이에 λŒ€ν•œ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ? λ˜ν•œ λ‹€λ₯Έ μ—”λ“œ ν¬μΈνŠΈμ— λŒ€ν•΄ 헀더λ₯Ό μ‚¬μš©μž μ •μ˜ν•΄μ•Όν•˜λŠ” 상황에 μžˆμŠ΅λ‹ˆλ‹€.

이것에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ? ν˜„μž¬ 각 μ—”λ“œ ν¬μΈνŠΈμ— λŒ€ν•΄ μ„œλ‘œ λ‹€λ₯Έ 인증 및 헀더가 ν•„μš”ν•œ ν”„λ‘œμ νŠΈμ—μ„œ μž‘μ—… μ€‘μž…λ‹ˆλ‹€. 이에 λŒ€ν•œ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

λŒ€μƒ URL을 λΆ„μ„ν•˜κ³  URL 접두사λ₯Ό 기반으둜 헀더λ₯Ό μ‚½μž… / μΆ”κ°€ν•˜λŠ” customFetch κ΅¬ν˜„μ„ 제곡 ν•  수 μžˆμœΌλ―€λ‘œ ν˜„μž¬ κ°€λŠ₯ν•©λ‹ˆλ‹€.

ν•΄λ‹Ή ν•΄κ²° 방법이 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 경우 μ•Œλ €μ£Όμ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰