Я разработчик .Net, используемый для разработки веб-приложения в Microsoft Technologies. Я пытаюсь воспитывать себя, чтобы понять подход REST для веб-сервисов. Пока я люблю структуру ServiceStack.
Но иногда я нахожу себя, чтобы писать службы так, как я привык с WCF. Поэтому у меня есть вопрос, который меня беспокоит.
У меня есть 2 запроса DTO, так что 2 таких сервиса:
[Route("/bookinglimit", "GET")]
[Authenticate]
public class GetBookingLimit : IReturn<GetBookingLimitResponse>
{
public int Id { get; set; }
}
public class GetBookingLimitResponse
{
public int Id { get; set; }
public int ShiftId { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public int Limit { get; set; }
public ResponseStatus ResponseStatus { get; set; }
}
[Route("/bookinglimits", "GET")]
[Authenticate]
public class GetBookingLimits : IReturn<GetBookingLimitsResponse>
{
public DateTime Date { get; set; }
}
public class GetBookingLimitsResponse
{
public List<GetBookingLimitResponse> BookingLimits { get; set; }
public ResponseStatus ResponseStatus { get; set; }
}
Как видно из этих запросов DTO, у меня одинаковый запрос DTO почти для всех служб, и это похоже на DRY.
Я попытался использовать класс GetBookingLimitResponse
в списке внутри GetBookingLimitsResponse
по этой причине ResponseStatus
внутри GetBookingLimitResponse
класс дублируется в случае, если у меня есть ошибка в службе GetBookingLimits
.
Также у меня есть служебные реализации для таких запросов, как:
public class BookingLimitService : AppServiceBase
{
public IValidator<AddBookingLimit> AddBookingLimitValidator { get; set; }
public GetBookingLimitResponse Get(GetBookingLimit request)
{
BookingLimit bookingLimit = new BookingLimitRepository().Get(request.Id);
return new GetBookingLimitResponse
{
Id = bookingLimit.Id,
ShiftId = bookingLimit.ShiftId,
Limit = bookingLimit.Limit,
StartDate = bookingLimit.StartDate,
EndDate = bookingLimit.EndDate,
};
}
public GetBookingLimitsResponse Get(GetBookingLimits request)
{
List<BookingLimit> bookingLimits = new BookingLimitRepository().GetByRestaurantId(base.UserSession.RestaurantId);
List<GetBookingLimitResponse> listResponse = new List<GetBookingLimitResponse>();
foreach (BookingLimit bookingLimit in bookingLimits)
{
listResponse.Add(new GetBookingLimitResponse
{
Id = bookingLimit.Id,
ShiftId = bookingLimit.ShiftId,
Limit = bookingLimit.Limit,
StartDate = bookingLimit.StartDate,
EndDate = bookingLimit.EndDate
});
}
return new GetBookingLimitsResponse
{
BookingLimits = listResponse.Where(l => l.EndDate.ToShortDateString() == request.Date.ToShortDateString() && l.StartDate.ToShortDateString() == request.Date.ToShortDateString()).ToList()
};
}
}
Как вы видите, я также хочу использовать функцию проверки здесь, поэтому мне нужно написать классы проверки для каждого запроса DTO, который у меня есть. Поэтому у меня возникает ощущение, что я должен поддерживать низкий уровень обслуживания, группируя подобные службы в одну службу.
Но вопрос, который возникает у меня в голове, что я должен отправить больше информации, чем клиент, для этого запроса?
Я думаю, что мой образ мышления должен измениться, потому что я не доволен текущим кодом, который я написал, думая, как парень WCF.
Может ли кто-нибудь показать мне правильное направление, чтобы следовать.