RESTful API return 子实体

RESTful API return child entity

我正在设计一个网站 api,客户可以在其中检索有关课程的信息。 在我的模型中,实体课程有几个属性,包括 属性 讲师。讲师本身就是 class。

public class Course
{
    public int Id { get; set; }
    public string Title { get; set; }
    public double? Duration { get; set; }
    ...
    public Instructor Instructor { get; set; }
}

public class Instructor
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    ...
}

我的问题是,我应该 return 在调用课程控制器时将所有 instructors 属性设置为 null 还是根本不重新运行它? 或者还有其他选择吗?

我不知道在这种情况下最佳做法是什么。当子实体是一个集合时,我通常只是 return 一个空数组。但在这种情况下,只有 1 个,所以我不能 return 一个空数组。

最佳做法是序列化该子实体,仅当从该请求返回时客户端需要它。否则,您只是在传输不必要的数据。

要让应用程序决定是否对其进行序列化,(使用 Newtonsoft)您可以实现自定义数据协定解析器并在序列化您的实体时使用它:

public class CustomDataContractResolver : DefaultContractResolver
{
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        JsonProperty property = base.CreateProperty(member, memberSerialization);

        if ((property.DeclaringType == typeof(Course) ||
            property.DeclaringType.BaseType == typeof(Course)) &&
            property.PropertyName == "Instructor")
        {
            property.ShouldSerialize =
               instance =>
               {
                   return true; // or false
               };
        }

        return property;
    }
}