従来の RPC ベースの Web サービスは、API 設計を個別のコレクションとしてアプローチしますメソッド呼び出しが発生し、重複が発生し、柔軟性が制限されます。対照的に、ServiceStack は、簡潔、汎用、多用途のサービスを重視するメッセージベースの設計原則を提唱しています。
ServiceStack リクエスト DTO を設計するときは、次の点を考慮してください。
例として、提供される予約制限サービス:
[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; } }
応答から削除される機能には、汎用の ErrorResponse DTO を使用して処理できるため、ResponseStatus が含まれます。さらに、GetBookingLimits の Date プロパティは、より具体的な BookedAfter プロパティに置き換えられました。
サービス実装は次のようになります。
[Authenticate] public class BookingLimitService : AppServiceBase { public BookingLimit Get(GetBookingLimit request) { ... } public List<BookingLimit> Get(FindBookingLimits request) { ... } }
認証は次のようになります。サービス上の単一の属性として適用されるclass.
検証は多層化され、非侵襲的である必要があり、追加と保守が簡単になります。 CreateBooking には次のバリデータを使用できます:
public class CreateBookingValidator : AbstractValidator<CreateBooking> { public CreateBookingValidator() { // Validation rules } }
C# 例外を使用するか Fluent Validation を使用するかの選択は、操作の副作用によって決まることに注意してください。
メッセージ ベースの設計アプローチを採用することによって, ServiceStack を使用すると、より簡潔で再利用可能で柔軟な API を作成できます。
以上がServiceStack のメッセージベースの設計は、Web サービスのリクエスト DTO 設計をどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。