2016-07-08 9 views
0

Ich versuche, eine akka-http API mit swagger & swagger-akka-http zu dokumentieren. This blog post gab mir einen guten Start, aber jetzt bin ich stecken, versuchen, die Tatsache zu dokumentieren, dass die API grundlegende Auth verwendet.So verwenden Sie Swagger mit akka-http & basic auth

, was ich habe ist:

@Path("/foo") 
@Api(value = "/foo", produces = "application/json") 
class FooService ... 

@ApiOperation(value = "Get list of all foos", nickname = "getAllFoos", httpMethod = "GET", 
response = classOf[Foo], responseContainer = "Set") 
def getAll: Route = get {... 

Dies erzeugt eine json, die ich in der Prahlerei UI anzeigen können. Allerdings kann ich die generierten Beispiele nicht verwenden, da die Auth-Option fehlt.

securityDefinitions: 
    basicAuth: 
    type: basic 
    description: HTTP Basic Authentication. 

aber ich habe nicht ein:

Ich habe keine Beispiele mit Prahlerei-akka-http, nur einige mit yaml Config

In einem yaml, dies könnte wie folgt aussehen gefunden yaml. Ich habe auch keine Kontrolle über das erzeugte .json außer durch die Anmerkungen.

IIUC, der richtige Ort, um die Auth-Methode zu erwähnen, ist der authorizations Parameter der Api oder ApiOperation Annotationen. Dieser Parameter sollte ein Array von Authorization Annotationen enthalten.

Das value Attribut jeder ist Authorization Annotation ein SecurityDefinitionObject

Aber ich habe keine Ahnung, wie definieren Sie diese SecurityDefinitionObject mit Anmerkungen verweisen soll.

Die Annotation Authorization soll nicht eigenständig verwendet werden und wird ignoriert, wenn dies der Fall ist.

Gibt es etwas, das ich verpasst habe? Brauche ich eine zusätzliche Datei yaml oder json mit zusätzlichen Deklarationen und wo gebe ich es an, wenn ich das tue? Etwas viel mehr?

Danke

EDIT

Mit dem 0.7.2-SNAPSHOT, die BasicAuth Array erzeugt liegen diese wird:

paths: { 
    /foos: { 
     get: { 
     security: [ 
      { 
      basicAuth: [ ] 
      } 
     ], 

Nun ist die einzige Frage ist die Prahlerei zu erhalten UI, um es richtig zu interpretieren und die Auth in den Beispielen zu verwenden. AFAIK, wenn Sie grundlegende Authentifizierung in der Benutzeroberfläche benötigen, müssen Sie es selbst hinzufügen, wie es beschrieben wird here

Antwort

1

Ich derzeit pflegen swagger-akka-http.

Der Code ist so ziemlich ein dünner Wrapper um swagger.io Code-Basis.

Die Anmerkungen @Api und @ApiOperation unterstützen einen Autorisierungsparameter.

https://github.com/swagger-api/swagger-core/blob/master/modules/swagger-annotations/src/main/java/io/swagger/annotations/Api.java

@Api(value = "/myApi", description = "My API", produces = "application/json", 
authorizations=Array(new Authorization(value="basicAuth"))) 

Ich habe noch nie diese Funktionalität verwendet, aber vielleicht könnten Sie es ausprobieren.

+0

Ich denke, ich sehe, was Sie sehen, dass @ Api Autorisierungen Wert nicht aus dem Swagger Json kommen. Ich habe mir die io.swagger.jaxrs.Reader-Klasse angeschaut und es sieht so aus, als könnte sie liefern, was benötigt wird. Ich kann das Hinzufügen von Unterstützung wie die vorhandene Info-Objektunterstützung für die SwaggerDocService-Klasse in swagger-akka-http untersuchen. –

+0

https://github.com/pjfanning/swagger-akka-http-sample/tree/api-authorizations hat eine Modifikation, die eine @Api Annotation mit einer Autorisierung demonstriert und die im Swagger-JSON ausgegeben wird (http: // localhost : 12345/api-docs/swagger.json). '" security ": [{ " basicAuth ": [] }],' –

+0

Ich habe eine 0.7.2-SNAPSHOT-Version von swagger-akka-http erstellt, die das Setzen von Sicherheitsdefinitionen unterstützt - https://github.com/pjfanning/swagger-akka-http-Beispiel/Baum/Sicherheit-Definitionen zeigt die Verwendung in einem Beispiel –