傳統的基於RPC 的Web 服務將API 設計作為單一集合的集合方法調用,導致重複和有限的靈活性。相較之下,ServiceStack 提倡基於訊息的設計原則,強調簡潔、通用和多功能的服務。
設計ServiceStack 請求DTO 時,請考慮以下事項:
作為範例,讓我們重構提供的預訂限額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; } }
從回應中刪除的功能包括ResponseStatus ,因為它可以使用通用ErrorResponse DTO 進行處理。此外,GetBookingLimits 中的 Date 屬性已取代為更具體的 BookedAfter 屬性。
服務實作現在如下所示:
[Authenticate] public class BookingLimitService : AppServiceBase { public BookingLimit Get(GetBookingLimit request) { ... } public List<BookingLimit> Get(FindBookingLimits request) { ... } }
驗證已作為服務類別上的單一屬性套用。
驗證應該分層且非侵入性,易於添加和維護。以下驗證器可用於 CreateBooking:
public class CreateBookingValidator : AbstractValidator<CreateBooking> { public CreateBookingValidator() { // Validation rules } }
請記住,使用 C# 異常或 Fluent Validation 之間的選擇取決於操作的副作用。
透過採用基於訊息的設計方法,ServiceStack 可讓您建立更簡潔、可重複使用且靈活的 API。
以上是ServiceStack 基於訊息的設計如何改善 Web 服務的請求 DTO 設計?的詳細內容。更多資訊請關注PHP中文網其他相關文章!