Сигнатура мутации Apollo GraphQL, эквивалентная PUT

Я пытаюсь эффективно выполнить запрос PUT с помощью GraphQL

Мутация:

export const UPDATE_CAT = gql`
  mutation updateCat($catRef: RefInput, $payload: CatInput) {
    updateCat(ref: $catRef, input: $payload) {
      ${ref}
    }
  }
`;

Переменные запроса:

{
  "catRef": {
    "id": "7b342789-e527-42a6-997b-cfe2fb6bdb07",
    "typename": "cat.beacon.Beacon"
  },
  "payload":{
    "position": null,
  }
}

Хотя это, кажется, стирает все реквизиты на сущности cat (это не удаляет ресурс). Это правильный синтаксис для запроса типа PUT?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
0
140
1

Ответы 1

Прежде всего, я думаю, стоит отметить, что graphql не зависит от протокола. Это означает, что можно использовать любой транспортный протокол, не обязательно HTTP (несмотря на то, что HTTP используется в большинстве случаев).

Кроме того, что вы подразумеваете под запросом PUT like? Насколько я понимаю, вы заявляете, что метод HTTP PUT используется для исправления данных. Что может быть неправдой. Это зависит от того, как вы это реализуете. Вы можете легко создать REST API, который принимает данные с помощью GET и отправляет их с помощью метода POST или PUT, несмотря на то, что это не рекомендуется лучшими практиками.

Такая же ситуация и здесь с вашей проблемой. Дело не в сигнатуре вашей мутации, а в реализации преобразователя мутаций.

Чтобы это работало, вы должны определить в своей функции распознавателя на сервере, является ли это новым или существующим ресурсом, и правильно обработать оба сценария.

Как проверить, новый ли это ресурс? Id prop в этом случае будет не определен, верно?

Если вы работаете со сторонним API, проверьте его документацию.

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