Статьи

Доступ к API Heroku REST через рассылку

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

 

От http://jmhofer.johoop.de/?p=238