DevGang
Авторизоваться

Типы соединений GraphQL в Woovi

GraphQL - это популярный язык запросов для API, который предоставляет гибкий и эффективный способ извлечения данных с сервера. Одной из ключевых особенностей GraphQL является возможность определять типы объединения, которые позволяют возвращать несколько типов объектов из одного поля. В этом посте мы подробнее рассмотрим типы объединения в GraphQL и то, как реализовать их в JavaScript с помощью GraphQL.js библиотека. Мы рассмотрим основы типов объединения, включая их определение и использование, а также рассмотрим реальные сценарии, в которых они могут быть применены для упрощения и повышения производительности вашего API. Являетесь ли вы опытным разработчиком GraphQL или только начинаете, этот пост предоставит ценную информацию о мощи и универсальности типов объединения.

Типы объединния

Типы объединения очень похожи на интерфейсы, но они не позволяют указывать какие-либо общие поля между типами.

Смотрите официальный документ, чтобы узнать больше об этой концепции.

Типы обхединений в коде GraphQL в первую очередь

При кодировании с помощью graphql-кода сначала вы можете объявить свой тип объединения, как показано ниже.

Для следующего примера давайте иметь в виду следующий сценарий:

  • у нас есть поле массива, которое представляет собой массив способов оплаты
  • этот способ оплаты может быть CREDIT_CARD | DEBIT_CARD
  • при сохранении способа оплаты каждый из них будет иметь свои собственные поля с одним общим: method
  • метод будет содержать тип способа оплаты
  • method: 'CREDIT_CARD'

Union Type — подтипы

мы начинаем объявлять тип для каждого способа оплаты

export const PaymentMethodCreditCardType = new GraphQLObjectType({
  name: 'PaymentMethodCreditCard',
  fields: () => ({
    method: {
      type: new GraphQLNonNull(GraphQLString),
      resolve: (paymentMethodCreditCard) => paymentMethodCreditCard.method,
    },
  }),
});

export const PaymentMethodDebitCardType = new GraphQLObjectType({
  name: 'PaymentMethodDebitCard',
  fields: () => ({
    method: {
      type: new GraphQLNonNull(GraphQLString),
      resolve: (paymentMethodDebitCard) => paymentMethodDebitCard.method,
    },
  }),
});

Union Type - сам тип

затем мы объявляем тип объединения, который будет потреблять оба указанных выше типа:

export const PaymentMethodUnionType = new GraphQLUnionType({
  name: 'PaymentMethodUnion',
  description:
    'Represents a generic payment method type (credit card | debit card)',
  types: () => [PaymentMethodCreditCardType, PaymentMethodDebitCardType],
  resolveType: (data: Record<string, unknown> | Record<string, unknown>) => {
    if (data.method === 'CREDIT_CARD') {
      return PaymentMethodCreditCardType.name;
    }

    if (data.method === 'DEBIT_CARD') {
      return PaymentMethodDebitCardType.name;
    }

    return null;
  },
});

примечание:

  • resolveType получит значение, переданное от родителя
  • поскольку поле представляет собой массив, это будут элементы массива
  • мы сопоставляем их методом, ранее упомянутым выше
  • затем укажите правильный тип

Union Type - Разоблачение

Мы предоставляем paymentMethods как массив методов оплаты, использующих тип union.

paymentMethods: {
  type: new GraphQLList(PaymentMethodUnionType),
  resolve: (payment) => payment?.paymentMethods,
},

Union Type - Потребление его

Во фронтенде мы просто задаем его в graphql, например, в мутации, где устанавливаем для него выбранные способы оплаты и возвращаем заполненное поле:

const query = graphql`
  mutation PaymentMethodAddMutation(
    $input: PaymentMethodAddInput!
  ) {
    PaymentMethodAdd(input: $input) {
      error
      payment
      id
      paymentMethods {
        ... on PaymentMethodCreditCard {
          method
        }
        ... on PaymentMethodDebitCard {
          method
        }
      }
    }
  }
`;

Теперь у вас могут быть способы оплаты с определенными полями для каждого из них.

Woovi — это стартап, который позволяет покупателям платить по своему усмотрению. Чтобы сделать это возможным, Woovi предоставляет продавцам решения для мгновенных платежей, чтобы они могли принимать заказы.

#GraphQL
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу