Rövid útmutató a Web Services használatához Groovy-ban

1. Áttekintés

Manapság számos módszert látunk arra, hogy egy alkalmazás az interneten keresztül tegye közzé az adatokat.

Az alkalmazás gyakran SOAP vagy REST webszolgáltatást használ az API-k kiszolgáltatásához. Vannak azonban olyan streamelési protokollok, mint az RSS és az Atom.

Ebben a gyors bemutatóban néhány praktikus módszert tárunk fel a Groovy-i webszolgáltatásokkal való együttműködésre az egyes protokollokhoz.

2. Végezze el a HTTP kéréseket

Először hajtsunk végre egy egyszerű HTTP GET kérést a URL osztály. Felfedezésünk során a Postman Echo API-kat fogyasztjuk.

Először felhívjuk a openConnection módszere URL osztályt, majd állítsa be a requestMethod GET:

def postmanGet = új URL ('// postman-echo.com/get') def getConnection = postmanGet.openConnection () getConnection.requestMethod = 'GET' állítás getConnection.responseCode == 200

Hasonlóképpen POST kérést is tehetünk a requestMethod Hozzászólás:

def postmanPost = új URL ('// postman-echo.com/post') def postConnection = postmanPost.openConnection () postConnection.requestMethod = 'POST' állítás postConnection.responseCode == 200

Továbbá átadhatjuk a paramétereket a POST kérelemnek a outputStream.withWriter:

def form = "param1 = Ez a kérelem paraméter." postConnection.doOutput = true def szöveg postConnection.with {outputStream.withWriter {outputStreamWriter -> outputStreamWriter << forma} text = content.text} állítás postConnection.responseCode == 200

Itt, Groovyé val vel a bezárás elég praktikusnak tűnik, és tisztábbá teszi a kódot.

Használjuk a JsonSlurper elemezni a Húr válasz a JSON-ra:

JsonSlurper jsonSlurper = új JsonSlurper () állítja, hogy jsonSlurper.parseText (szöveg) ?. json.param1 == "Ez a kérelem paramétere."

3. RSS és Atom hírcsatornák

Az RSS és az Atom hírcsatorna gyakran használják az internetes tartalmak, például hírek, blogok és technikai fórumok közzétételét.

Mindkét feed XML formátumú. Ezért használhatjuk a Groovy-t XMLParser osztály a tartalom elemzéséhez.

Olvassunk el néhány kiemelt történetet a Google Hírekből RSS-hírcsatornájukat felhasználva:

def rssFeed = new XmlParser () .parse ("// news.google.com/rss?hl=en-US&gl=US&ceid=US:en") def stories = [] (0..4) .each {def item = rssFeed.channel.item.get (it) történetek << item.title.text ()} állítanak történeteket.size () == 5

Hasonlóképpen olvashatjuk az Atom hírcsatornákat is. Mindkét protokoll specifikációinak eltérése miatt azonban az Atom-hírcsatornákban eltérően fogjuk elérni a tartalmat:

def atomFeed = new XmlParser () .parse ("// news.google.com/atom?hl=en-US&gl=US&ceid=US:en") def stories = [] (0..4) .each {def entry = atomFeed.entry.get (it) történetek << entry.title.text ()} állítanak történeteket.size () == 5

Azt is megértettük, hogy a Groovy támogatja az összes Java-könyvtár használatát a Groovy-ban. Ezért biztosan használhatjuk a Róma API-t az RSS-hírcsatornák elolvasásához.

4. SOAP kérés és válasz

A SOAP az egyik legnépszerűbb webszolgáltatási protokoll, amelyet az alkalmazások használnak szolgáltatásaik interneten történő bemutatására.

A groovy-wslite könyvtár segítségével fogjuk felhasználni a SOAP API-kat. Tegyük hozzá legújabb függőségünket a miénkhez pom.xml:

 com.github.groovy-wslite groovy-wslite 1.1.3 

Alternatív megoldásként hozzáadhatjuk a legújabb függőséget a Gradle használatával:

fordítási csoport: 'com.github.groovy-wslite', név: 'groovy-wslite', verzió: '1.1.3'

Vagy ha Groovy-forgatókönyvet akarunk írni. Közvetlenül hozzáadhatjuk a @Megragad:

