Теперь, когда я установил и запустил чрезвычайно простое приложение 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, хотя …