Perkhidmatan web berasaskan RPC tradisional mendekati reka bentuk API sebagai koleksi individu panggilan kaedah, yang membawa kepada pertindihan dan fleksibiliti terhad. Sebaliknya, ServiceStack menyokong prinsip reka bentuk berasaskan mesej yang menekankan perkhidmatan ringkas, generik dan serba boleh.
Apabila mereka bentuk DTO permintaan ServiceStack, pertimbangkan perkara berikut:
Sebagai contoh, mari kita memfaktorkan semula perkhidmatan Had Tempahan yang disediakan:
[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; } }
Ciri yang dialih keluar daripada respons termasuk ResponseStatus, kerana ia boleh dikendalikan menggunakan ErrorResponse DTO generik. Selain itu, sifat Date dalam GetBookingLimits telah digantikan dengan sifat BookedAfter yang lebih khusus.
Pelaksanaan perkhidmatan kini kelihatan seperti ini:
[Authenticate] public class BookingLimitService : AppServiceBase { public BookingLimit Get(GetBookingLimit request) { ... } public List<BookingLimit> Get(FindBookingLimits request) { ... } }
Pengesahan mempunyai telah digunakan sebagai satu atribut pada perkhidmatan kelas.
Pengesahan hendaklah berlapis dan tidak invasif, menjadikannya mudah untuk menambah dan menyelenggara. Pengesah berikut boleh digunakan untuk CreateBooking:
public class CreateBookingValidator : AbstractValidator<CreateBooking> { public CreateBookingValidator() { // Validation rules } }
Ingat, pilihan antara menggunakan pengecualian C# atau Fluent Validation bergantung pada kesan sampingan operasi.
Dengan menggunakan pendekatan reka bentuk berasaskan mesej , ServiceStack membolehkan anda mencipta API yang lebih ringkas, boleh digunakan semula dan fleksibel.
Atas ialah kandungan terperinci Bagaimanakah Reka Bentuk Berasaskan Mesej ServiceStack Boleh Meningkatkan Permintaan Reka Bentuk DTO untuk Perkhidmatan Web?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!