web-dev-qa-db-ja.com

生成方法Java swaggerのクライアントコードREST= APIドキュメント

私のシナリオは次のとおりです。

私はswagger .jsonを持っています。例: http://petstore.swagger.io/v2/swagger.json 生成されたJavaクライアントを使用したいREST上記のAPI:

PetApi petApi = new PetApi();
Pet pet = new Pet;
pet.setName("cica");
pet.setId(1L);
petApi.addPet(pet);
System.out.println(petApi.getById(1L));`

拡張出力:cicaおよび新しいペットはREST API実装に従って格納されます。

次のコマンドを使用して、petstoreのサーバースタブを正常に生成しました。

Java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate
     -i http://petstore.swagger.io/v2/swagger.json
     -l spring-mvc
     -o samples/server/petstore/spring-mvc

しかし、このMavenプロジェクトコードはサーバーコードです。 @RequestMappingにはPetApi.Javaのような注釈があり、WebMvcConfiguration.classもあります。

サーバースタブは必要ありません。 petstore REST API。のクライアントライブラリが必要です。

適切なクライアントライブラリを生成できるツールはありますか?サーバースタブを変更する必要があるので、すべてのモデルが含まれているのですか、それとも単純なspringRestTemplateを使用する必要がありますか?

答えてくれてありがとう!

24
csikos.balint

Swagger Codegenのパラメーター-lに正しい値を使用していないと思います(サーバー側テクノロジーであるspring-mvcを使用します)。値Javaを使用してみてください。

また、Swaggerコンテンツからコードを生成できるツール Restlet Studio があることにも気付くでしょう。 Javaの場合、主にRestletフレームワークに依存していますが、ニーズに合うと思います。

お役に立てばと思います、ティエリー

11

JARを使用する代わりに、 https://generator.swagger.io を使用して、何もインストールせずにオンラインでSDK(Java、Ruby、PHPなど)を生成することもできます。以下に例を示します。

curl -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/Java

そして、ここにサンプル応答があります:

{"code":"1445940806041","link":"https://generator.swagger.io/api/gen/download/1445940806041"}  

その後、リンクから圧縮されたSDKをダウンロードできます。

https://generator.swagger.io の出力のカスタマイズに関するその他のオプションについては、 https://github.com/swagger-api/swagger-codegen#online-を参照してください。ジェネレーター

(Swagger GeneratorはSwagger Codegenプロジェクト(無料のオープンソース)の一部であり、ローカルSwagger Generatorも実行できます)

2017年7月の時点で、Java APIクライアントジェネレーターは、Jersey 1.xおよび2.x、Retrofit 1.xおよび2.x、okhttp、Feign、RESTEasy、RestTemplateのHTTPライブラリをサポートしています。

13
William Cheng

シナリオでは、コマンドは次のようになります。

Java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate
 -i http://petstore.swagger.io/v2/swagger.json
 -l Java
 -o samples/server/petstore/spring-mvc

Swaggerをjaveに変換する他のオプションは次のとおりです。

GitHubプロジェクトでは、swaggerをJavaクライアントまたはサーバーコードに変換するときに使用するライブラリ(jersey、jersey2、okhttp-gsonなど)を決定するのはあなた次第です。 .ioを使用することもできます 使用するライブラリを決定するeditor.swagger.ioの機能強化 を使用して、使用するライブラリを選択することもできます。 swagger.ioオプションは完全に無料ですが、RestletとAPIMATICはフリーミアムです。

10
Huber

おそらく最速で最も簡単な方法:

  1. wget https://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar
  2. Java -jar swagger-codegen-cli-2.2.1.jar generate -l <language> -i <pathOrUrlOfSwaggerSpec>

詳細 こちら

2
zygimantus

@ wing328's answer への愚かな拡張です。

curl -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/Java

このエラーが発生した場合(SSL証明書の問題)

curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

Curlに-kスイッチを追加します。例:

curl -k -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/Java

応答

{"code":"7e542952-5385-4e34-8cf6-6196722fb18b","link":"https://generator.swagger.io/api/gen/download/7e542952-5385-4e34-8cf6-6196722fb18b"}

URLの代わりに完全なSwagger仕様JSONペイロードを送信する

OpenAPI/Swagger仕様へのURLでswaggerUrlを使用する代わりに、仕様でJSONペイロードに仕様を含めることもできます。

{
  "options": {},
  "spec": {
    "swagger": "2.0",
    "info": {
      "version": "1.0.0",
      "title": "Test API"
    },
    ...
  }
}

詳細: 公式ドキュメント

1
so-random-dude