Les services Web traditionnels basés sur RPC approchent la conception d'API comme un ensemble de appels de méthode, conduisant à une duplication et à une flexibilité limitée. En revanche, ServiceStack préconise des principes de conception basés sur des messages qui mettent l'accent sur des services concis, génériques et polyvalents.
Lors de la conception des DTO de requête ServiceStack, tenez compte des éléments suivants :
À titre d'exemple, refactorisons la limite de réservation fournie services :
[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; } }
Les fonctionnalités supprimées des réponses incluent ResponseStatus, car elles peuvent être gérées à l'aide du DTO générique ErrorResponse. De plus, la propriété Date dans GetBookingLimits a été remplacée par une propriété BookedAfter plus spécifique.
L'implémentation du service ressemble désormais à ceci :
[Authenticate] public class BookingLimitService : AppServiceBase { public BookingLimit Get(GetBookingLimit request) { ... } public List<BookingLimit> Get(FindBookingLimits request) { ... } }
L'authentification a été appliqué en tant qu'attribut unique sur la classe de service.
La validation doit être superposé et non invasif, ce qui le rend facile à ajouter et à entretenir. Le validateur suivant peut être utilisé pour CreateBooking :
public class CreateBookingValidator : AbstractValidator<CreateBooking> { public CreateBookingValidator() { // Validation rules } }
N'oubliez pas que le choix entre l'utilisation des exceptions C# ou Fluent Validation dépend des effets secondaires de l'opération.
En adoptant une approche de conception basée sur les messages , ServiceStack vous permet de créer des API plus concises, réutilisables et flexibles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!