2013-05-26 31 views
10

Zajmuję się tworzeniem zupełnie nowego interfejsu API REST przy użyciu interfejsu ASP.NET Web API. Pochodzę z tła WCF, czuję się zachęcony do tworzenia "umów o błędach" dla mojego API.Powracanie błędów w interfejsie API sieci Web

W tym przypadku nie mówię o nieobsługiwanych wyjątkach zwracanych do klienta. Zamiast tego koncentruję się na błędach, takich jak niewłaściwe używanie interfejsu API przez klienta - szczególnie tych, w których klient może automatycznie tworzyć te błędy i ponownie wysyłać żądania.

Większość przykładów znalazłem tylko mieć ciąg zwracane, zazwyczaj rzuca HttpResponseException, albo przynajmniej jakiejś rzeczy, aby proces budowania pouczająca błędzie ciąg bardziej zautomatyzowany: Return custom error objects in Web API

I m myśli o tworzeniu wyjątku HttpResponseException, przekazując w HttpResponseMessage, którego zawartość jest ustawiona na mój konkretny typ umowy o błędzie.

Moje API również intensywnie korzysta z automatycznego sprawdzania poprawności modelu, a te błędy sprawdzania poprawności modelu powracają jako zupełnie inna struktura.

Czy powinienem wymusić na "błędach" ten sam format, co odpowiedzi sprawdzania poprawności modelu? Jakie są tutaj najlepsze praktyki?

Na koniec moje API ujawni opcje formatowania buforów json, xml i protokołów. W rezultacie muszę się upewnić, że moja strategia jest niezależna od formatowania.

Odpowiedz

19

Napisałem ten post na blogu jakiś czas temu o tym, jak Web API czyni obsługę błędów:

http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx

To powinno pomóc odpowiedzieć na pytania. Zasadniczo masz dwie opcje:

  1. Zdefiniuj własną klasę odpowiedzi na błędy. W tym przypadku chcesz zapewnić, że twoja klasa może być serializowana jako XML, JSON itd. Następnie możesz użyć Request.CreateResponse(statusCode, myErrorInstance), aby odesłać własne błędy. Prawdopodobnie chcesz również, aby włączyć niepoprawne stany modelu do określonego typu błędu.

  2. Użyj typu odpowiedzi na błąd Web API: HttpError. HttpError to w zasadzie Dictionary<string, object> gdzie dodajesz własne klucze i wartości do HttpError. Zalet jest wiele - twoje błędy będą wyglądać jak błędy Web API, wiesz, że działa ze wszystkimi formaterami i możesz uniknąć pracy z koniecznością zdefiniowania transformacji z wyjątków i nieprawidłowych stanów modelu. Najłatwiejszym sposobem użycia HttpError jest wywołanie Request.CreateErrorResponse().

+0

czy możesz podać więcej informacji o HttpError i najlepszy sposób na jego zwrot? Czy nadal jest standardowym sposobem zwracania błędów - niewiele mogę na ten temat znaleźć - thx. Wydaje się również nie działać z IHttpActionResult. – niico

1

Możesz zrobić wszystko, co chcesz w takich sytuacjach. Najlepszym doświadczeniem dla konsumenta w twoim interfejsie webowym byłoby upewnienie się, że używasz przyjaznych komunikatów o błędach, w którym to przypadku będziesz chciał serializować swoje błędy w dobrze sformatowanych obiektach json. Poniższy wpis na blogu zawiera kilka przykładów użycia i rozwiązania, które wymyśliłem: Web Api, HttpError and the Behavior of Exceptions

Powiązane problemy