開発者ドキュメント

groovy-web-services

GroovyでWebサービスを操作するためのクイックガイド

  • link:/category/programming/ [プログラミング]

  • Groovy

1. 概要

現在、Web経由でアプリケーションによってデータを公開するさまざまな方法があります。
多くの場合、アプリケーションはlink:/spring-boot-soap-web-service[SOAP]またはlink:/building-a-restful-web-service-withを使用します-spring-and-java-based-configuration [REST] WebサービスがAPIを公開します。 ただし、RSSやAtomなどのストリーミングプロトコルも考慮する必要があります。
このクイックチュートリアルでは、これらの各プロトコルについて、https://www.baeldung.com/groovy-language [Groovy]でWebサービスを操作するいくつかの便利な方法を探ります。

2. HTTPリクエストを実行する

まず、https://www.baeldung.com/java-url [_URL_]クラスを使用して簡単なHTTP GETリクエストを実行しましょう。 探索中にhttps://docs.postman-echo.com/?version=latest[Postman Echo] APIを使用します。
最初に、_URL_クラスの_openConnection_メソッドを呼び出し、次に_requestMethod_をGETに設定します。
def postmanGet = new URL('https://postman-echo.com/get')
def getConnection = postmanGet.openConnection()
getConnection.requestMethod = 'GET'
assert getConnection.responseCode == 200
同様に、_requestMethod_をPOSTに設定することでPOSTリクエストを作成できます。
def postmanPost = new URL('https://postman-echo.com/post')
def postConnection = postmanPost.openConnection()
postConnection.requestMethod = 'POST'
assert postConnection.responseCode == 200
また、https://www.baeldung.com/groovy-io#writing [_outputStream.withWriter_]を使用して、POST要求にパラメーターを渡すことができます。
def form = "param1=This is request parameter."
postConnection.doOutput = true
def text
postConnection.with {
    outputStream.withWriter { outputStreamWriter ->
        outputStreamWriter << form
    }
    text = content.text
}
assert postConnection.responseCode == 200
ここで、Groovyの_with_クロージャーは非常に便利に見え、コードをきれいにします。
_JsonSlurper_を使用して、_String_応答をJSONに解析します。
JsonSlurper jsonSlurper = new JsonSlurper()
assert jsonSlurper.parseText(text)?.json.param1 == "This is request parameter."

3. RSSおよびAtomフィード

https://en.wikipedia.org/wiki/RSS[RSS]およびhttps://en.wikipedia.org/wiki/Atom_(Web_standard)[Atom]フィードは、ニュース、ブログなどのコンテンツを公開する一般的な方法です。ウェブ上の技術フォーラム。
また、両方のフィードはXML形式です。 したがって、Groovyのlink:/groovy-xml#xml-parser[_XMLParser_]クラスを使用してコンテンツを解析できます。
RSSフィードを利用してhttps://news.google.com [Googleニュース]からいくつかのトップストーリーを読んでみましょう。
def rssFeed = new XmlParser()
    .parse("https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en")
def stories = []
(0..4).each {
    def item = rssFeed.channel.item.get(it)
    stories << item.title.text()
}
assert stories.size() == 5
同様に、Atomフィードを読むことができます。 ただし、両方のプロトコルの仕様が異なるため、Atomフィードでコンテンツに異なる方法でアクセスします。
def atomFeed = new XmlParser()
    .parse("https://news.google.com/atom?hl=en-US&gl=US&ceid=US:en")
def stories = []
(0..4).each {
    def entry = atomFeed.entry.get(it)
    stories << entry.title.text()
}
assert stories.size() == 5
また、GroovyはすべてのJavaライブラリがGroovyで推奨されていることをサポートしています。 したがって、https://www.baeldung.com/rome-rss [Rome API]を使用してRSSフィードを確実に読み取ることができます。

4. SOAPリクエストとレスポンス

SOAPは、Web上でサービスを公開するためにアプリケーションで使用される最も一般的なWebサービスプロトコルの1つです。
https://github.com/jwagenleitner/groovy-wslite[groovy-wslite]ライブラリを使用して、SOAP APIを使用します。 最新のhttps://mvnrepository.com/artifact/com.github.groovy-wslite/groovy-wslite[dependency]を_pom.xml_に追加しましょう。
<dependency>
    <groupId>com.github.groovy-wslite</groupId>
    <artifactId>groovy-wslite</artifactId>
    <version>1.1.3</version>
