2017-05-16 4 views
0

Ich bin neu zu Swagger und ich möchte Swagger zu Restful API-Projekt mit Grails Framework integrieren. Bitte helfen Sie, wenn jemand eine Ahnung hat, was ich falsch mache?Swagger Grails Integration

meine Grails Spezifikation als unten:

| Grails Version: 3.0.7 
    | Groovy Version: 2.4.4 
    | JVM Version: 1.8.0_71 

Haben einige Einstellungen für Prahlerei, wie unten:

in build.gradle:

dependencies { 
     ... 
     compile "io.swagger:swagger-core:1.5.3" 
     compile "io.swagger:swagger-jaxrs:1.5.3" 
     ... 
    } 

in resources.groovy

import io.swagger.jaxrs.config.BeanConfig 
    beans = { 
     swaggerConfig(BeanConfig) { 
      def serverUrl = "http://localhost:8080/" 
      def hostName = "localhost:8080" 
      resourcePackage = "grails.rest.example" 
      host = hostName 
      basePath = "/api" 
      version = 'v0' // Default "1". 
      title = 'Core Registration API, Version V0' 
      description = 'API for Accessing secured resources' 
      contact = '[email protected]' 
      license = '' 
      licenseUrl = '' 
     } 

     corsFilter(CorsFilter) 
    } 
package grails.rest.example.apidoc 

    import grails.web.mapping.LinkGenerator 

    class ApiDocController { 
     LinkGenerator grailsLinkGenerator 
     def apiDocService 
     def index = { 
      String basePath = grailsLinkGenerator.serverBaseURL 
      render(view: 'index', model: [apiDocsPath: "${basePath}/api/swagger-json"]) 
      //render(view: 'index', model: [apiDocsPath: "localhost:8080/api/swagger-json"]) 
      //render(view: 'index', model: [apiDocsPath: "localhost:8080/dist/index.html"]) 

     } 
     def swaggerJson = { 
      render apiDocService.generateJSON() 
     } 
    } 

Added a UrlMapping für Controller:

"/api/info"(controller: 'ApiDoc') 
    "/"(controller: 'Index') 
    "500"(controller: 'InternalServerError') 
    "404"(controller: 'NotFound') 

Added a Service ApiDocService.groovy:

//package com.care.apidoc 
    package grails.rest.example.apidoc 

    import io.swagger.jaxrs.config.BeanConfig 
    import grails.transaction.Transactional 
    import io.swagger.util.Json 

    @Transactional 
    class ApiDocService { 

     def swaggerConfig 

     /* 
     * generates SWAGGer JSON 
     */ 
     def generateJSON() { 

      String[] schemes = ["http"] as String[] 
      swaggerConfig.setSchemes(schemes) 
      swaggerConfig.setScan(true) 
      def swagger = swaggerConfig.getSwagger() 

      Json.mapper().writeValueAsString(swagger); 
     } 
    } 

hinzugefügt Swagger-ui in src/maineinen Regler ApiDocController.groovy Hinzugefügt/webapp/dist Ordner

with a working customised API URL "http://localhost:8080/api/orders" in index.html 

hinzugefügt CorsFilter Einstellung in src/main/groovy/CorsFilter.groovy

import org.springframework.web.filter.OncePerRequestFilter 
    import javax.annotation.Priority 
    import javax.servlet.FilterChain 
    import javax.servlet.ServletException 
    import javax.servlet.http.HttpServletRequest 
    import javax.servlet.http.HttpServletResponse 

    @Priority(Integer.MIN_VALUE) 
    public class CorsFilter extends OncePerRequestFilter { 

     public CorsFilter() { } 

     @Override 
     protected void doFilterInternal(HttpServletRequest req, HttpServletResponse resp, FilterChain chain) 
     throws ServletException, IOException { 

      String origin = req.getHeader("Origin"); 

      boolean options = "OPTIONS".equals(req.getMethod()); 
      resp.addHeader("Access-Control-Allow-Headers", "origin, authorization, accept, content-type, x-requested-with"); 
      resp.addHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS"); 
      resp.addHeader("Access-Control-Max-Age", "3600"); 

      resp.addHeader("Access-Control-Allow-Origin", origin == null ? "*" : origin); 
      resp.addHeader("Access-Control-Allow-Credentials", "true"); 

      if (!options) chain.doFilter(req, resp); 
     } 
    } 

