4

私のプロジェクトでは、REST API の作成に Maven、Jetty、Swagger、Java、および Jersey を使用しています。また、Swagger を使用して、API の見栄えの良いドキュメントを作成しています。

3つの問題ではなく、ほとんどすべてが問題ありません。最初に - これは私の web.xml です

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <display-name>Restful Web Application</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>

        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.pjdb.rest;com.wordnik.swagger.jaxrs;</param-value>
        </init-param>

        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>

        <init-param>
            <param-name>api.version</param-name>
            <param-value>1.0</param-value>
        </init-param>

        <init-param>
            <param-name>swagger.api.basepath</param-name>
            <param-value>http://localhost:8080/rest</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>Bootstrap</servlet-name>
        <servlet-class>com.pjdb.rest.Bootstrap</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>ApiOriginFilter</filter-name>
        <filter-class>com.pjdb.rest.utils.ApiOriginFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>ApiOriginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

1) listnig の先頭から api-docs を削除するにはどうすればよいですか?

{
  "apiVersion": "1.0",
  "swaggerVersion": "1.1",
  "basePath": "http://localhost:8080/rest",
  "apis": [
    {
      "path": "/api-docs/resources",
      "description": ""
    },
    {
      "path": "/api-docs/employee",
      "description": ""
    }
  ]
}

そして、パスの先頭にある /api-docs を削除したい..

2) API から「/api-docs/resources」を削除するにはどうすればよいですか? 「リソース」ではなく、「従業員」クラスのみを使用します。

3) 入力http://localhost:8080/rest/api-docs/employeeすると、メソッドと空の「/」メイン URL が表示されます。削除できますか?

私は多くの構成を試しました。私は何かを逃したのですか?

4

2 に答える 2

2

私はこの方法でこれを解決しました:

  1. Swagger によって生成された api-docs.json をハード ドライブに保存します。
  2. 生成された JSON を必要に応じて編集します
  3. このファイルをコピーします~/src/main/webapp/swagger-ui/api-docs.json
  4. あなたのディレクトリのhttp://localhost:8080/swagger-ui/api-docs.jsondiscoveryUrlパスに入れindex.htmlます/swagger-ui

この方法は、何か変更があった場合はメインのリストを自分で変更する必要がありますが、安全で機能するソリューションです。

私の api-docs.json は次のようになります。

{
    "apiVersion": "1.0",
    "swaggerVersion": "1.1",
    "basePath": "http://localhost:8080/rest",
    "apis": [
        {
            "path": "/api-docs.json/employee",
            "description": ""
        }
    ]
}

swagger-ui/index.html設定

<script type="text/javascript">
    $(function () {
        window.swaggerUi = new SwaggerUi({
            discoveryUrl:"http://localhost:8080/swagger-ui/api-docs.json",
            apiKey:"special-key",
            dom_id:"swagger-ui-container",
            supportHeaderParams: false,
            supportedSubmitMethods: ['get', 'post', 'put'],
            onComplete: function(swaggerApi, swaggerUi){
                if(console) {
                    console.log("Loaded SwaggerUI")
                    console.log(swaggerApi);
                    console.log(swaggerUi);
                }
              $('pre code').each(function(i, e) {hljs.highlightBlock(e)});
            },
            onFailure: function(data) {
                if(console) {
                    console.log("Unable to Load SwaggerUI");
                    console.log(data);
                }
            },
            docExpansion: "none"
        });

        window.swaggerUi.load();
    });

</script>
于 2013-01-10T19:10:47.363 に答える
2

私は Swagger の専門家ではありませんが、3 つの質問すべてに答えようと思います。また、IRC で Swagger 開発者と話すこともお勧めします。彼らは非常に迅速に対応してくれます。手動で更新する必要がないように、Swagger を「自動的に」動作させる価値があると思います。

1) リスティング パスでapi-docsを削除したくない場合 - リスティングに何らかの一意の名前が必要な場合。api-docsである必要はありません。たとえば、私はリソースを使用していますが、Swagger で実際の REST リソースとその説明を区別するために、ある種のプレフィックスが必要になります。ですから、これはまったく問題ではないと思います。

2)おそらくApiResourceListingと呼ばれるcom.wordnik.swagger.jaxrs.JavaApiListingを拡張するクラスがありましたか。ここで、Swagger ドキュメントへのエントリ ポイントを決定します。/resourcesを指しているこのような追加のクラスがあったのではないでしょうか? (これはimport com.wordnik.swagger.jaxrs.listing.ApiListingの拡張である可能性もあります。これは、REST アドレスで形式サフィックスを使用していない場合に使用するものです。

3) 私はこれについて知りません。最初に言ったように、IRC またはGoogle グループで Swagger の人に聞いてみてください。

4) この回答は Swagger 1.2 に関連しています。最近この質問に遭遇した場合は、バージョン 1.3 用に更新されたSwagger Jax-RS チュートリアルを確認することをお勧めします。

于 2013-02-05T17:44:50.523 に答える