Идентифицируются ли идентификаторы автоматически в запросах Graphql? - PullRequest
0 голосов
/ 17 июня 2019

В моей базе данных (postgres) я храню таблицу событий, и каждое событие имеет столбец "id", который имеет тип UUID. Но когда я отправляю запрос GraphQL, полученный идентификатор не является строковым UUID, а выглядит как зашифрованная версия.

Я использую реле и графен на стороне сервера, если эта информация помогает.

query {
  allEvents {
    edges {
      node {
        id
      }
    }
  }
}


{
  "data": {
    "allEvents": {
      "edges": [
        {
          "node": {
            "id": "RXZlbnQ6NzRkZTIxZmUtZWQyNy00OTg1LTk2NjEtNmU4ZDUzMGEwMjQ3"
          }
        }
      ]
    }
  }
}

1 Ответ

1 голос
/ 17 июня 2019

Частым выбором реализации является кодирование base64 идентификаторов и значений курсора (показанный вами запрос следует Соглашения о разбиении на страницы ретрансляции ). Если вы base64-декодируете строку, введенную в вопросе, вы снова найдете UUID.

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

В последнем абзаце документации по Схема идентификации объекта ретранслятора (запрос верхнего уровня node) также существует твердое мнение о том, что приложениям не следует синтезировать значения ID, поэтому Кодировка base64 как минимум намекает потребителям, что значение не должно быть понято. Кодировка base64 здесь не является чем-то общим или жестко закодированным в GraphQL, и приложение или библиотека могут выбрать другую схему ID, если захотят.

...