DropwizardでSwagger

ども、ざわです。

今回はSwaggerです。自分はサーバサイドエンジニアなので、フロント担当者にAPI仕様を伝える際に使ったりします。

普段はSpringbootでしか使ったことがなかったのですが、機会があったので、DropwizardでSwaggerやってみます。

pom.xmlの編集

dependenciesに以下を追加。

<dependency>
    <groupId>com.smoketurner</groupId>
    <artifactId>dropwizard-swagger</artifactId>
    <version>1.1.1-1</version>
</dependency>

コンフィグの追加

swaggerの記述を追記します。

package demo.config;

...
import io.federecio.dropwizard.swagger.SwaggerBundleConfiguration;


public class ApplicationConfiguration extends Configuration {

    @JsonProperty("swagger") //追加
    public SwaggerBundleConfiguration swaggerBundleConfiguration; //追加
...

application.ymlの修正

swaggerの設定を追記します。リソースクラスのパッケージをカンマ区切りで記述できるみたいです。

server:
  applicationConnectors:
    - type: http
      port: 8080

logging:
  level: INFO
  appenders:
    - type: console
      timeZone: JST

database:
  (省略)

#追記
swagger:
  resourcePackage: demo.resources

Mainクラスの修正

initialize()にswaggerの設定追加

package demo;

...
import io.federecio.dropwizard.swagger.SwaggerBundle;
import io.federecio.dropwizard.swagger.SwaggerBundleConfiguration;


public class DemoApplication extends Application<ApplicationConfiguration> {
    public static void main(String[] args) throws Exception {
        new DemoApplication().run(args);
    }

    //追記
    @Override
    public void initialize(Bootstrap<ApplicationConfiguration> bootstrap) {
        bootstrap.addBundle(new SwaggerBundle<ApplicationConfiguration>() {
            @Override
            protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(ApplicationConfiguration configuration) {
                return configuration.swaggerBundleConfiguration;
            }
        });
    }

    public void run(ApplicationConfiguration configuration, Environment environment) throws Exception {
        ...//省略
    }
}

リソースクラスの修正

@ApiでURLを、@ApiOperationで説明を定義します。

package demo.resources;


...
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;


@Path("/user")
@Api("/user") //追加
@Produces(MediaType.APPLICATION_JSON)
public class UserResource {

    private UserDAO dao;

    public UserResource(UserDAO dao) {
        this.dao = dao;
    }

    @GET
    @ApiOperation("ユーザ一覧取得") //追加
    public List<User> getAll() {
        return dao.getAll();
    }

    @GET
    @Path("/{id}")
    @ApiOperation("ユーザ取得") //追加
    public User get(@PathParam("id") String id){
        return dao.findById(id);
    }
}

以上です!

実行

上記手順を終えたら実行してhttp://localhost:8080/swaggerにアクセスします。

@Apiをつけたクラスの情報が表示されます!
各APIがどういった値を返却するかがわかりますね。

Try it outを押すとサーバから実際の値を取得できます。

さいごに

いかがでしたでしょうか。APIサーバと画面を別々に作るような場面で、Swaggerを介して意思疎通が捗るのではないでしょうか。
「仕様書を作る時間がない」みたいな時に大変役立ちますね。

サーバサイドエンジニア。オムライスが好物

シェアする

  • このエントリーをはてなブックマークに追加

フォローする