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 ->
}
}
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)
}
Tu ne peux pas juste faire
new URL( 'http://username:[email protected]:8983/solr/select?q=*&wt=json' ).text
ç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"
}
}
}
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']
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.