Необходим ли тип идентификатора graphql, если я установил уникальный идентификатор с помощью dataIdFromObject в Apollo Client

Я использую graphql + mysql + react-apollo, и вот один из типов graphql для таблицы User:

type User {
  id: ID!
  name: String!
}

Моя проблема с ID scalar type в graphql заключается в том, что он возвращается в виде строки, когда первичными ключами являются int в mysql, и это создает некоторые конфликты типов во внешнем интерфейсе с машинописным текстом.

Могу я просто вообще не использовать скалярный тип ID, учитывая, что я уже установил уникальный идентификатор с dataIdFromObject для каждого объекта в Apollo Client:

import {InMemoryCache} from 'apollo-cache-inmemory';

const apolloMemoryCache = new InMemoryCache(
    {
        dataIdFromObject: ({id,__typename}) => {

          return __typename+id

        }
    }
);

const client = new ApolloClient({
   link: ApolloLink.from([authLink, httpLink]),
   cache: apolloMemoryCache,
 });

Вы бы сохранили тип удостоверения личности или просто отказались от него?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
13
0
2 706
3

Ответы 3

попробуйте это вместо type User { id: Int! name: String! }

Да, я об этом думаю. Есть ли пользователи mysql + graphql + apollo, которые вообще не определяют первичные ключи как скалярный тип идентификатора?

RedGiant 25.04.2018 19:07

Вы должны определить собственный скаляр для своего преобразователя.

В свой преобразователь вы должны добавить один для ID, где вы ожидаете int, или вы можете выполнить преобразование между int и string в своем преобразователе.

import { GraphQLScalarType } from 'graphql';

const resolverMap = {
  ID: new GraphQLScalarType({
    name: 'ID',
    description: 'Numeric custom scalar type',
    parseValue(value) {
      let result;
      // Implement your own behavior here by setting the 'result' variable
      return result;
    },
    serialize(value) {
      let result;
      // Implement your own behavior here by setting the 'result' variable
      return result;
    },
    parseLiteral(ast) {
      switch (ast.kind) {
      // Implement your own behavior here by returning what suits your needs
      // depending on ast.kind
      }
    }
  }),
};

https://github.com/apollographql/graphql-tools/blob/master/docs/source/scalars.md#custom-graphqlscalartype-instance

Ты спросил

would you keep the ID type or just ditch it

Обычно я рекомендую сохранить тип идентификатора и НЕ показывать клиенту целое число, которое вы используете. Если это новый набор данных, вам, вероятно, даже будет лучше использовать uuids в качестве PK от смещения. Это будет «безопаснее» и «надежнее», так как у вас меньше шансов случайно дать кому-то доступ к чужим материалам.

В любом случае, я бы рекомендовал сделать идентификаторы «непрозрачными» в соответствии со спецификацией Relay, чтобы у вас была возможность изменить их позже, если вы измените свое хранилище данных, не затрагивая ваших клиентов. Приложения часто проводят собственную проверку типов, поэтому вы должны быть уверены, что ваши вещи никогда не изменятся в этом отношении, когда это возможно.

Я не рассматривал uuids, и, возможно, уже слишком поздно, чтобы первичные ключи не были открыты для публики. Большинство идентификаторов предназначены только для данных о продуктах, сообщений на форумах и т. д. Ничего конфиденциального.

RedGiant 21.08.2018 08:47

В чем проблема безопасности ПК?

Full Of Stack 14.03.2021 16:29

Другие вопросы по теме