web-dev-qa-db-ja.com

graphqlフィールドを別の名前で公開する方法

私はGraphQLを探索していますが、応答フィールドの名前を変更する方法があるかどうかを知りたいです。たとえば、これらのフィールドにPOJOがあります

class POJO {
  Long id;
  String name;
}

GraphQLクエリ:

type POJO {
  id: Long
  name: String
}

私の応答はこのようなものです

{
  "POJO" {
    "id": 123,
    "name": "abc"
  }
}

私の応答が以下になるように、名前フィールドの名前をuserNameのようなものに変更できますか

{
  "POJO" {
    "id": 123,
    "userName": "abc"
  }
}
12
Amit Kumar

GraphQL Aliases を使用して、JSON応答の個々のキーを変更できます。

これが元のクエリの場合

query {
  POJO {
    id
    name
  }
}

次のように、フィールドuserNameにGraphQLエイリアスnameを導入できます。

query {
  POJO {
    id
    userName: name
  }
}

GraphQLエイリアスを使用して、同じGraphQL操作で 同じクエリまたは突然変異フィールドを複数回 を使用することもできます。これは、フィールドパラメータを使用する場合に特に興味深いものです。

query {
  first: POJO(first: 1) {
    id
    name
  }

  second: POJO(first: 1, skip: 1) {
    id
    name
  }
}
29
marktani

問題は、そもそもスキーマをどのように作成していますか? JavaとGraphQLタイプの間には本質的な接続はありません-それらを相関させない限り、それらは完全に無関係です。したがって、スキーマで任意の方法でフィールドに名前を付け、リゾルバを作成できます(DataFetcher)どこからでも値を取得します(したがって、任意のPOJOフィールドも)。

ツールを使用してJava types( graphql-Java-annotationsgraphql-spqr etc)からスキーマを生成する場合、前述のツールの両方を使用すると、注釈を使用してマッピングをカスタマイズできますGraphQL-SPQRは、外部設定でも同様にマッピングをカスタマイズできます。

質問をさらに明確にすると、より正確な回答を提供できます。

0
kaqqao

GraphQLNameアノテーションが役立つようです。

documentation の例:「さらに、@ GraphQLNameを使用してフィールド名をオーバーライドできます。@ GraphQLDescriptionを使用して説明を設定できます。」

これらは、フィールドパラメータにも使用できます。

public String field(@GraphQLName("val") String value) {
  return value;
}
0
Alex.Gri