PowerShell i wywołania API

Jeśli chodzi o pracę na Win to często był problem z wywołaniem na szybko API. W dokumentacjach często są przykłady, gdzie używa się programu cURL. W Win nie było domyślnie tego zainstalowanego(teraz już jest. Choć też zależy to od wersji), więc albo się instalowało albo trzeba było używać SoapUi albo innego narzędzia. Ja miałem podejście, że zainstalowałem sobie powłokę bash na Win10, gdzie było cURL. Ostatnio czytam książkę i autor okazało się, że korzysta z PowerShell-a do tego. Oto jak to zrobić.

Dokumentacja jest tutaj: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod?view=powershell-6

GET

GET akurat łatwo testować, bo można zawsze to robić w przeglądarce, chyba, że trzeba dołożyć nagłówek. Najprościej jest tak wywołać GET-a:

Invoke-RestMethod https://api.chucknorris.io/jokes/random -Method GET | ConvertTo-Json

Dodatek na końcu | ConvertTo-Json powoduje, że można to wyświetlić w jakiś normalnej formie czyli tak:

Przykład wywołania GET-a przez PowerShell-a

Dodawanie nagłówków wygląda tak:

Invoke-RestMethod https://api.chucknorris.io/jokes/random -Method GET  -Headers (@{userId = 'UserIDValue'; token = 'TokenValue'})  | ConvertTo-Json

To nie jest jedyny sposób. PowerShell to mocne narzędzie i można praktycznie obiekt headers włożyć do zmiennej i korzystać z niego w zapytaniu. Ale mi chodzi o to aby szybko wywołać dane zapytania. Ten sposób z symbolami (, @ i { jest uniwersalny, więc można też tak definiować body to post-a.

POST

Najczęściej, jeśli chodzi o metodę POST to musimy zbudować body. Budowa body może tez być przeniesiona do zmiennej ale czasem wygodniej jest zrobić tak:

Invoke-RestMethod http://localhost:7000/api/reservation/2 -Method POST -Body (@{ "UserId"=1; "Date"="2019-02-02"  } | ConvertTo-Json)  -ContentType "application/json"

O czym warto pamiętać? Tworząc obiekty używając symboli (,@ i { należy w body je przekonwertować na JSON-a, używając składni | ConvertTo-Json

Do metody POST trzeba też dorzucić -ContentType co już możemy zrobić dość prosto.

PUT, DELETE, PATCH

Tutaj już nie ma żadnej różnicy. Wszystkie kombinacje z nagłówkami i body wymieniłem wyżej. Jak by mi się coś trafiło niezwykłego to napisze i będę aktualizował ten post.