Traditionelle RPC-basierte Webdienste betrachten das API-Design als eine Sammlung einzelner Methodenaufrufe, was zu Duplikaten und eingeschränkter Flexibilität führt. Im Gegensatz dazu plädiert ServiceStack für nachrichtenbasierte Designprinzipien, bei denen prägnante, generische und vielseitige Dienste im Vordergrund stehen.
Berücksichtigen Sie beim Entwerfen von ServiceStack-Anforderungs-DTOs Folgendes:
Lassen Sie uns als Beispiel das bereitgestellte Buchungslimit umgestalten Dienste:
[Route("/bookinglimits/{Id}")] public class GetBookingLimit : IReturn<BookingLimit> { public int Id { get; set; } } public class BookingLimit { // Properties (omitted for brevity) } [Route("/bookinglimits/search")] public class FindBookingLimits : IReturn<List<BookingLimit>> { public DateTime BookedAfter { get; set; } }
Zu den aus den Antworten entfernten Funktionen gehört ResponseStatus, da dieser mit dem generischen ErrorResponse-DTO verarbeitet werden kann. Darüber hinaus wurde die Date-Eigenschaft in GetBookingLimits durch eine spezifischere BookedAfter-Eigenschaft ersetzt.
Die Service-Implementierung sieht jetzt wie folgt aus:
[Authenticate] public class BookingLimitService : AppServiceBase { public BookingLimit Get(GetBookingLimit request) { ... } public List<BookingLimit> Get(FindBookingLimits request) { ... } }
Authentifizierung hat wurde als einzelnes Attribut auf den Dienst angewendet Klasse.
Die Validierung sollte mehrschichtig und nicht-invasiv sein, sodass sie einfach hinzuzufügen und zu warten ist. Der folgende Validator kann für CreateBooking verwendet werden:
public class CreateBookingValidator : AbstractValidator<CreateBooking> { public CreateBookingValidator() { // Validation rules } }
Denken Sie daran, dass die Wahl zwischen der Verwendung von C#-Ausnahmen oder Fluent Validation von den Nebenwirkungen des Vorgangs abhängt.
Durch die Übernahme eines nachrichtenbasierten Designansatzes Mit ServiceStack können Sie APIs erstellen, die prägnanter, wiederverwendbarer und flexibler sind.
Das obige ist der detaillierte Inhalt vonWie kann das nachrichtenbasierte Design von ServiceStack das Request-DTO-Design für Webdienste verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!