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.