Теперь, когда я установил и запустил чрезвычайно простое приложение Heroku (см. Мой предыдущий пост ) и не знаю, что с ним делать, следующим логичным шагом для меня было проверить REST API Heroku.
Итак, во-первых, давайте посмотрим документацию REST API …
… но подождите, такого заумного зверя не существует! — Вместо этого мы получаем Ruby-источники клиента Heroku REST . Это нормально для меня, за исключением того, что я не очень хорошо говорю на Ruby. Но не берите в голову, это выглядит достаточно легко.
Давайте посмотрим, что использовать в качестве клиентского API REST в Scala: Рестлет, Джерси или что-то еще? — Нееет! Давайте использовать рассылку . Диспетчер выигрывает соревнования по крутости, если вы спросите меня. Вы увидите ниже, я надеюсь.
Конечно, я буду использовать sbt для создания своего маленького проекта. Мы добавляем следующие две зависимости и покончим с этим:
libraryDependencies ++= Seq( "net.databinder" %% "dispatch-http" % "0.8.5", "net.databinder" %% "dispatch-lift-json" % "0.8.5") }
Теперь давайте импортируем все хорошее:
implicit val formats = DefaultFormats val http = new Http private val user = "*my-heroku-user*" private val password = "*my-heroku-password*" val herokuApi = :/("api.heroku.com", 443).as(user, password) val herokuHeaders = Map( "Accept" -> "application/json", "X-Heroku-Api-Version" -> "2")
Я собираюсь подготовить несколько помощников, а затем мы готовы грохотать:
implicit val formats = DefaultFormats val http = new Http private val user = "*my-heroku-user*" private val password = "*my-heroku-password*" val herokuApi = :/("api.heroku.com", 443).as(user, password) val herokuHeaders = Map( "Accept" -> "application/json", "X-Heroku-Api-Version" -> "2")
Далее мы можем войти, например. В основном это вернет наш API-ключ (хотя я пока не знаю, для чего он нужен, видя всю базовую аутентификацию, которая происходит в клиенте Ruby).
def login = { http(resource(herokuApi / "login") < < Map("username" -> user, "password" -> password) ># (_.extract[User]) ) } def resource(request: Request) = request.secure <: < herokuHeaders
(«<<» И «<: <» выше должны быть «<<» и «<: <», не спрашивайте меня, почему WordPress вставляет пробел каждый раз, когда я сохраняю это сообщение)
Подождите, что пользователь? Я должен определить это, прежде чем выше будет работать. Это просто простой кейс-класс, который будет заполнен Lift-JSON . И когда я уже это сделаю, я также определю класс case для следующего запроса:
case class User( email: String, api_key: String, verified_at: Option[String]) case class HerokuApp( id: Int, name: String, stack: Option[String], requested_stack: Option[String], slug_size: Int, repo_size: Int, dynos: Int, workers: Int, created_at: String, create_status: String, repo_migrate_status: String)
Теперь я могу позвонить в систему и получить что-то вроде этого:
Пользователь (* my-heroku-user *, * my-api-key *, None)
Это весело!
Давайте использовать приведенный выше класс case HerokuApp для запроса наших текущих приложений Heroku:
def apps = http(herokuApi / "apps" ># (_.children map (_.extract[HerokuApp])))
Хм … да, это все, что нужно сделать. Это возвращает удобный список приложений, которые я запускаю в Heroku:
Список (HerokuApp (* my-id *, * my-app-name *, Some (кедр), None, * large-number-1 *, * large-number) -2 *, 0,0,2011 / 10/10 11:52:03 -0700, завершено, завершено))
Это здорово, не правда ли? — Я, по крайней мере, понятия не имел, что подключиться к Heroku из Scala будет очень легко.
Я до сих пор не знаю, что надеть на Heroku, хотя …