ユーザーのIDを指定して、または電子メールアドレスなどの他の識別子を指定して、ユーザーをクエリできるようにしたいとします。
それを受け入れるためにルートQueryオブジェクトをどのように構築しますか?
これを考えると
_public class MyQuery : ObjectGraphType
{
public MyQuery(IUserService userService)
{
Name = "Query";
Field<UserType>(
"user",
arguments: new QueryArguments(
new QueryArgument<IntGraphType>() { Name = "id" },
new QueryArgument<StringGraphType>() { Name = "email" }
),
resolve: context =>
{
int? id = context.GetArgument<int>("id");
if (id != null)
{
return userService.GetUserById(id);
}
string email = context.GetArgument<string>("email");
if (email != null)
{
return userService.GetUserByEmail(email);
}
return null;
}
);
}
}
_
それは正しい方法ですか?クエリで引数が見つからない場合、context.GetArgument()
はnull
を返しますか?または、QueryArguments
に2つの引数を指定することは、クエリに両方の引数が必要であることを意味しますか?
_arguments: new QueryArguments(
new QueryArgument<IntGraphType>() { Name = "id" },
new QueryArgument<StringGraphType>() { Name = "email" }
)
_
これは、これらの引数がnull許容であることを意味し、オプションになります。
_arguments: new QueryArguments(
new QueryArgument<NonNullGraphType<IntGraphType>>() { Name = "id" },
new QueryArgument<NonNullGraphType<StringGraphType>>() { Name = "email" }
)
_
GraphType
をNonNullGraphType
でラップすると、値がnull以外である必要があるため、null以外の値を指定する必要があります。
デフォルトでは、引数が存在しない場合、_GetArgument<TType>
_はdefault(TType)
を返します。次のものも使用できます。
_context.GetArgument<string>("email", defaultValue: "my default value");
_