Curl za testiranje API-ja
Svaki developer koji radi sa API-jima pre ili kasnije upozna curl. Iako postoje alati poput Postman-a ili Insomnia-e, curl ostaje nezamenljiv — dostupan je na svakom serveru, ne zahteva instalaciju i savršeno se uklapa u shell skripte i CI/CD pipeline-ove.
Zašto curl?
Curl je komandni alat za slanje HTTP zahteva. Dolazi preinstaliran na Linux-u i macOS-u, a na Windows-u je dostupan od verzije 10. Njegova snaga leži u jednostavnosti — jedan red u terminalu može zameniti desetak klikova u GUI alatu.
Kada radite na backend-u i trebate brzo proveriti da li endpoint vraća očekivani odgovor, curl je najbrži put do odgovora. Nema pokretanja aplikacije, nema podešavanja kolekcija — samo terminal i komanda.
Osnovni GET zahtev
Najjednostavniji curl poziv je GET zahtev:
curl https://api.example.com/users
Ovo vraća telo odgovora direktno u terminal. Ako želite da vidite i HTTP zaglavlja, dodajte -i flag:
curl -i https://api.example.com/users
Za samo zaglavlja bez tela odgovora, koristite -I:
curl -I https://api.example.com/users
Slanje POST zahteva
Većina API-ja zahteva slanje podataka. Za POST zahtev sa JSON telom:
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Marko", "email": "marko@example.com"}'
Flag -X definiše HTTP metodu, -H dodaje zaglavlje, a -d šalje podatke u telu zahteva. Kada koristite -d, curl automatski postavlja metodu na POST, tako da -X POST možete izostaviti.
Za slanje podataka iz fajla:
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d @payload.json
Autentifikacija
Većina produkcijskih API-ja zahteva autentifikaciju. Za Bearer token:
curl https://api.example.com/me \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Za Basic autentifikaciju:
curl -u username:password https://api.example.com/me
Nikada ne ostavljajte tokene i lozinke u shell istoriji. Koristite environment varijable:
curl https://api.example.com/me \
-H "Authorization: Bearer $API_TOKEN"
Debagovanje zahteva
Kada nešto ne radi, -v (verbose) flag je vaš najbolji prijatelj:
curl -v https://api.example.com/users
Ovo prikazuje kompletan tok komunikacije — DNS resoluciju, TLS handshake, poslata zaglavlja, primljena zaglavlja i telo odgovora. Možete videti tačno šta vaš klijent šalje i šta server vraća.
Za još detaljniji pregled, --trace-ascii - ispisuje svaki bajt komunikacije:
curl --trace-ascii - https://api.example.com/users
Rad sa odgovorima
Curl odgovore možete proslediti u jq za formatiranje JSON-a:
curl -s https://api.example.com/users | jq '.'
Flag -s (silent) sakriva progress bar, a jq formatira JSON sa bojama i indentacijom. Za izvlačenje specifičnog polja:
curl -s https://api.example.com/users | jq '.[0].name'
Ako želite da sačuvate odgovor u fajl:
curl -o response.json https://api.example.com/users
Testiranje različitih HTTP metoda
REST API-ji koriste različite HTTP metode za različite operacije:
# Ažuriranje resursa
curl -X PUT https://api.example.com/users/1 \
-H "Content-Type: application/json" \
-d '{"name": "Marko Marković"}'
# Parcijalno ažuriranje
curl -X PATCH https://api.example.com/users/1 \
-H "Content-Type: application/json" \
-d '{"name": "Marko Marković"}'
# Brisanje resursa
curl -X DELETE https://api.example.com/users/1
Korisni flagovi za svakodnevni rad
Nekoliko flagova koji značajno olakšavaju rad:
-w "\n"— dodaje novi red na kraj odgovora, korisno kada API ne vraća trailing newline-L— prati redirekcije (3xx odgovori)--connect-timeout 5— timeout za uspostavljanje konekcije--max-time 30— maksimalno vreme za ceo zahtev-k— ignoriše SSL greške (koristite samo u development okruženju)
Curl u praksi
U svakodnevnom radu, curl je odličan za brze provere: da li je endpoint dostupan, da li vraća očekivani format, da li autentifikacija radi. Za složenije scenarije — lanac zahteva, čuvanje sesija, automatizovano testiranje — razmotrite alate poput httpie ili dedicirane test framework-e.
Ali za onu prvu, brzu proveru dok razvijate API, curl ostaje neprevaziđen. Jedan red u terminalu, odgovor za sekund.