Неизвестный аргумент в правильном в противном случае запросе GraphQL с бэкэндом Absinthe - PullRequest
1 голос
/ 30 апреля 2019

Я выполняю запрос Absinthe с тремя полями аргументов, каждый из которых представляет собой список целых чисел.

@desc "Fetches resolutions of Taiga ids"
field :taiga_ids, :taiga_entities do
  arg :usIds, list_of(:integer)
  arg :taskIds, list_of(:integer)
  arg :issueIds, list_of(:integer)

  resolve &Resolvers.Bridges.fetch_taiga_ids/3
end

object :taiga_entities do
  field :uss, list_of(:taiga_us)
  field :tasks, list_of(:taiga_task)
  field :issues, list_of(:taiga_issue)
end

Я также использую Insomnia для отправки запросов и воспроизведения результатов.Насколько я знаю, все правильно написано, типы соблюдаются, а аргументы набираются правильно.

{
  taigaIds(usIds: [1914], taskIds: [], issueIds: [7489]) {
    uss {
      id
      ref
      subject
    }
    issues {
      id
      ref
      subject
    }
  } 
}

Но я получаю следующие ошибки, которые не имеют смысла.

{
  "errors": [
    {
      "message": "Unknown argument \"usIds\" on field \"taigaIds\" of type \"RootQueryType\".",
      "locations": [
        {
          "line": 2,
          "column": 0
        }
      ]
    },
    {
      "message": "Unknown argument \"taskIds\" on field \"taigaIds\" of type \"RootQueryType\".",
      "locations": [
        {
          "line": 2,
          "column": 0
        }
      ]
    },
    {
      "message": "Unknown argument \"issueIds\" on field \"taigaIds\" of type \"RootQueryType\".",
      "locations": [
        {
          "line": 2,
          "column": 0
        }
      ]
    }
  ]
}

Есть идеи, почему?

1 Ответ

1 голос
/ 30 апреля 2019

По соглашению имена объектов схемы, таких как поля и аргументы, пишутся camelCase, в то время как elixer использует snake_case.absinthe преобразует между этими двумя соглашениями об именах.В соответствии с docs :

Это определяет адаптер, который поддерживает документы запросов GraphQL в их обычной (в JS) нотации верблюдов, в то же время позволяя определять схему с использованием обычных (вElixir) знак подчеркивания (snakecase) и преобразование имен по мере необходимости для поиска, результатов и сообщений об ошибках

...

Примечание: переменные примечания относятся к клиенту (их можно предоставитьв качестве параметров), поэтому имена переменных должны соответствовать соглашению документа запроса (например, camelCase).

Другими словами, определите ваши аргументы следующим образом:

arg :task_ids, list_of(:integer)

иони будут преобразованы в camelCase для вас.

...