auf dem Server zu starten. API für Bestellungen funktioniert jedoch korrekt, wenn ich versuche, die API in Swagger UI-Indexdatei zu laden. es zeigt. Keine Operationen in den Spezifikationen definiert!

wie in einem Bilder angehängt. enter image description here enter image description here

+1

Ist http: // localhost: 8080/api/bestellt den Endpunkt, der die Swagger-Spezifikation liefert? denn aus der Sicht der Dinge ist das nur der Endpunkt eines bestimmten Weges ...Sie müssen den Swagger-Spezifikations-JSON in swagger-ui laden. Es wird nicht automatisch Ihre API oder irgendetwas entdecken. – Doqnach

+0

Welchen Installationsleitfaden haben Sie verfolgt? Sie sehen viel komplizierter aus als die in https://rahulsom.github.io/swaggydoc/guide/installation.html – JJHolloway

+0

jetzt habe ich das Projekt mit https://rahulsom.github.io/swaggydoc/guide/ aktualisiert installation.html Anleitung. es funktioniert gut. Sie müssen jedoch im Vergleich zu Springfox mehr Kommentare zu Controllern hinzufügen. –

Antwort

1

Haben Sie bei springfox geschaut?

Hier ist ein sample Grails Application in Heroku gehostet, die die Fähigkeiten von springfox Integration mit ihm zeigt die Service-Beschreibung in der Open API-Spezifikation 2.0 (fka Prahlerei) zu erzeugen. Der Quellcode für die Demo lautet available here.

Sie können diese Live-Demo hier sehen, die die Open-API-Spezifikation demonstriert, die von der Anwendung grails generiert und mit Hilfe von swagger-ui gerendert wurde.

Die Bibliothek, die dies ermöglicht, ist springfox-grails-integration library. Es wird bald veröffentlicht werden und benötigt wahrscheinlich ein bisschen Arbeit, um es zu einem Grails-Plugin zu machen. Es gibt einige preliminary documentation von, wie dieses Bibliotheksrepository zu konfigurieren ist.

HINWEIS: Dies funktioniert nur mit Grails 3.x

Auch war es eine bemerkenswerte Bibliothek im SHOW US YOUR GRAILS Wettbewerb präsentiert. Feedback zur Verbesserung dieser Bibliothek wird sehr geschätzt.

+0

Ja, ich habe das gesehen. Danke, Dilip, für deine Hilfe. Bitte sagen Sie mir, dass das Springfox kompatibel mit Grails 3.0.1 ist? –

+0

Fehler beim SpringFox Kompilieren \t \t grails run-app --stacktrace \t \t | Fehler beim Ausführen von Grails CLI: Kein Profil für Name [Rest-Api] gefunden. (HINWEIS: Stack-Trace wurde gefiltert. Verwenden Sie --verbose, um den gesamten Trace anzuzeigen.) \t \t java.lang.IllegalStateException: Es wurde kein Profil für name [rest-api] gefunden. \t \t \t bei org.grails.cli.GrailsCli.initializeProfile (GrailsCli.groovy: 354) \t \t \t bei org.grails.cli.GrailsCli.execute (GrailsCli.groovy: 196) \t \t \t bei org.grails .cli.GrailsCli.main (GrailsCli.groovy: 99) –

+0

@AtifHussain das Rest-api-Profil ist nur verfügbar post 3.1 aber eine normale Grails 3-Anwendung sollte von der Box sowie –

Verwandte Themen