Sto imparando e tuffo nelle API Web. Ho usato i servizi Web prima, ma non specificamente con l'API Web. Di seguito è riportato come lo sto progettando fino ad ora e sono stato curioso del feedback.
Ho un oggetto ReturnMessages. Questo è fondamentalmente un oggetto standard che viene restituito da una qualsiasi delle chiamate API, eseguito correttamente o si verifica un errore. All'interno di ogni metodo API ho una presa di prova. se tutto va bene, specificherò i valori di cui ho bisogno all'interno del mio oggetto ReturnMessages e di Ok(_returnMessages)
. Ora, se si verifica un errore, riempio l'oggetto ReturnMessages con le informazioni sull'errore e ancora una volta restituisco Ok(_returnMessages)
.
L'oggetto ReturnMessages contiene un campo ReturnClass per contenere qualsiasi tipo di altri oggetti che potrebbe essere necessario restituire. Un singolo oggetto o una matrice. Ha anche un codice di ritorno, un messaggio di risposta, un messaggio amichevole per l'utente finale nel caso in cui qualcosa di sbagliato accada e di una lista di string generica di dati che è stata trasmessa e che posso inviare e utilizzare a scopo di test per provare e ricreare il di errore.
Di seguito è riportato un esempio di codice da uno dei metodi che mostra ciò di cui sto parlando. Questo approccio è ok se restituisco sempre Ok con l'oggetto che sto restituendo o mi mancano i potenziali pezzi all'interno dell'API Web che dovrei utilizzare? Ho visto le eccezioni NotFound e tutte quelle altre cose divertenti.
** EDIT: ho apportato alcune modifiche in termini di cosa stavo passando quando le cose non funzionano. Ho estratto ReturnMessage e anche ReturnData e l'ho scritto nel registro eventi dell'applicazione per un nuovo valore di stringa per questa particolare web api. Taht si verifica nella riga di codice _lw che è solo una classe LogWriter che utilizza i valori passati per scrivere nel registro eventi dell'applicazione.
public IHttpActionResult method1(string arg 1= null, string arg2 = null, string arg3 = null)
{
try
{
clrObject1 varClrObject = (from p in db.clrObject1
where p.column1 == arg1
select p).SingleOrDefault();
if (varClrObject == null)
{
_returnMessages = new ReturnMessages
{
ReturnCode = 204,
FriendlyErrorMessage = "Nothing found matches the supplied values."
};
_lw.SetupEventLog("No data was found that matched the information supplied.\n\nParameters:\narg1: " + arg1 + "\narg2: " + arg2 + "\narg2=" + arg2, "Warning");
}
else
{
_returnMessages = new ReturnMessages
{
ReturnCode = 200,
ReturnClass = varClrObject,
ReturnMessage = "Information Successfully Retrieved"
};
}
}
catch (Exception e)
{
_returnMessages = new ReturnMessages
{
FriendlyErrorMessage = "An error has occurred while getting your information. Please try again in a few minutes. A notification was already sent to the company about this issue.",
ReturnCode = 400
};
_lw.SetupEventLog("Parameters:\narg1: " + arg1 + "\narg2: " + arg2 + "\narg3=" + arg3, "Error", e);
}
return Ok(new { Response = _returnMessages });
}