Testirajte REST API s uvijanjem
1. Pregled
Ovaj vodič daje kratki pregled testiranja REST API-ja pomoću kovrča.
kovrča alat je naredbenog retka za prijenos podataka i podržava oko 22 protokola, uključujući HTTP. Ova kombinacija čini ga vrlo dobrim ad-hoc alatom za testiranje naših REST usluga.
2. Opcije naredbenog retka
curl podržava preko 200 opcija naredbenog retka. A možemo ih imati nula ili više da prate URL u naredbi.
No, prije nego što ga upotrijebimo u svoje svrhe, pogledajmo dva koja bi nam olakšala život.
2.1. Opširno
Kada testiramo, dobra je ideja postaviti detaljni način rada:
curl -v //www.example.com/
Kao rezultat toga, naredbe će pružiti korisne informacije poput razriješene IP adrese, porta s kojim se pokušavamo povezati i zaglavlja.
2.2. Izlaz
Prema zadanim postavkama curl daje tijelo odgovora na standardni izlaz. Po želji možemo pružiti izlaznu opciju za spremanje u datoteku:
curl -o out.json //www.example.com/index.html
To je posebno korisno kada je veličina odgovora velika.
3. HTTP metode s uvijanjem
Svaki HTTP zahtjev sadrži metodu. Najčešće korištene metode su GET, POST, PUT i DELETE.
3.1. DOBITI
Ovo je zadana metoda prilikom upućivanja HTTP poziva s curlom. Zapravo, prethodno prikazani primjeri bili su obični GET pozivi.
Tijekom izvođenja lokalne instance usluge na portu 8082, koristili bismo nešto poput ove naredbe za upućivanje GET poziva:
curl -v // localhost: 8082 / spring-rest / foos / 9
A budući da je uključen opširni način rada, dobili bismo malo više informacija zajedno s tijelom odgovora:
* Pokušavam :: 1 ... * TCP_NODELAY postavljen * Povezan s portalom localhost (:: 1) 8082 (# 0)> GET / spring-rest / foos / 9 HTTP / 1.1> Host: localhost: 8082> User-Agent: curl / 7.60.0> Prihvati: * / *> <HTTP / 1.1 200 <X-Application-Context: application: 8082 <Content-Type: application / json; charset = UTF-8 <Transfer-Encoding: chunked <Date: Nedjelja, 15. srpnja 2018. 11:55:26 GMT <{"id": 9, "name": "TuwJ"} * Veza # 0 za domaćin localhost-a ostala netaknuta
3.2. OBJAVI
Ovu metodu koristimo za slanje podataka službi za primanje. I za to koristimo opciju podataka.
Najjednostavniji način za to je ugrađivanje podataka u naredbu:
curl -d 'id = 9 & name = baeldung' // localhost: 8082 / spring-rest / foos / new
ili proslijedite datoteku koja sadrži tijelo zahtjeva opciji podataka poput ove:
curl -d @ request.json -H "Content-Type: application / json" // localhost: 8082 / spring-rest / foos / new
Koristeći gornje naredbe kakve jesu, mogli bismo naići na poruke o pogreškama poput sljedeće:
{"timestamp": "15-07-2018 05:57", "status": 415, "error": "Nepodržana vrsta medija", "iznimka": "org.springframework.web.HttpMediaTypeNotSupportedException", "message": "Tip sadržaja 'application / x-www-form-urlencoded; charset = UTF-8' nije podržan", "path": "/ spring-rest / foos / new"}
To je zato što curl dodaje sljedeće zadano zaglavlje svim POST zahtjevima:
Vrsta sadržaja: application / x-www-form-urlencoded
To je također ono što preglednici koriste u običnom POST-u. U našoj upotrebi obično želimo prilagoditi zaglavlja ovisno o našim potrebama.
Na primjer, ako naša usluga očekuje json tip sadržaja, tada možemo koristiti opciju -H za izmjenu izvornog POST zahtjeva:
curl -d '{"id": 9, "name": "baeldung"}' -H 'Content-Type: application / json' // localhost: 8082 / spring-rest / foos / new
Windows naredbeni redak nema podršku za pojedinačne navodnike poput ljuski sličnih Unixu.
Kao rezultat, morali bismo zamijeniti pojedinačne navodnike dvostrukim navodnicima; bježeći im gdje god je potrebno:
curl -d "{\" id \ ": 9, \" name \ ": \" baeldung \ "}" -H "Content-Type: application / json" // localhost: 8082 / spring-rest / foos / new
Osim toga, kada želimo poslati nešto veću količinu podataka, obično je dobra ideja koristiti podatkovnu datoteku.
3.3. STAVITI
Ova je metoda vrlo slična POST-u. Ali koristimo ga kada želimo poslati novu verziju postojećeg resursa. Da bismo to učinili, koristimo opciju -X.
Bez ikakvog spominjanja vrste metode zahtjeva, curl prema zadanim postavkama koristi GET. Stoga izričito spominjemo vrstu metode u slučaju PUT:
curl -d @ request.json -H 'Content-Type: application / json' -X PUT // localhost: 8082 / spring-rest / foos / 9
3.4. IZBRISATI
Opet preciziramo da želimo koristiti DELETE pomoću opcije -X:
curl -X DELETE // localhost: 8082 / spring-rest / foos / 9
4. Prilagođena zaglavlja
Možemo zamijeniti zadana zaglavlja ili dodati vlastita zaglavlja.
Na primjer, za promjenu zaglavlja hosta radimo sljedeće:
curl -H "Domaćin: com.baeldung" //example.com/
Da bismo isključili zaglavlje User-Agenta, unijeli smo praznu vrijednost:
curl -H "Korisnički agent:" //example.com/
Najobičniji scenarij tijekom testiranja je promjena zaglavlja Content-Type i Accept. Morali bismo samo zaglavlju dodati prefiks s opcijom -H:
curl -d @ request.json -H "Content-Type: application / json" -H "Accept: application / json" // localhost: 8082 / spring-rest / foos / new
5. Autentifikacija
Usluga koja zahtijeva provjeru autentičnosti poslala bi natrag 401 - Neovlašteni HTTP odgovorni kôd i povezano zaglavlje WWW-Authenticate.
Za osnovnu provjeru autentičnosti možemo jednostavno ugradite kombinaciju korisničkog imena i lozinke u naš zahtjev pomoću korisničke opcije:
curl --user baeldung: secretPassword //example.com/
Međutim, ako želimo koristiti OAuth2 za provjeru autentičnosti, prvo ćemo morati dobiti access_token od naše usluge autorizacije.
Odgovor usluge sadržavao bi pristupni_token:
{"access_token": "b1094abc0-54a4-3eab-7213-877142c33fh3", "token_type": "donositelj", "refresh_token": "253begef-868c-5d48-92e8-448c2ec4bd91", "expires_in": 312
Sada možemo koristiti žeton u našem zaglavlju Autorizacija:
curl -H "Odobrenje: Donositelj b1094abc0-54a4-3eab-7213-877142c33fh3" //example.com/
6. Zaključak
Razmotrili smo upotrebu minimalne funkcije curl za testiranje naših REST usluga. Iako može učiniti mnogo više od onoga o čemu je ovdje bilo riječi, za našu svrhu ovo bi trebalo biti dovoljno.
Slobodno upišite curl -h u naredbeni redak da biste provjerili sve dostupne opcije. REST usluga korištena za demonstraciju dostupna je ovdje na GitHubu.