Vyskúšajte REST API pomocou zvlnenia

1. Prehľad

Tento tutoriál poskytuje stručný prehľad o testovaní rozhrania REST API pomocou zvlnenie.

zvlnenie je nástroj príkazového riadku na prenos údajov a podporuje okolo 22 protokolov vrátane protokolu HTTP. Táto kombinácia z neho robí veľmi dobrý ad hoc nástroj na testovanie našich služieb REST.

2. Možnosti príkazového riadku

curl podporuje viac ako 200 možností príkazového riadku. A môžeme ich mať nula alebo viac, aby sprevádzali URL v príkaze.

Ale predtým, ako ho použijeme na svoje účely, pozrime sa na dva, ktoré by nám uľahčili život.

2.1. Podrobne

Keď testujeme, je dobré nastaviť podrobný režim na:

zvlnenie -v //www.example.com/

Výsledkom by bolo, že príkazy poskytnú užitočné informácie, ako je vyriešená adresa IP, port, ku ktorému sa pokúšame pripojiť, a hlavičky.

2.2. Výkon

Predvolene curl vydáva telo odpovede na štandardný výstup. Voliteľne môžeme poskytnúť možnosť výstupu na uloženie do súboru:

zvlnenie -o out.json //www.example.com/index.html

To je obzvlášť užitočné, keď je veľkosť odpovede veľká.

3. Metódy HTTP so zvlnením

Každá požiadavka HTTP obsahuje metódu. Najbežnejšie používané metódy sú GET, POST, PUT a DELETE.

3.1. ZÍSKAJTE

Toto je predvolená metóda pri uskutočňovaní hovorov HTTP pomocou zvlnenia. V skutočnosti boli predtým uvedenými príkladmi obyčajné hovory GET.

Pri spustení miestnej inštancie služby na porte 8082 by sme na uskutočnenie hovoru GET použili niečo ako tento príkaz:

curl -v // localhost: 8082 / spring-rest / foos / 9

A keďže máme zapnutý podrobný režim, dostali by sme spolu s textom odpovede aj trochu viac informácií:

