Test en REST API med krøll

1. Oversikt

Denne opplæringen gir en kort oversikt over å teste et REST API ved hjelp av krølle.

krølle er et kommandolinjeverktøy for overføring av data og støtter omtrent 22 protokoller inkludert HTTP. Denne kombinasjonen gjør det til et veldig godt ad hoc-verktøy for å teste REST-tjenestene våre.

2. Kommandolinjealternativer

curl støtter over 200 kommandolinjealternativer. Og vi kan ha null eller flere av dem til å følge URL-en i kommandoen.

Men før vi bruker det til våre formål, la oss ta en titt på to som vil gjøre livene våre enklere.

2.1. Utdypende

Når vi tester, er det en god ide å sette den utførlige modusen på:

krølle -v //www.example.com/

Som et resultat vil kommandoene gi nyttig informasjon som den løste IP-adressen, porten vi prøver å koble til og topptekstene.

2.2. Produksjon

Som standard sender krøllen responsdelen til standardutgangen. Eventuelt kan vi tilby utdataalternativet for å lagre i en fil:

krølle -o out.json //www.example.com/index.html

Dette er spesielt nyttig når responsstørrelsen er stor.

3. HTTP-metoder med krølling

Hver HTTP-forespørsel inneholder en metode. De mest brukte metodene er GET, POST, PUT og DELETE.

3.1. FÅ

Dette er standardmetoden når du foretar HTTP-anrop med krølling. Faktisk var eksemplene som er vist tidligere, vanlige GET-samtaler.

Mens du kjører en lokal forekomst av en tjeneste i port 8082, vil vi bruke noe som denne kommandoen til å ringe:

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

Og siden vi har den verbose modusen på, vil vi få litt mer informasjon sammen med responsorganet:

* Prøver :: 1 ... * TCP_NODELAY satt * Koblet til localhost (:: 1) port 8082 (# 0)> GET / spring-rest / foos / 9 HTTP / 1.1> Vert: localhost: 8082> User-Agent: curl / 7.60.0> Godta: * / *> <HTTP / 1.1 200 <X-Application-Context: application: 8082 <Content-Type: application / json; charset = UTF-8 <Transfer-Encoding: chunked <Date: Sun, 15. Jul 2018 11:55:26 GMT <{"id": 9, "name": "TuwJ"} * Tilkobling nr. 0 for å være vert for lokal vert intakt

3.2. POST

Vi bruker denne metoden for å sende data til en mottakertjeneste. Og for det bruker vi dataalternativet.

Den enkleste måten å gjøre dette på er å legge inn dataene i kommandoen:

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

eller send en fil som inneholder forespørselsteksten til dataalternativet slik:

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

Ved å bruke de ovennevnte kommandoene som de er, kan vi komme inn på feilmeldinger som følgende:

{"tidsstempel": "15-07-2018 05:57", "status": 415, "error": "Ikke støttet medietype", "unntak": "org.springframework.web.HttpMediaTypeNotSupportedException", "melding": "Content type 'application / x-www-form-urlencoded; charset = UTF-8' støttes ikke", "path": "/ spring-rest / foos / new"}

Dette er fordi curl legger til følgende standard overskrift i alle POST-forespørsler:

Innholdstype: applikasjon / x-www-form-urlencoded

Dette er også hva nettleserne bruker i en vanlig POST. I vårt bruk vil vi vanligvis tilpasse topptekstene avhengig av våre behov.

For eksempel, hvis tjenesten vår forventer json innholdstype, kan vi bruke alternativet -H til å endre vår opprinnelige POST-forespørsel:

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

Windows ledetekst har ingen støtte for enkelt anførselstegn som Unix-lignende skall.

Som et resultat vil vi trenge å erstatte de enkelte anførselstegnene med doble anførselstegn; unnslippe dem der det er nødvendig:

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

Dessuten, når vi vil sende en noe større mengde data, er det vanligvis en god ide å bruke en datafil.

3.3. SETTE

Denne metoden er veldig lik POST. Men vi bruker den når vi vil sende en ny versjon av en eksisterende ressurs. For å gjøre dette bruker vi alternativet -X.

Uten noen omtale av en forespørselmetodetype er krøll som standard bruk av GET. Derfor nevner vi eksplisitt metoden i tilfelle PUT:

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

3.4. SLETT

Igjen spesifiserer vi at vi vil bruke SLETT ved å bruke alternativet -X:

krøll -X SLETT // localhost: 8082 / spring-rest / foos / 9

4. Egendefinerte overskrifter

Vi kan erstatte standard overskrifter eller legge til våre egne overskrifter.

For eksempel, for å endre Host-overskriften, gjør vi dette:

krøll -H "Vert: com.baeldung" //eksempel.com/

For å slå av User-Agent-overskriften setter vi inn en tom verdi:

krølle -H "Brukeragent:" //eksempel.com/

Det vanligste scenariet under testing er å endre innholdstypen og godta overskriften. Vi må bare prefikse hver topptekst med alternativet -H:

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

5. Autentisering

En tjeneste som krever godkjenning, vil sende tilbake en 401 - Uautorisert HTTP-svarskode og en tilhørende WWW-Authenticate-overskrift.

For grunnleggende autentisering kan vi bare legg inn brukernavn og passordkombinasjon i forespørselen vår ved å bruke brukeralternativet:

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

Imidlertid, hvis vi ønsker å bruke OAuth2 for autentisering, må vi først få tilgangstoken fra autorisasjonstjenesten vår.

Tjenestesvaret vil inneholde tilgangstoken:

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

Nå kan vi bruke tokenet i autorisasjonsoverskriften:

krøll -H "Autorisasjon: bærer b1094abc0-54a4-3eab-7213-877142c33fh3" //eksempel.com/

6. Konklusjon

Vi så på bruk av minimum-funksjonaliteten til curl for å teste våre REST-tjenester. Selv om det kan gjøre mye mer enn det som er diskutert her, for vårt formål, bør dette mye være tilstrekkelig.

Skriv gjerne curl -h på kommandolinjen for å sjekke ut alle tilgjengelige alternativer. REST-tjenesten som brukes til demonstrasjonen er tilgjengelig her på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found