Wir möchten versionbasierte API mit Inhaltsverhandlung in akzeptieren Header erreichen.ASP.NET-Web-API-Vertrag Versionierung
Wir sind in der Lage, für Controller & API-Methoden mit einigen Vererbung und Erweiterung der Standard-HTTP-Selektor zu erreichen.
Controller-Vererbung folgenden Beispielcode erreicht Verwendung
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; }
}
Wir über Architektur geschaffen haben weniger Code mit einer Änderung in einer API in der Version, sagen, wenn Version 1 verfügt über 10 API-Methoden und gibt es eine Änderung zu tun Methode als es in Version 2 Code verfügbar sein sollte, ohne andere 9 zu ändern (sie werden von Version 1 geerbt).
Jetzt liegt das Hauptproblem in der Vertragsversionierung, da wir keine Instanz eines abstrakten Studenten instantiieren können. Wenn jemand JSON in API Version 1 veröffentlicht, sollte die Instanz von StudentV1 in Methoden und dieselbe in Version 2 übergeben werden.
Gibt es eine Möglichkeit, dies zu erreichen?
Vielen Dank im Voraus!
sieht wie folgt aus: http://stackoverflow.com/questions/21306305/binding-abstract-action-parameters-in-webapi –
Dank @DanielStackenland !! Wir haben kein allgemeines Feld wie productType, um den geposteten JSON zu identifizieren. Wir werden auch etwa 50 - 70 solcher Klassen wie Studenten in API haben, die später bei Bedarf versioniert werden. –
Was ist der Zweck von AbstractStudentController überhaupt? Warum lässt du nicht einfach den StudentV1Controller (und V2) den AbstractBaseController erben und StudentV1 (und V2) als Parameter verwenden? –