@Grab (group = 'com.github.groovy-wslite', modul = "groovy-wslite", verzió = "1.1.3")

A groovy-wslite könyvtár biztosítja a SOAPClient osztály a SOAP API-kkal való kommunikációhoz. Ugyanakkor megvan a SOAPMessageBuilder osztály a kérelem üzenet létrehozásához.

Fogyasszunk egy számkonverziós SOAP szolgáltatást a 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 szavak = response.NumberToWordsResponse szavak állítása == "százhuszonhárom"

5. REST kérés és válasz

A REST egy másik népszerű építészeti stílus, amelyet webszolgáltatások létrehozására használnak. Ezenkívül az API-k olyan HTTP módszerek alapján vannak kitéve, mint a GET, POST, PUT és DELETE.

5.1. KAP

A REST API-k fogyasztásához a már tárgyalt groovy-wslite könyvtárat fogjuk használni. Ez biztosítja a RESTClient osztály a problémamentes kommunikációhoz.

Tegyen egy GET kérést a már tárgyalt Postman API-hoz:

RESTClient kliens = új RESTClient ("// postman-echo.com") def elérési út = "/ get" def válasz próbálkozás {response = client.get (elérési út: elérési út) assert response.statusCode = 200 érvényesítés response.json? .Fejek ? .host == "postman-echo.com"} elkapás (RESTClientException e) {állítás e? .response? .statusCode! = 200}

5.2. POST

Most küldjünk POST kérést a Postman API-hoz. Ugyanakkor JSON formában továbbítjuk az űrlapparamétereket:

client.defaultAcceptHeader = ContentType.JSON def path = "/ post" def params = ["foo": 1, "bar": 2] def response = client.post (elérési út: elérési út) {type ContentType.JSON json params} állítás válasz.json? .adatok == paraméterek 

Itt a JSON-t állítottuk be alapértelmezett elfogadó fejlécként.

6. A Web Service hitelesítése

Az egyre növekvő mennyiségű webes szolgáltatás és alkalmazás kommunikál egymással, ezért ajánlott egy biztonságos webszolgáltatás.

Ennek eredményeként fontos a HTTPS és egy olyan hitelesítési mechanizmus kombinációja, mint az alap hitelesítés és az OAuth.

Ezért egy alkalmazásnak hitelesítenie kell magát, miközben webszolgáltatási API-t fogyaszt.

6.1. Alapszintű hitelesítés

Használhatjuk a már tárgyaltakat RESTClient osztály. Használjuk a HTTPBasicAuthorization osztály hitelesítő adatokkal az alap hitelesítés végrehajtásához:

def elérési út = "/ basic-auth" client.authorization = új HTTPBasicAuthorization ("postás", "jelszó") response = client.get (elérési út: elérési út) assert response.statusCode == 200 érvényesítés válasz.json? .authenticated == igaz

Alternatív megoldásként közvetlenül átadhatjuk a hitelesítő adatokat (Base64 kódolású) a fejlécek paraméter:

def válasz = kliens .get (elérési út: elérési út, fejlécek: ["Engedélyezés": "Alapvető cG9zdG1hbjpwYXNzd29yZA =="])

6.2. OAuth 1.0

Ehhez hasonlóan tehetünk egy OAuth 1.0 kérést, amely átadja az auth paramétereket, például a fogyasztói kulcsot és a fogyasztói titkot.

Mivel azonban nincs beépített támogatásunk az OAuth 1.0-hoz, mint a többi mechanizmushoz, a munkát magunknak kell elvégeznünk:

def path = "/ oauth1" def params = [oauth_consumer_key: "RKCGzna7bv9YD57c", oauth_signature_method: "HMAC-SHA1", oauth_timestamp: 1567089944, oauth_nonce: "URT7vv" Rtg = new RESTClient ("// postman-echo.com") .get (elérési út: elérési út, lekérdezés: paraméterek) assert response.statusCode == 200 assert response.statusMessage == "OK" assert response.json.status == " passz

7. Következtetés

Ebben az oktatóanyagban néhány hasznos módszert tártunk fel webszolgáltatásokkal dolgozni Groovy-ban.

Ugyanakkor láttunk egy egyszerű módszert egy RSS vagy Atom hírcsatorna olvasására.

Szokás szerint a kód implementációi elérhetők a GitHubon.