Scala Spray+Swagger, как автоматически генерировать пользовательский интерфейс для вызовов API

Работа над проектом и использование Spray

Хотите добавить Swagger, чтобы получить приятный интерфейс для всех звонков

Найденный :

Проблема в том, что я не могу заставить его работать с моим проектом без документов или

запускать примеры, это как ходить в темноте .... (и отнимать много времени)

кто-нибудь 1 работал с этим и имеет

  • тестовый пример
  • вики-страница
  • любая вещь полезная

Так я могу заставить его работать?

Спасибо!


person Nimrod007    schedule 13.01.2014    source источник
comment
Если вы еще этого не сделали, просмотрите эту тему. Некоторые ссылки на погоню, некоторые возможные альтернативы.   -  person Ed Staub    schedule 14.01.2014


Ответы (3)


Так что я взял удар на этом и заставил его работать. Вы можете ознакомиться с моим репозиторием здесь.

Конечно, это мой блокнот для изучения Спрей, так что кое-что может измениться. Кроме того, это основано на Spray 1.3.0.

Общий смысл того, как заставить это работать, как я понимаю, таков:

  1. У вас есть черты/классы, которые держат ваши маршруты; давайте назовем это «Ресурсом». Каждая из этих черт/классов примерно соответствует «пути» (например, /posts)
  2. В ваших ресурсах вместо прямого использования Spray DSL для создания одного большого маршрута вам нужно иметь один метод для каждой конечной точки (примерно соответствующий «действию» в контроллере Rails или маршруту в Sinatra/Scalatra). Эти методы должны быть аннотированы. Так, например, у вас будут отдельные def postCreate, def postDeletes и т. д. Затем их нужно будет составить отдельно для вашего ресурса.
  3. Вы создаете экземпляр SwaggerHttpService, реализуя необходимые методы (включая Sequence всех трейтов/классов в 1 и Sequence всех ваших ApiModels, которые используются в ваших аннотациях).
  4. Комбинация всех ваших маршрутов (через ваш фактический API и SwaggerHttpService) должна быть передана в метод получения вашего центрального агента маршрутизации, завернутый в runRoute (это актер, который попадает в Boot.scala)

Я считаю, что 1. и 2. необходимы, потому что spray-swagger работает с аннотациями Java, которые не могут быть получены, когда они заключены в непрозрачную функцию (это то, что DSL маршрутизации Spray обычно составляет для вас).

person lloydmeta    schedule 10.03.2014

проект был обновлен вики и информацией об использовании!

Это выглядит многообещающе:

https://github.com/gettyimages/spray-swagger

еще не пробовала, но выглядит хорошо!

person Nimrod007    schedule 13.04.2014

Одна из моих проблем, связанных с распылением чванства, заключается в том, что аннотации затрудняют чтение кода. Любые идеи о том, как сделать код читаемым и при этом использовать преимущества Swagger?

    @Api(value = "/pet", description = "Operations about pets")
trait PetHttpService extends HttpService {

  @ApiOperation(httpMethod = "GET", response = classOf[Pet], value = "Returns a pet based on ID")
  @ApiImplicitParams(Array(
      new ApiImplicitParam(name = "petId", required = false, dataType = "integer", paramType = "path", value = "ID of pet that needs to be fetched")
        ))
  @ApiResponses(Array(
    new ApiResponse(code = 400, message = "Invalid ID Supplied"),
    new ApiResponse(code = 404, message = "Pet not found")))
  def petGetRoute = get { path("pet" / IntNumber) { petId =>
    complete(s"Hello, I'm pet ${petId}!")
    } }
}

Я собираюсь создать трейт с аннотациями и расширить его, чтобы посмотреть, работают ли аннотации. Дайте вам знать, ребята, что происходит!

person babalu    schedule 09.03.2015