web-dev-qa-db-fra.com

Script Gradle Pour appeler un service Web REST sans plugins tiers, pointeurs?

Salut, je dois appeler un service REST dans le cadre du buildscript (Gradle) sans plugins tiers, comment pourrais-je utiliser Groovy pour le faire?

(Ma première tentative)

repositories {
    mavenCentral()
}
      dependencies {  
            complie "org.codehaus.groovy.modules.http-builder:http-builder:0.5.2"  
    }  

task hello {
    def http = new HTTPBuilder("http://myserver.com:8983/solr/select?q=*&wt=json")
    http.auth.basic 'username', 'password'
    http.request(GET, JSON ) { req ->
    }
}
24
user2599381

La façon la plus simple d'appeler REST depuis groovy sans bibliothèques externes est d'exécuter CURL. Voici un exemple d'appel d'Artifactory, de récupération de JSON et d'analyse:

import groovy.json.JsonSlurper

task hello {
    def p = ['curl', '-u', '"admin:password"', "\"http://localhost:8081/api/storage/libs-release-local?list&deep=1\""].execute()
    def json = new JsonSlurper().parseText(p.text)
}
13
JBaruch

Tu ne peux pas juste faire

new URL( 'http://username:[email protected]:8983/solr/select?q=*&wt=json' ).text
18
tim_yates

ça marche les gars

import Java.io.*
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.EncoderRegistry
import static groovyx.net.http.Method.*
import static groovyx.net.http.ContentType.*

buildscript {
    repositories {
        mavenCentral()
    }   
    dependencies {
        classpath 'org.codehaus.groovy.modules.http-builder:http-builder:0.5.2'
    }   
}

task hello {
    def http = new groovyx.net.http.HTTPBuilder("http://local.com:8983/solr/update/json")

    http.request(POST, JSON ) { req ->
        req.body{

        }
        response.success = { resp, reader ->
            println "$resp.statusLine   Respond rec"

        }
    }
}
12
user2599381

J'utilise JsonSlurper il semble assez simple et indépendant du système d'exploitation:

import groovy.json.JsonSlurper

String url = "http://<SONAR_URL>/api/qualitygates/project_status?projectKey=first"
def json = new JsonSlurper().parseText(url.toURL().text)
print json['projectStatus']['status']
7
Zsolt

Cette question se classe si bien sur les moteurs de recherche que je continue à y trébucher.

Cependant, comme d'autres l'ont fait remarquer, je n'aime pas vraiment la réponse acceptée car elle repose sur la boucle.

Voici donc un exemple complet sans prérequis (pas de plugin, pas de boucle, ...):

import groovy.json.JsonSlurper
import groovy.json.JsonOutput
task getExample {
    doLast {
        def req = new URL('https://jsonplaceholder.typicode.com/posts/1').openConnection()
        logger.quiet "Status code: ${req.getResponseCode()}"
        def resp = new JsonSlurper().parseText(req.getInputStream().getText())
        logger.quiet "Response: ${resp}"
    }
}
task postExample {
    doLast {
        def body = [title: "foo", body: "bar", userId: 1]
        def req = new URL('https://jsonplaceholder.typicode.com/posts').openConnection()
        req.setRequestMethod("POST")
        req.setRequestProperty("Content-Type", "application/json; charset=UTF-8")
        req.setDoOutput(true)
        req.getOutputStream().write(JsonOutput.toJson(body).getBytes("UTF-8"))
        logger.quiet "Status code: ${req.getResponseCode()}" // HTTP request done on first read
        def resp = new JsonSlurper().parseText(req.getInputStream().getText())
        logger.quiet "Response: ${resp}"
    }
}

Vous pouvez l'exécuter sur votre box car ils utilisent une API de développement publique.

1
Yann Vo