</dependency>
または、Gradleを使用して最新の依存関係を追加できます。
compile group: 'com.github.groovy-wslite', name: 'groovy-wslite', version: '1.1.3'
または、Groovyスクリプトを作成する場合。 _ @ Grab_を使用して直接追加できます。
@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='1.1.3')
  • groovy-wsliteライブラリは、SOAP APIと通信する_SOAPClient_クラスを提供します*。 同時に、要求メッセージを作成する_SOAPMessageBuilder_クラスがあります。

    _SOAPClient_を使用してhttp://www.dataaccess.com/webservicesserver/numberconversion.wso [数値変換SOAPサービス]を使用してみましょう。
def url = "http://www.dataaccess.com/webservicesserver/numberconversion.wso"
def soapClient = new SOAPClient(url)
def message = new SOAPMessageBuilder().build({
    body {
        NumberToWords(xmlns: "http://www.dataaccess.com/webservicesserver/") {
            ubiNum(123)
        }
    }
})
def response = soapClient.send(message.toString());
def words = response.NumberToWordsResponse
assert words == "one hundred and twenty three "

5. RESTリクエストとレスポンス

RESTは、Webサービスの作成に使用される別の一般的なアーキテクチャスタイルです。 また、APIはGET、POST、PUT、DELETEなどのHTTPメソッドに基づいて公開されます。

5.1. GET

すでに説明したgroovy-wsliteライブラリを使用して、REST APIを使用します。 *手間のかからない通信のために_RESTClient_クラスを提供します*。
既に説明したPostman APIに対してGETリクエストを作成しましょう。
RESTClient client = new RESTClient("https://postman-echo.com")
def path = "/get"
def response
try {
    response = client.get(path: path)
    assert response.statusCode = 200
    assert response.json?.headers?.host == "postman-echo.com"
} catch (RESTClientException e) {
    assert e?.response?.statusCode != 200
}

5.2. POST

それでは、Postman APIにPOSTリクエストを行ってみましょう。 同時に、フォームパラメータを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
}
assert response.json?.data == params
ここでは、JSONをデフォルトの受け入れヘッダーとして設定しました。

6. Webサービスの認証

Webサービスとアプリケーションが相互に通信する量が増えているため、安全なWebサービスを使用することをお勧めします。
その結果、* HTTPSとBasic AuthやOAuthのような認証メカニズムの組み合わせが重要です*。
したがって、アプリケーションは、WebサービスAPIを使用しながら自身を認証する必要があります。

6.1. 基本認証

すでに説明した__RESTClient __classを使用できます。 _HTTPBasicAuthorization_クラスを資格情報とともに使用して、基本認証を実行しましょう。
def path = "/basic-auth"
client.authorization = new HTTPBasicAuthorization("postman", "password")
response = client.get(path: path)
assert response.statusCode == 200
assert response.json?.authenticated == true
または、_headers_パラメーターで資格情報(Base64エンコード)を直接渡すことができます。
def response = client
.get(path: path, headers: ["Authorization": "Basic cG9zdG1hbjpwYXNzd29yZA=="])

6.2. OAuth 1.0

同様に、コンシューマキーやコンシューマシークレットなどの認証パラメータを渡すOAuth 1.0リクエストを作成できます。
ただし、他のメカニズムとは異なり、OAuth 1.0のサポートは組み込まれていないため、自分で作業を行う必要があります。
def path = "/oauth1"
def params = [oauth_consumer_key: "RKCGzna7bv9YD57c",
    oauth_signature_method: "HMAC-SHA1",
    oauth_timestamp:1567089944, oauth_nonce: "URT7v4", oauth_version: 1.0,
    oauth_signature: 'RGgR/ktDmclkM0ISWaFzebtlO0A=']
def response = new RESTClient("https://postman-echo.com")
    .get(path: path, query: params)
assert response.statusCode == 200
assert response.statusMessage == "OK"
assert response.json.status == "pass"

7. 結論

このチュートリアルでは、GroovyでWebサービスを操作するためのいくつかの便利な方法を検討しました。
同時に、RSSまたはAtomフィードを簡単に読み取る方法を見てきました。
通常どおり、コードの実装はhttps://github.com/eugenp/tutorials/tree/master/core-groovy-2[GitHubで]で入手できます。
モバイルバージョンを終了