0

このミューテーションタイプのサーバー側スキーマがあります

type Mutation {
  updateSettings(settings: SettingsInput): Settings
}
input SettingsInput {
  repositories: [RepositoryInput]
}
input RepositoryInput {
  id: String
  name: String
  url: String
}

Altair などのクライアントを使用している場合は、次のクエリを使用して、必要に応じてこれを変更できます。

mutation{
  updateSettings(settings: {
    repositories: [
      {
         name: "name1"
         url: "url1"
      },
      {
         name: "name2"
         url: "url2"
      }
    ]
  }){
    repositories {
      id
      name
      url
    }
  }
}

ただし、Apollo を使用しているときに動作させるのに苦労しています

私が得ることができる最高のものはこれです

import { SubscriptionClient } from "subscriptions-transport-ws";
import { gql } from "apollo-boost";
import { WebSocketLink } from "apollo-link-ws";

const wsClient = new SubscriptionClient("ws://localhost:5001/graphql", {
  reconnect: true
});
const client = new WebSocketLink(wsClient);
const UPDATE_SETTINGS = gql`
  mutation UpdateSettings($settings: SettingsInput) {
    updateSettings(settings: $settings) {
      repositories {
        id
        name
        url
      }
    }
  }
`;
client
      .request({
        query: UPDATE_SETTINGS,
        variables: { repository: [{name: "name1", url:"url1"},
                                  {name: "name2", url:"url2"}]}
      })

私は明らかに何かが欠けています。クライアントはサーバーを認識していないようですが、SettingsInput複雑なオブジェクトまたは配列を変数として受け取るクライアントのクエリを作成する方法がわかりません。

私はこれをまったく奇妙な方法で行っていますか、それとも「複雑な」突然変異をアポロクライアントからサーバーに送信するにはどうすればよいですか?

4

1 に答える 1