Nel refactoring di molti codici MVC, ho riscontrato un problema con la mia progettazione di URL. Ad esempio, supponiamo di avere un oggetto Venue
public class Venue
{
public long ID { get; set; }
public List<Event> Events { get; set; }
}
e un Event
oggetto
public class Event
{
public long ID { get; set; }
public Venue Venue { get; set; }
}
Quindi la mia configurazione iniziale prevedeva l'impostazione di un'azione in EventController
come
public ActionResult List (long? ID) // http://example.org/API/Events/List/12
dove ID
ha specificato Venue, quindi restituirebbe un elenco di eventi per quella sede. Se non viene specificato un ID
, viene restituito un elenco di tutti gli eventi . Ciò si traduce in un URL confuso, perché il parametro ID
è ambiguo e fuorviante.
Poi ho pensato di cambiarlo in
public ActionResult List (long? VenueID) // http://example.org/API/Events/List?VenueID=12
che ha molto più senso ed è più chiaro.
Esiste un URL ancora più pulito se l'azione è stata spostata su VenueController
e impostata come
public ActionResult Events (long? ID) // http://example.org/API/Venue/12/Events
dato che ID
indicherà chiaramente Venue
ID
. Il problema con questo URL è che si tratta principalmente di oggetti Event
in VenueController
, il che sembra sbagliato.
Mi sono orientato verso la prima opzione ( http://example.org/API/Events/List?VenueID=12
) perché, anche se l'altra opzione è più pulita, sembra che dovrei mantenere le pagine Event
(mentre visualizzo questa pagina Elenco come più correlata alla% oggettoEvent
) in EventController
. Qualche consiglio?