Zwykłe strony testujemy w przeglądarce. API RESTowe jest trudniejsze. Przeglądarka nie pozwala nam na większość metod HTTP, ustawianie dowolnych nagłówków itp. Z pomocą przychodzi nam biblioteka cURL, gdzie możemy zrobić praktycznie wszystko z wywołaniem HTTP.
Pomijam instalację cURLa. Przejdźmy od razu do rzeczy.
Proste zapytanie GET i nagłówki HTTP
W najprostszej formie cURL wysyła zapytanie GET. W odpowiedzi otrzymujemy treść strony:
$ curl http://www.wp.pl/ <!DOCTYPE html> <html lang="pl"> <head> ...
Aby cURL wyświetlił nam bardziej szczegółowe nagłówki odpowiedzi, korzystamy z opcji -i:
$ curl -i http://www.wp.pl/ HTTP/1.1 200 OK Server: aris Expires: ...
Gdy nie chcemy treści, a jedynie nagłówki dodajemy opcję -I (duże i):
$ curl -i -I http://www.wp.pl/ HTTP/1.1 200 OK Server: aris ...
H jak header czyli nagłówki żądania
Opcja -H pozwala podawać dowolne nagłówki żądania. Możemy np. podawać się za archaiczną przeglądarkę Netscape:
$ curl -iI http://www.wp.pl/ -H "User-agent: Mozilla/4.08 (Macintosh; I; PPC, Nav)" HTTP/1.1 200 OK Server: aris Expires: ...
Możemy podawać wiele nagłówków gdy kilka razy wywołamy opcję -H:
$ curl -iI http://www.wp.pl/ -H "User-agent: Mozilla/4.08 (Macintosh; I; PPC, Nav)" -H "Accept: text/html,application/xhtml+xml" -H "Accept-Encoding: gzip, deflate"
X jak… metody wywołania
Oprócz nieśmiertelnego GETa protokół oferuje nam całą gamę ciekawszych komend. POST, PUT, HEAD, OPTIONS, DELETE, PATCH, LINK, UNLINK, TRACE, CONNECT – jest tego sporo. Do wywołania służy opcja -X jak eXecute:
$ curl -iI -X OPTIONS http://moj.serwis.rest/zasob/nazwa 200 OK Allow: GET,PUT,DELETE,OPTIONS
Jak widzimy komenda OPTIONS daje nam informacje o zasobie. Możemy teraz pobrać zasób (GET), zmienić zawartość (PUT) oraz skasować (DELETE). Tak samo wywołujemy pozostałe metody.
Dane czyli opcja -d
Czym byłby POST bez wysłania danych? Skoro wiemy jak go wywołać, pozostaje nam wysłać dane. Dotychczas dane (np. z formularza) wysyłała przeglądarka. Teraz robimy to opcją -d:
$ curl -iI -X POST -d "imie=Adam&nazwisko=Z" http://moj.serwis.rest/
W ten sam sposób możemy wysyłać dane dla PUT np. w formacie JSON (uwaga na cudzysłowy!):
$ curl -iI -X PUT -d '{"imie":"Adam", "nazwisko":"Z"}' http://moj.serwis.rest/
Na koniec
Curl ma o wiele większe możliwości. Autoryzacja, zapamiętywanie nagłówków, ciasteczka, obsługa innych protokołów. Najprościej wpisać „curl –help” – liczba opcji jest imponująca.
Warto też poznać nagłówki http – im więcej ich znamy tym lepiej będziemy w stanie komunikować się z serwisami RESTowymi.