我们希望通过在accept头部使用内容协商来实现基于版本的API。
我们能够通过一些继承和扩展默认的HTTP选择器来实现控制器和API方法的版本管理。
以下是实现控制器继承的示例代码:
我们设计了上述架构来减少代码量对版本进行更改。例如,如果版本1有10个API方法,并且有一个API方法发生了更改,则该方法应在版本2中的代码中可用,而不需要修改其他9个方法(它们从版本1继承而来)。
现在,我们面临的主要问题是合同版本控制,因为我们不能实例化抽象学生的实例。当有人向API版本1发布JSON时,应在方法中传递StudentV1的实例,并在版本2中保持相同。
是否有任何方法可以实现这一点?
提前感谢!!
我们能够通过一些继承和扩展默认的HTTP选择器来实现控制器和API方法的版本管理。
以下是实现控制器继承的示例代码:
public abstract class AbstractBaseController : ApiController
{
// common methods for all api
}
public abstract class AbstractStudentController : AbstractBaseController
{
// common methods for Student related API'sample
public abstract Post(Student student);
public abstract Patch(Student student);
}
public class StudentV1Controller : AbstractStudentController
{
public override Post([FromBody]Student student) // student should be instance of StudentV1 from JSON
{
// To Do: Insert V1 Student
}
public override Patch([FromBody]Student student) // student should be instance of StudentV1 from JSON
{
// To Do: Patch V1 Student
}
}
public class StudentV2Controller : AbstractStudentController
{
//
public override Post([FromBody]Student student) // student should be instance of StudentV2 from JSON
{
// To Do: Insert V2 Student
}
}
public abstract class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class StudentV1 : Student
{
}
public class StudentV2 : Student
{
public string Email { get; set; }
}
我们设计了上述架构来减少代码量对版本进行更改。例如,如果版本1有10个API方法,并且有一个API方法发生了更改,则该方法应在版本2中的代码中可用,而不需要修改其他9个方法(它们从版本1继承而来)。
现在,我们面临的主要问题是合同版本控制,因为我们不能实例化抽象学生的实例。当有人向API版本1发布JSON时,应在方法中传递StudentV1的实例,并在版本2中保持相同。
是否有任何方法可以实现这一点?
提前感谢!!