Diseño de DTO de ServiceStack Request

Soy un desarrollador de .Net usado para desarrollar aplicaciones web en tecnologías Microsoft. Estoy tratando de educarme para entender el enfoque REST para servicios web. Hasta ahora estoy amando el marco de ServiceStack.

Pero a veces me encuentro escribiendo servicios de una manera a la que estoy acostumbrado con WCF. Así que tengo una pregunta que me molesta.

Tengo 2 solicitudes de DTO para 2 servicios como estos:

[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; }
}

Como se ve en estos DTO de solicitud, tengo DTO de solicitud similar para casi todos los servicios y esto parece no estar SECO.

Traté de usarGetBookingLimitResponse clase en una lista dentroGetBookingLimitsResponse por esta razónResponseStatus dentroGetBookingLimitResponse La clase está publicada en caso de que tenga un error enGetBookingLimits Servicio.

También tengo implementaciones de servicio para estas solicitudes como:

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()
        };
    }
}

Como ven, también quiero usar la función de validación aquí, así que tengo que escribir clases de validación para cada solicitud DTO que tengo. Por lo tanto, tengo la sensación de que debo mantener bajo mi número de servicio al agrupar servicios similares en un solo servicio.

¿Pero la pregunta aquí que aparece en mi mente es que debo enviar más información de la que el cliente necesita para esa solicitud?

Creo que mi forma de pensar debería cambiar porque no estoy contento con el código actual que escribí pensando como un chico de WCF.

¿Puede alguien mostrarme la dirección correcta para seguir?

Respuestas a la pregunta(2)

Su respuesta a la pregunta