Teszteljen egy REST API-t curl-lel

1. Áttekintés

Ez az oktatóanyag rövid áttekintést nyújt a REST API használatának teszteléséről becsavar.

becsavar egy parancssori eszköz adatátvitelhez, és mintegy 22 protokollt támogat, beleértve a HTTP-t is. Ez a kombináció nagyon jó ad-hoc eszköz a REST szolgáltatásaink teszteléséhez.

2. Parancssori opciók

a curl több mint 200 parancssori opciót támogat. És nulla vagy több is lehet, hogy kísérjük az URL-t a parancsban.

Mielőtt azonban a céljainkra felhasználnánk, vessünk egy pillantást kettőre, amelyek megkönnyítenék az életünket.

2.1. Bőbeszédű

Amikor tesztelünk, célszerű a részletes módot bekapcsolni:

göndör -v //www.example.com/

Ennek eredményeként a parancsok hasznos információkat szolgáltatnának, például a megoldott IP-címet, a csatlakozni kívánt portot és a fejléceket.

2.2. Kimenet

Alapértelmezés szerint a curl a választestet normál kimenetre adja. Opcionálisan megadhatjuk a kimeneti opciót a fájlba való mentéshez:

göndör -o out.json //www.example.com/index.html

Ez különösen akkor hasznos, ha a válasz nagysága nagy.

3. HTTP-módszerek göndörítéssel

Minden HTTP kérés tartalmaz egy metódust. A leggyakrabban használt módszerek a GET, POST, PUT és DELETE.

3.1. KAP

Ez az alapértelmezett módszer a HTTP-hívások curl használatakor. Valójában a korábban bemutatott példák egyszerű GET hívások voltak.

Miközben a szolgáltatás helyi példányát futtatjuk a 8082-es porton, valami hasonlót használunk a GET hívás kezdeményezéséhez:

göndör -v // localhost: 8082 / spring-rest / foos / 9

És mivel a részletes üzemmód be van kapcsolva, egy kicsit több információt kapnánk a választesttel együtt:

* Megpróbálom :: 1 ... * TCP_NODELAY set * Csatlakoztatva a localhost (:: 1) 8082-es porthoz (# 0)> GET / spring-rest / foos / 9 HTTP / 1.1> Host: localhost: 8082> User-Agent: curl / 7.60.0> Elfogadás: * / *> <HTTP / 1.1 200 <X-Application-Context: application: 8082 <Content-Type: application / json; charset = UTF-8 <Transfer-Encoding: chunked <Date: 2018. július 15., vasárnap, 11:55:26 GMT <{"id": 9, "name": "TuwJ"} * A helyi házigazdának a 0. számú kapcsolata érintetlen maradt

3.2. POST

Ezt a módszert arra használjuk, hogy adatokat küldjünk egy fogadó szolgáltatásnak. Ehhez pedig az adat opciót használjuk.

Ennek legegyszerűbb módja az adatok beágyazása a parancsba:

curl -d 'id = 9 & name = baeldung' // localhost: 8082 / rugóstag / foos / new

vagy adja át a kérelem törzsét tartalmazó fájlt az ilyen adatopcióhoz:

göndör -d @ request.json -H "Tartalom-típus: alkalmazás / json" // localhost: 8082 / rugós-pihenő / foos / új

A fenti parancsok jelenlegi állapotának használatával olyan hibaüzenetekbe ütközhetünk, mint az alábbiak:

{"időbélyeg": "15-07-2018 05:57", "status": 415, "error": "Nem támogatott médiatípus", "kivétel": "org.springframework.web.HttpMediaTypeNotSupportedException", "message": "Tartalomtípus 'application / x-www-form-urlencoded; charset = UTF-8' nem támogatott", "path": "/ spring-rest / foos / new"}

A curl a következő alapértelmezett fejlécet adja hozzá az összes POST kéréshez:

Tartalom-típus: application / x-www-form-urlencoded

Ezt használják a böngészők is egy egyszerű POST-ban. Használatunk során általában a fejléceket szeretnénk testre szabni az igényeinktől függően.

Például, ha szolgáltatásunk json content-type-ra számít, akkor a -H opcióval módosíthatjuk eredeti POST-kérelmünket:

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

A Windows parancssor nem támogatja az olyan idézőjeleket, mint a Unix-szerű héjak.

Ennek eredményeként le kell cserélnünk az egyes idézőjeleket kettős idézőjelekre; elkerülve őket, ahol csak szükséges:

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

Ezenkívül, ha valamivel nagyobb mennyiségű adatot akarunk küldeni, általában célszerű adatfájlt használni.

3.3. PUT

Ez a módszer nagyon hasonlít a POST-ra. De akkor használjuk, amikor egy meglévő erőforrás új verzióját akarjuk elküldeni. Ehhez az -X opciót használjuk.

A kérési módszer típusának említése nélkül a curl alapértelmezés szerint a GET használatát használja. Ezért PUT esetén kifejezetten megemlítjük a módszer típusát:

curl -d @ request.json -H 'Tartalom-típus: alkalmazás / json' -X PUT // localhost: 8082 / rugós-pihenő / foos / 9

3.4. TÖRÖL

Ismét meghatározzuk, hogy a DELETE-t akarjuk használni az -X opcióval:

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

4. Egyéni fejlécek

Cserélhetjük az alapértelmezett fejléceket, vagy hozzáadhatjuk saját fejlécünket.

Például a Host fejléc megváltoztatásához ezt tesszük:

curl -H "Gazdagép: com.baeldung" //example.com/

A User-Agent fejléc kikapcsolásához egy üres értéket adunk meg:

curl -H "Felhasználó-ügynök:" //example.com/

A tesztelés során a leggyakoribb forgatókönyv a Content-Type és az Accept fejléc megváltoztatása. Minden egyes fejlécet csak a -H opcióval kell előtagoznunk:

curl -d @ request.json -H "Tartalom-típus: alkalmazás / json" -H "Elfogadás: alkalmazás / json" // localhost: 8082 / rugós-pihenő / foos / új

5. Hitelesítés

A hitelesítést igénylő szolgáltatás visszaküldené a 401 - engedély nélküli HTTP válaszkódot és a hozzá tartozó WWW-hitelesítés fejlécet.

Az alapvető hitelesítéshez megtehetjük egyszerűen be kell ágyaznia a felhasználónév és jelszó kombinációt kérésünkbe a felhasználói opcióval:

curl --user baeldung: secretPassword //example.com/

Ha azonban az OAuth2-et akarjuk használni hitelesítéshez, akkor először meg kell szereznünk az access_token szót az engedélyezési szolgáltatásunktól.

A szolgáltatás válasza tartalmazza a access_token:

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

Most használhatjuk a tokent az Engedélyezés fejlécünkben:

curl -H "Engedélyezés: Bearer b1094abc0-54a4-3eab-7213-877142c33fh3" //example.com/

6. Következtetés

Megnéztük a curl minimális funkcionalitását a REST szolgáltatásaink teszteléséhez. Bár sokkal többet tehet, mint amit itt tárgyaltunk, célunk érdekében ennyi elégnek kell lennie.

Írja be nyugodtan a curl -h parancsot a parancssorba, hogy ellenőrizze az összes elérhető opciót. A demonstrációhoz használt REST szolgáltatás itt érhető el a GitHubon.