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.