* Skúšam :: 1 ... * Sada TCP_NODELAY * Pripojené k portu localhost (:: 1) 8082 (# 0)> GET / spring-rest / foos / 9 HTTP / 1.1> Hostiteľ: localhost: 8082> User-Agent: curl / 7.60.0> Prijať: * / *> <HTTP / 1.1 200 <X-Application-Context: application: 8082 <Content-Type: application / json; charset = UTF-8 <Transfer-Encoding: chunked <Date: Ne, 15. júla 2018 11:55:26 GMT <{"id": 9, "name": "TuwJ"} * Pripojenie č. 0 k hostiteľovi localhost zostalo nedotknuté

3.2. POST

Túto metódu používame na zasielanie údajov prijímacej službe. A na to používame možnosť údajov.

Najjednoduchší spôsob, ako to urobiť, je vložiť údaje do príkazu:

curl -d 'id = 9 & name = baeldung' // localhost: 8082 / spring-rest / foos / new

alebo odovzdajte súbor obsahujúci telo žiadosti možnosti voľby takto:

curl -d @ request.json -H "Content-Type: application / json" // localhost: 8082 / spring-rest / foos / new

Pri použití vyššie uvedených príkazov sa môžu vyskytnúť chybové správy, ako je tento:

{"timestamp": "15-07-2018 05:57", "status": 415, "error": "Unsupported Media Type", "exception": "org.springframework.web.HttpMediaTypeNotSupportedException", "message": "Typ obsahu" application / x-www-form-urlencoded; charset = UTF-8 'nie je podporovaný "," cesta ":" / spring-rest / foos / new "}

Je to preto, že zvlnenie pridá nasledujúcu predvolenú hlavičku ku všetkým požiadavkám POST:

Typ obsahu: application / x-www-form-urlencoded

To je tiež to, čo prehľadávače používajú v obyčajnom POST. Pri našom používaní by sme zvyčajne chceli prispôsobiť hlavičky podľa našich potrieb.

Napríklad, ak naša služba očakáva typ obsahu json, potom môžeme pomocou voľby -H upraviť našu pôvodnú požiadavku POST:

curl -d '{"id": 9, "name": "baeldung"}' -H 'Content-Type: application / json' // localhost: 8082 / spring-rest / foos / new

Príkazový riadok systému Windows nepodporuje jednoduché úvodzovky, ako napríklad mušle typu Unix.

Vo výsledku by sme museli nahradiť jednoduché úvodzovky dvojitými úvodzovkami; uniknúť im všade, kde je to potrebné:

curl -d "{\" id \ ": 9, \" name \ ": \" baeldung \ "}" -H "Content-Type: application / json" // localhost: 8082 / spring-rest / foos / new

Okrem toho, keď chceme poslať trochu väčšie množstvo dát, je zvyčajne dobré použiť dátový súbor.

3.3. PUT

Táto metóda je veľmi podobná testu POST. Používame ho však vtedy, keď chceme poslať novú verziu existujúceho zdroja. Aby sme to dosiahli, používame možnosť -X.

Bez akejkoľvek zmienky o type metódy požiadavky je zvlnenie predvolené na použitie GET. Preto výslovne spomenieme typ metódy v prípade PUT:

curl -d @ request.json -H 'Content-Type: application / json' -X PUT // localhost: 8082 / spring-rest / foos / 9

3.4. ODSTRÁNIŤ

Opäť určujeme, že chceme použiť DELETE pomocou voľby -X:

curl -X DELETE // localhost: 8082 / spring-rest / foos / 9

4. Vlastné hlavičky

Môžeme nahradiť predvolené hlavičky alebo pridať vlastné hlavičky.

Napríklad na zmenu hlavičky hostiteľa urobíme toto:

zvlnenie -H "Hostiteľ: com.baeldung" //example.com/

Na vypnutie hlavičky User-Agent sme vložili prázdnu hodnotu:

zvlnenie -H "User-Agent:" //example.com/

Najbežnejším scenárom počas testovania je zmena hlavičky Content-Type a Accept. Museli by sme pred každú hlavičku dať predponu voľby -H:

curl -d @ request.json -H "Content-Type: application / json" -H "Accept: application / json" // localhost: 8082 / spring-rest / foos / new

5. Autentifikácia

Služba, ktorá vyžaduje autentifikáciu, pošle späť 401 - neautorizovaný kód odpovede HTTP a priradenú hlavičku WWW-Authenticate.

Pre základné overenie môžeme jednoducho vložte kombináciu užívateľského mena a hesla do našej požiadavky pomocou možnosti používateľa:

zvlnenie - používateľské heslo: secretPassword //example.com/

Ak však chceme na overenie použiť OAuth2, najskôr by sme potrebovali získať access_token z našej autorizačnej služby.

Odpoveď služby bude obsahovať prístupový token:

{"access_token": "b1094abc0-54a4-3eab-7213-877142c33fh3", "token_type": "bearer", "refresh_token": "253begef-868c-5d48-92e8-448c2ec4bd91", "expires_in": 31234}

Teraz môžeme použiť token v našej hlavičke Autorizácia:

curl -H "Autorizácia: Nosič b1094abc0-54a4-3eab-7213-877142c33fh3" //example.com/

6. Záver

Pozreli sme sa na použitie minimálnej funkčnosti zvlnenia, aby sme otestovali naše služby REST. Aj keď môže pre náš účel urobiť oveľa viac, než o čom sme tu hovorili, malo by to stačiť.

Pokojne napíšte curl -h do príkazového riadku a vyskúšajte všetky dostupné možnosti. Služba REST použitá na demonštráciu je k dispozícii tu na GitHub.