En rask guide til å jobbe med webtjenester i Groovy

1. Oversikt

I dag ser vi en rekke måter å eksponere data fra en applikasjon over nettet.

Ofte bruker applikasjonen en SOAP- eller REST-nettjeneste for å avsløre API-ene sine. Imidlertid er det også streamingprotokoller som RSS og Atom å vurdere.

I denne raske opplæringen vil vi utforske noen nyttige måter å jobbe med webtjenester i Groovy for hver av disse protokollene.

2. Utfør HTTP-forespørsler

Til å begynne med, la oss utføre en enkel HTTP GET-forespørsel ved hjelp av URL klasse. Vi bruker Postman Echo API-ene under utforskingen.

Først vil vi ringe openConnection metoden for URL klasse og deretter sette forespørselMetode å få:

def postmanGet = ny URL ('// postman-echo.com/get') def getConnection = postmanGet.openConnection () getConnection.requestMethod = 'GET' påstå getConnection.responseCode == 200

På samme måte kan vi sende en POST-forespørsel ved å stille inn forespørselMetode å poste:

def postmanPost = ny URL ('// postman-echo.com/post') def postConnection = postmanPost.openConnection () postConnection.requestMethod = 'POST' hevder postConnection.responseCode == 200

Vi kan også overføre parametrene til POST-forespørselen ved hjelp av outputStream.withWriter:

def form = "param1 = Dette er forespørselsparameter." postConnection.doOutput = sann def tekst postConnection.with {outputStream.withWriter {outputStreamWriter -> outputStreamWriter << form} text = content.text} hevder postConnection.responseCode == 200

Her, Groovy's med lukking ser ganske praktisk ut og gjør koden renere.

La oss bruke JsonSlurper å analysere String svar til JSON:

JsonSlurper jsonSlurper = ny JsonSlurper () hevder jsonSlurper.parseText (tekst) ?. json.param1 == "Dette er forespørselsparameter."

3. RSS og Atom Feeds

RSS og Atom-feed er vanlige måter å avsløre innholdet som nyheter, blogger og tekniske fora over nettet.

Begge feeder er også XML-formatert. Derfor kan vi bruke Groovy's XMLParser klasse for å analysere innholdet.

La oss lese noen få topphistorier fra Google Nyheter ved å bruke RSS-feeden deres:

def rssFeed = ny XmlParser () .parse ("// news.google.com/rss?hl=en-US&gl=US&ceid=US:en") def stories = [] (0..4). hver {def-vare = rssFeed.channel.item.get (it) historier << item.title.text ()} hevder stories.size () == 5

På samme måte kan vi lese Atom-feeds. På grunn av variasjonen i spesifikasjonene for begge protokollene får vi imidlertid tilgang til innholdet på en annen måte i Atom-feeder:

def atomFeed = new XmlParser () .parse ("// news.google.com/atom?hl=en-US&gl=US&ceid=US:en") def stories = [] (0..4). hver {def-oppføring = atomFeed.entry.get (it) historier << entry.title.text ()} hevder stories.size () == 5

Vi forstår også at Groovy støtter alle Java-biblioteker som oppmuntres i Groovy. Derfor kan vi sikkert bruke Roma API til å lese RSS-feeds.

4. SOAP-forespørsel og svar

SOAP er en av de mest populære webtjenesteprotokollene som brukes av applikasjoner for å eksponere sine tjenester over nettet.

Vi bruker groovy-wslite-biblioteket til å konsumere SOAP API-ene. La oss legge til den siste avhengigheten til vår pom.xml:

 com.github.groovy-wslite groovy-wslite 1.1.3 

Alternativt kan vi legge til den siste avhengigheten ved å bruke Gradle:

kompilere gruppe: 'com.github.groovy-wslite', navn: 'groovy-wslite', versjon: '1.1.3'

Eller hvis vi vil skrive et Groovy-skript. Vi kan legge det til direkte ved hjelp av @Gripe:

@Grab (group = 'com.github.groovy-wslite', module = "groovy-wslite", versjon = "1.1.3")

