Błędy w REST – zamieść pod dywan

pod-dywanW poprzednim wpisie wspomniałem o tym, jak czasem praca z REST w PowerShellu jest nieco kłopotliwa i wymaga wiedzy o tym, co PowerShell dokładnie robi (lub raczej: czego nie robi, mimo że powinien). Dziś o nieco innym problemie, który na szczęście w nowszych wersjach PowerShella jest już usunięty i o tym, jak podobny efekt uzyskać w Windows PowerShell (z którego, jak sadzę, nadal korzysta większość użytkowników PowerShella).

Co ciekawe, na problem ten natknęliśmy się również w czasie pracy z PowerShell Universal a konkretniej – w czasie pracy z błędami, które platforma ta usiłowała zwrócić. W PowerShellu na wyjściu dostawaliśmy mało konkretną informację o błędzie, która nie miała nic wspólnego z tym, co nasza końcówka (w odpowiednich okolicznościach) powinna zwrócić. Najpierw końcówka z gwarantowanym błędem o znanej treści:

New-PSUEndpoint -Url /fail -Endpoint {
New-PSUApiResponse -StatusCode 404 -Body 'Coś nie bangla!'
} -ErrorAction Stop
view raw BrokenRest.ps1 hosted with ❤ by GitHub

Dalej – wynik, jaki uzyskiwaliśmy na wyjściu:

irm-powershell-5

Ta sama w uruchomiona w ramach wersji nowszej zawiera komplet informacji o błędzie, nie tylko o kodzie błędu:

irm-powershell-7

Oczywiście, nie zawsze mamy komfort “przesiadki” na nowszą wersję – co więc, gdy jesteśmy skazani na pracę z wersją starszą? W naszej firmie postanowiliśmy “oryginalne” Invoke-RestMethod opakować i dodać kilka linijek, które zatroszczą się o prawidłową obsługę błędów przekazywanych w ten sposób:

try {
Invoke-RestMethod -Uri http://psu.contoso.com/fail -ErrorAction Stop
} catch {
$szczegółyBłędu = [IO.StreamReader]::new(
$_.Exception.Response.GetResponseStream()
).ReadToEnd()
"Błąd - $_ - $szczegółyBłędu"
}
# Wynik:
# Błąd - The remote server returned an error: (404) Not Found. - Coś nie bangla!

Zmian było więcej: obsługa innej wersji TLS, praca z “podejrzanymi” certyfikatami, które w środowiskach korporacyjnych nie należą do rzadkości… Grunt, że możemy teraz swobodnie komunikować się z różnymi końcówkami REST, bez konieczności “łatania” kodu za każdym razem. Winking smile

~ - autor: Bartek Bielawski w dniu 30 marca, 2022.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s

 
%d blogerów lubi to: