Grails как выложить на чужой API - PullRequest
5 голосов
/ 27 июня 2011

Я пишу приложение Grails и хочу, чтобы контроллер поразил какой-то другой API POST, а затем использовал ответ для создания страницы, которую видит мой пользователь.Я не могу найти в Google правильные условия, чтобы найти что-нибудь о публикации на другой странице и получении ответа с помощью Grails.Ссылки на учебные пособия или ответы типа «То, что называется ...» очень бы мне понравились.

1 Ответ

8 голосов
/ 27 июня 2011

Похоже, вы интегрируетесь с каким-то веб-сервисом RESTful. Здесь есть клиентский плагин REST, связанный здесь .

Кроме того, это довольно легко сделать без плагина, связанного здесь .

I весьма рекомендуем разрешить вашему контроллеру быть просто контроллером. Абстрагируйте ваш интерфейс с этим внешним сервисом в некоторый класс, такой как OtherApiService или какую-то утилиту. Храните весь код, который связывается с этим внешним сервисом, в одном месте; таким образом, вы можете смоделировать свой компонент интеграции и упростить тестирование везде. Если вы делаете это как службу, у вас есть пространство для расширения, например, в случае, если вы хотите начать хранить некоторые данные из API в своем собственном приложении.

В любом случае, вырезая и публикуя из связанной документации (вторая ссылка), ниже показано, как отправить GET в API и как настроить обработчики для успеха и сбоев, а также как работать с заголовками запросов и параметрами запросов - это должно быть все, что вам нужно.

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0-RC2' )
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*

def http = new HTTPBuilder( 'http://ajax.googleapis.com' )

// perform a GET request, expecting JSON response data
http.request( GET, JSON ) {
  uri.path = '/ajax/services/search/web'
  uri.query = [ v:'1.0', q: 'Calvin and Hobbes' ]

  headers.'User-Agent' = 'Mozilla/5.0 Ubuntu/8.10 Firefox/3.0.4'

  // response handler for a success response code:
  response.success = { resp, json ->
    println resp.statusLine

    // parse the JSON response object:
    json.responseData.results.each {
      println "  ${it.titleNoFormatting} : ${it.visibleUrl}"
    }
  }

  // handler for any failure status code:
  response.failure = { resp ->
    println "Unexpected error: ${resp.statusLine.statusCode} : ${resp.statusLine.reasonPhrase}"
  }
}

Возможно, вы также захотите проверить этот на некоторые хитрые уловки. Есть пример с методом POST.

...