Groovy-wslite-biblioteket tilbyr SOAPClient klasse for å kommunisere med SOAP APIer. Samtidig har den SOAPMessageBuilder klasse for å opprette forespørselsmeldingen.

La oss konsumere en SOAP-tjeneste for nummerkonvertering ved hjelp av SOAPClient:

def url = "//www.dataaccess.com/webservicesserver/numberconversion.wso" def soapClient = new SOAPClient (url) def message = new SOAPMessageBuilder (). build ({body {NumberToWords (xmlns: "//www.dataaccess) com / webservicesserver / ") {ubiNum (123)}}) def response = soapClient.send (message.toString ()); def ord = respons.NumberToWordsResponse hevder ord == "hundre og tjuetre"

5. REST-forespørsel og svar

REST er en annen populær arkitektonisk stil som brukes til å lage webtjenester. APIene eksponeres også basert på HTTP-metoder som GET, POST, PUT og DELETE.

5.1. FÅ

Vi bruker det allerede omtalte groovy-wslite-biblioteket til å konsumere REST API-ene. Det gir RESTKlient klasse for problemfri kommunikasjon.

La oss gjøre en GET-forespørsel til den allerede omtalte Postman API:

RESTClient-klient = ny RESTClient ("// postman-echo.com") def path = "/ get" def respons, prøv {response = client.get (path: path) assert response.statusCode = 200 assert response.json? .Headers ? .host == "postman-echo.com"} fangst (RESTClientException e) {påstå e? .respons? .statusCode! = 200}

5.2. POST

La oss nå sende en POST-forespørsel til Postman API. Samtidig vil vi passere skjemaparametrene som JSON:

client.defaultAcceptHeader = ContentType.JSON def path = "/ post" def params = ["foo": 1, "bar": 2] def response = client.post (path: path) {type ContentType.JSON json params} hevder respons.json? .data == params 

Her har vi satt JSON som standard godkjenningshode.

6. Autentisering for Web Service

Med den økende mengden webtjenester og applikasjoner som kommuniserer hverandre, anbefales det å ha en sikker webtjeneste.

Som et resultat, en kombinasjon av HTTPS og en autentiseringsmekanisme som Basic Auth og OAuth er viktig.

Derfor må et program autentisere seg selv mens det bruker et nettjeneste-API.

6.1. Grunnleggende godkjenning

Vi kan bruke det allerede diskuterte RESTKlient klasse. La oss bruke HTTPBasicAuthorization klasse med legitimasjon for å utføre en grunnleggende autentisering:

def path = "/ basic-auth" client.authorization = new HTTPBasicAuthorization ("postman", "password") response = client.get (path: path) assert response.statusCode == 200 assert response.json? .authenticated == ekte

Alternativt kan vi sende legitimasjonen direkte (Base64 kodet) i topptekster parameter:

def response = client .get (path: path, headers: ["Authorization": "Basic cG9zdG1hbjpwYXNzd29yZA =="])

6.2. OAuth 1.0

På samme måte kan vi lage en OAuth 1.0-forespørsel som overfører godkjenningsparametrene som forbrukernøkkel og forbrukerhemmelighet.

Men siden vi ikke har innebygd støtte for OAuth 1.0 som vi gjør for de andre mekanismene, må vi gjøre jobben selv:

def path = "/ oauth1" def params = [oauth_consumer_key: "RKCGzna7bv9YD57c", oauth_signature_method: "HMAC-SHA1", oauth_timestamp: 1567089944, oauth_nonce: "URT7v4", oa = new RESTClient ("// postman-echo.com") .get (path: path, query: params) assert response.statusCode == 200 assert response.statusMessage == "OK" assert response.json.status == " sende"

7. Konklusjon

I denne opplæringen har vi utforsket noen nyttige måter å jobbe med webtjenester i Groovy.

Samtidig har vi sett en enkel måte å lese en RSS- eller Atom-feed.

Som vanlig er kodeimplementeringene tilgjengelig på GitHub.


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