Następnie tworzymy proste obiekty DTO, do których serializowane i deserializowane będą responsy i requesty REST-owe. Dobrą praktyką jest, aby obiekty DTO były symetryczne i przez konwencję do nazwy obiektu zwrotnego dodajemy "Response".
[Route("/entry/{Date}", "GET")] public class Entry { public DateTime Date { get; set; } public int Count { get; set; } } public class EntryResponse { public int Total { get; set; } }
Poprzez atrybuty definiujemy routingi, w których fragmenty ścieżek można bindować bezpośrednio do properties DTO. Następnie dodajemy klasę serwisu, która dziedziczy po bazowej klasie Service z SeriveStack. W klasie dodajemy metody o takich nazwach jak czasowniki HTTP, gdzie parametrem będzie zdefiniowane wcześniej DTO.
public class EntryService : Service { public int Sum { get; set; } public object Post(Entry entry) { Sum += entry.Count; return new EntryResponse() {Total = Sum}; } }
Aby wystartować serwis, wystarczy skorzystać z pliku .asax.
public class Global : System.Web.HttpApplication { public class MyEntryAppHost : AppHostBase { public MyEntryAppHost() : base("MyEntryService", typeof(EntryService).Assembly) { } public override void Configure(Funq.Container container) { } } protected void Application_Start(object sender, EventArgs e) { new MyEntryAppHost().Init(); } //... }
Metoda Configure posłuży jako bootstrapper, gdzie będzie można konfigurować np. kontener IoC. Ostatnim etapem jest skonfigurowanie pliku Web.config, gdzie dodajemy odpowiedni handler.
<configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.web> <httpHandlers> <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/> </httpHandlers> </system.web> </configuration>
Po uruchomieniu aplikacji mamy możliwość podglądu i testowania naszych endpointów.
Brak komentarzy:
Prześlij komentarz