Diciamo che ho un'enumerazione di tipi di informazioni correlate e un'enumerazione di periodi di tempo. Inoltre ho creato due operazioni su un controller per il recupero dei dati di quei tipi di informazioni.
A causa di vincoli dell'API di terze parti, l'InfoA può essere recuperata solo con un intervallo di date e InfoB e InfoC possono essere recuperati solo con un'enumerazione del periodo di tempo. Inoltre, per motivi di estensibilità, ho reso l'InfoType selezionato come parametro in entrambi i percorsi operativi perché so che ulteriori requisiti verranno dal business in un secondo momento e anche perché non voglio creare una nuova operazione per ogni InfoType.
Quindi quando si controlla l'InfoType nell'operazione e si scopre che non è supportato dovrei restituire un HttpStatusCode.NotImplemented
o HttpStatusCode.BadRequest
a causa di un parametro errato? O questa è una pessima soluzione?
public enum InfoType
{
InfoA = 0,
InfoB = 1,
InfoC = 2,
}
public enum TimePeriod
{
Previous = 0,
Current = 1,
}
[Route("api/v1/info/{selectedInfoType:int}/{startDate:datetime}/{endDate:datetime}")]
public HttpResponseMessage Get(InfoType selectedInfoType, DateTime startDate, DateTime endDate)
{
HttpResponseMessage result;
string msg = string.empty;
switch(infoType)
{
case InfoType.InfoA:
result = ...do some work
break;
default:
msg = "Not implemented for this InfoType";
break;
}
if(!string.IsNullOrEmpty(msg))
{
result = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
return result;
}
[Route("api/v1/info/{selectedInfoType:int}/{selectedTimePeriod:int}")]
public HttpResponseMessage Get(InfoType selectedInfoType, TimePeriod selectedTimePeriod)
{
HttpResponseMessage result;
string msg = string.empty;
switch(infoType)
{
case InfoType.InfoB:
result = ...do some work
break;
case InfoType.InfoB:
result = ...do some work
break;
default:
msg = "Not implemented for this InfoType";
break;
}
if(!string.IsNullOrEmpty(msg))
{
result = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
return result;
}