Amalan Terbaik ServiceStack: Reka Bentuk API REST untuk Mengendalikan Perhubungan Objek Kompleks
Cabaran sering dihadapi apabila mereka bentuk API REST yang mengandungi perhubungan objek yang kompleks, seperti perhubungan antara ulasan, acara, tempat dan perkara. Artikel ini meneroka cara terbaik untuk mengendalikan senario sedemikian menggunakan ServiceStack.
Menggunakan struktur URL hierarki logik
Untuk mewakili hierarki dan konteks sumber, pertimbangkan untuk menggunakan struktur URL logik yang mengkategorikan sumber berdasarkan laluan induknya. Contohnya, struktur berikut mewakili acara dan ulasannya:
<code>/events //所有事件 /events/1 //事件 #1 /events/1/reviews //事件 #1 的评论</code>
Struktur ini membenarkan sebarang kata kerja HTTP digunakan pada setiap pengecam sumber.
Reka bentuk berasaskan mesej dan pelaksanaan perkhidmatan
PerkhidmatanServiceStack diasingkan daripada laluan tersuai mereka. Reka bentuk perkhidmatan berdasarkan jenis mesej dan konteks panggilan. Untuk kes ini, pertimbangkan untuk mencipta mesej berbeza untuk setiap operasi, seperti SearchEvents, GetEvent, CreateEventReview, dsb.
Contoh pelaksanaan perkhidmatan
Contoh pelaksanaan acara dan perkhidmatan ulasan acara:
EventsService.cs
<code class="language-csharp">[Route("/events", "GET")] public class SearchEvents : IReturn<SearchEventsResponse> { //可选结果集过滤器,例如 ?Category=Tech&Query=servicestack public string Category { get; set; } public string Query { get; set; } } [Route("/events", "POST")] public class CreateEvent : IReturn<Event> { public string Name { get; set; } public DateTime StartDate { get; set; } } [Route("/events/{Id}", "GET")] [Route("/events/code/{EventCode}", "GET")] //可选 public class GetEvent : IReturn<Event> { public int Id { get; set; } public string EventCode { get; set; } //获取事件的替代方法 } [Route("/events/{Id}", "PUT")] public class UpdateEvent : IReturn<Event> { public int Id { get; set; } public string Name { get; set; } public DateTime StartDate { get; set; } }</code>
EventReviewsService.cs
<code class="language-csharp">[Route("/events/{EventId}/reviews", "GET")] public class GetEventReviews : IReturn<GetEventReviewsResponse> { public int EventId { get; set; } } [Route("/events/{EventId}/reviews/{Id}", "GET")] public class GetEventReview : IReturn<EventReview> { public int EventId { get; set; } public int Id { get; set; } } [Route("/events/{EventId}/reviews", "POST")] public class CreateEventReview : IReturn<EventReview> { public int EventId { get; set; } public string Comments { get; set; } }</code>
Struktur fizikal projek
Atur struktur projek anda untuk memastikan projek peringkat akar ringan. Untuk projek sederhana hingga besar, pertimbangkan struktur berikut:
<code>- EventMan AppHost.cs - EventMan.ServiceInterface EventsService.cs EventsReviewsService.cs - EventMan.Logic IGoogleCalendarGateway - EventMan.ServiceModel Events.cs EventReviews.cs Types/ Event.cs EventReview.cs</code>
Gunakan ServiceModel DLL dalam projek klien
Dengan mengekalkan ServiceModel DTO dalam pelaksanaan yang berasingan dan dll tanpa kebergantungan, anda boleh berkongsinya dalam mana-mana projek klien .NET dan memanfaatkan klien perkhidmatan C# biasa untuk API yang ditaip.
Atas ialah kandungan terperinci Bagaimana untuk Merekabentuk API REST yang Cekap dengan Perhubungan Objek Kompleks dalam ServiceStack?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!