Соглашение об именовании на основе курсора в GraphQL - PullRequest
0 голосов
/ 03 августа 2020

В GraphQL API я часто вижу соглашения об именах, такие как NQ и MQ, как параметры, используемые в курсоре. Это пример, показанный ниже,

 "data": {
    "items": {
      "totalCount": 351,
      "pageInfo": {
        "hasNextPage": true,
        "hasPreviousPage": false,
        "endCursor": "Mw",
        "startCursor": "MQ"
      },
      "edges": [
        {
          "cursor": "MQ",
          "node": {
            "id": "UGxhY2UtMzUy",
            "displayName": "Redbeard"
          }
        },
        {
          "cursor": "Mg",
          "node": {
            "id": "UGxhY2UtMzUx",
            "displayName": "Frey of Riverrun"
          }
        },
        {
          "cursor": "Mw",
          "node": {
            "id": "QmlsbGVyLTI=",
            "displayName": "Something Else"
          }
        }
      ]
    }
  }
}

Источник: https://dev.to/tymate/first-dive-into-graphql-ruby-nak

Другие примеры включают этот пример рельсов: https://www.2n.pl/blog/graphql-pagination-in-rails

Что это за соглашения об именах и как вы, например, разбиваете на страницы?

1 Ответ

0 голосов
/ 03 августа 2020

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

Раздел о соединениях дает больше информация о том, как работают курсоры:

Каждое ребро получает значение курсора. Это значение - то, что они называют - непрозрачное значение, то есть оно не должно интерпретироваться сервером. Это ссылка / указатель, только сервер может интерпретировать . Итак, если у вас есть запрос, который получает набор значений:

edges: [
  { cursor: "abc", node: {...} },
  { cursor: "def", node: {...} },
  { cursor: "ghi", node: {...} },
  { cursor: "jkl", node: {...} },
  { cursor: "mno", node: {...} }
]

, вы можете запросить следующую страницу, посмотрев на курсор последнего элемента mno и передав его в запрос.

query {
  manyQuery(first: 5, after: "mno") {
    edges {
      cursor
      node {...}
    }
  }
}

Это даст вам следующие 5 узлов. См. Также этот раздел на graphql.org. .

Итак, чтобы ответить на ваш вопрос: строка потенциально может содержать все, что сервер может использовать для ссылки на один из ваших узлов. Например, идентификатор в базе данных. Чтобы устранить соблазн передать произвольное значение от пользователя API, эта строка часто кодируется в формате base64. Значение должно быть бессмысленным для клиента и использоваться только для передачи обратно на сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...