我使用Graphql .Net库构建GraphQl API。 以下是我们当前所拥有的域的示例,其中该区域具有采样点标识符的列表:
public class AreaRoot {
public String Id { get; set; }
public List<String > SamplingPointIds { get; set; }
}
public class SamplingPointRoot {
public String Id { get; set; }
public String Description { get; set; }
}
类型定义如下:
public class AreaType : ObjectGraphType<AreaRoot>
{
public AreaType()
{
Name = "Area";
Field(x => x.Id, type: typeof(IdGraphType));
Field(x => x.SamplingPointIds, type: typeof(ListGraphType<StringGraphType>));
}
}
public class SamplingPointType : ObjectGraphType<SamplingPointRoot>
{
public SamplingPointType()
{
Name = "SamplingPoint";
Field(x => x.Id, type: typeof(IdGraphType));
Field(x => x.description, type: typeof(StringGraphType));
}
}
是否可以在不更改域类的情况下从采样点检索所有内容?在会议GraphQL vs Traditional Rest API中,有一个例子是在25:41分钟,但这个例子是在Java中编写的,因此我们无法使用graphQl .net进行相同的操作。
下一个示例说明了我们要进行的查询的类型:
query GetAreas(){
areas(){
Id
samplingPoints{
Id
description
}
}
}
问题是:如上视频所示,当我们传递采样点并对其进行解析,并检索该区域的采样点时(在某些查询中),有没有办法解决这个问题?
答案 0 :(得分:0)
问题在github上解决了。对于那些尝试执行此操作的人,实际上确实很容易,我们只需要在AreaType内部安装解析器,如下所示:
public class AreaType : ObjectGraphType<AreaRoot>
{
public AreaType(IRepository repository)
{
Name = "Area";
Field(x => x.Id, type: typeof(IdGraphType));
Field<ListGraphType<SamplingPointType>>("areaSamplingPoints",
resolve: context =>
{
return repository.GetAllByAreaId(context.Source?.Id);
});
}
}
请注意context.Source?.Id
用于访问区域ID ...
而且,如果您尝试访问顶级上下文的参数,那么,您不能按照here所述进行操作,而是可以访问传递给查询的变量,而不是访问最好,但不是最坏的,因此请使用:context.Variables.ValueFor("variableName")