URL должен быть «идентификатором ресурса», где любые аргументы строки запроса являются модификаторами этого запроса ресурса.
Таким образом, вы не должны помещать сложные типы в /path/info
, которые вряд ли станут частью идентификатора ресурса для этого маршрута.
Ваш маршрут должен содержать самоописание того, для чего он является идентификатором ресурса. Заполнение анонимной группы идентификаторов в URL не делает его чистым URL, оно все равно должно быть семантически правильным и самоописывать то, что содержат различные компоненты пути.
Трудно знать правильный Маршрут для использования, когда неясно, для какой Службы это используется, но если бы это была Служба поиска автомобилей , соответствующий URL был бы примерно таким:
/cars/search?EquipmentIds=1,2,3&ManufacturerIds=4,5,6&ColourIds=7,8,9
Так же, как при использовании службы поиска, такой как Google, они не пытаются упаковать все в маршрут, который используется только для идентификации вашего запроса на поиск. Все остальное, включая поисковый запрос, добавляется в строку запроса, например,
https://www.google.com/search?q=test
Что в ServiceStack будет просто определено как:
[Route("/cars/search")]
public class SearchCars
{
public List<int> EquipmentIds { get; set; }
public List<int> ManufacturerIds { get; set; }
public List<int> ColourIds { get; set; }
}
Или это может быть легко автоматически реализовано в AutoQuery с:
[Route("/cars/search")]
public class SearchCars : QueryDb<Car>
{
public List<int> EquipmentIds { get; set; }
public List<int> ManufacturerIds { get; set; }
public List<int> ColourIds { get; set; }
}