Nova Logika
← Nazad na blog

Curl za testiranje API-ja

3 min
Monitor sa kodom u terminalu

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:

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.