要約: プロジェクト開発では、フロントエンドとバックエンドの分離を実現することがよく期待されます。つまり、バックエンド開発者は多くの場合、多数のサービス インターフェイスを出力する必要があります。インターフェイス プロバイダーがJava や PHP などの言語を使用するには、ある程度の費用がかかることが多く、A インターフェイスのアドレス、渡す必要があるパラメーター、戻り値の JSON データ形式、もちろん、HTTP リクエスト ヘッダー、リクエスト コンテンツ、その他の情報も考慮する必要があります。プロジェクトが急速に進行し反復されるにつれて、バックエンドによって出力されるインターフェイスは変更、修復、その他の問題に直面することが多く、これはインターフェイス ドキュメントもそれに応じて調整する必要があることも意味します。インターフェース文書の保守性と読みやすさは大幅に低下します。
インターフェース文書は、適切な対面コミュニケーションを維持するための労力を必要とするので、第一にインターフェース文書を作成する必要がない、第二にフロントエンドとバックの方法を考えてみてはいかがでしょうか-end 通信インターフェイスの問題 この時点で、バックエンドは、呼び出すことができるすべてのサービス インターフェイスがリストされ、各サービス インターフェイスのパラメーターの説明と戻り値の説明がリストされた URL を提供できますか。 : バックエンド インターフェイスの場合 呼び出しをシミュレートできると、すべての問題が解決されます。この記事では、Swagger2 フレームワークを Sringboot に統合することに焦点を当てます。
1.1. Swagger2 依存関係の追加
プロジェクトの pom.xml ファイルに次の依存関係を追加します。
<dependency> <groupid>io.springfox</groupid> <artifactid>springfox-swagger2</artifactid> <version>2.7.0</version> </dependency> <dependency> <groupid>io.springfox</groupid> <artifactid>springfox-swagger-ui</artifactid> <version>2.7.0</version> </dependency>
まず、スタートアップ クラスを作成する必要があります。コードは次のとおりです。
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
次に、次のように、上記のクラスと同じレベルのディレクトリに新しい swagger2 構成クラスを作成します。 :
@Configuration @EnableSwagger2 public class Swagger2 { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.shareniu.web")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("跟着分享牛学习Springboot源码分析系列课程") .description("更多Spring Boot相关文章请关注分享牛的博客") .termsOfServiceUrl("http://www.shareniu.com/") .contact("牛牛") .license("Copyright 2017-2018 分享牛") .version("1.0") .build(); } }
@Configuration は、Spring がこのクラスをロードする必要があり、@EnableSwagger2 アノテーションが Swagger 関数を有効にする必要があることを指定します。
上記の ApiInfo は最終的にフロントエンドに表示されますが、スキャン パッケージ メソッドを使用して構成を構成します (RequestHandlerSelectors.basePackage)。このパッケージとサブパッケージ内のコントローラーは、最終的に API ドキュメントを生成します。 (@ApiIgnore アノテーションで指定されたリクエストを除く)。
1.2. 新しいドキュメントの説明を追加します
上記のクラス宣言の後、実際には直接呼び出すことができますが、ドキュメントの読みやすさを高めるために、それでもインターフェイスに命令を追加する必要があります。まず次のようにコントローラーを作成しましょう:
@RestController @RequestMapping(value="/users") public class UserController { static Map<long> users = Collections.synchronizedMap(new HashMap<long>()); static { User user = new User(); user.setAge(18); user.setId(1L); user.setName("aa"); users.put(1L, user); } @ApiOperation(value="获取所有用户列表", notes="") @RequestMapping(value={""}, method=RequestMethod.GET) public List<user> getUserList() { List<user> r = new ArrayList<user>(users.values()); return r; } @ApiOperation(value="创建新的用户", notes="根据User对象创建用户") @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User") @RequestMapping(value="", method=RequestMethod.POST) public String postUser(@RequestBody User user) { users.put(user.getId(), user); return "success"; } @ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息") @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long") @RequestMapping(value="/{id}", method=RequestMethod.GET) public User getUser(@PathVariable Long id) { return users.get(id); } @ApiOperation(value="更新用户详细信息", notes="根据url的id来指定更新对象") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long"), @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User") }) @RequestMapping(value="/{id}", method=RequestMethod.PUT) public String putUser(@PathVariable Long id, @RequestBody User user) { User u = users.get(id); u.setName(user.getName()); u.setAge(user.getAge()); users.put(id, u); return "success"; } @ApiOperation(value="删除已存在的用户", notes="根据url的id来指定删除对象") @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long") @RequestMapping(value="/{id}", method=RequestMethod.DELETE) public String deleteUser(@PathVariable Long id) { users.remove(id); return "success"; } }</user></user></user></long></long>
@ApiOperation: インターフェイスの機能を記述するために使用されます。このアノテーションを使用して、インターフェースの役割、戻りヘッダー情報、メソッド要求メソッド (「GET」、「HEAD」、「POST」、「PUT」、「DELETE」、「OPTIONS」、および「PATCH」)、プロトコル (http、https、ws、wss)、http ステータス コード。
@ApiImplicitParam: パラメーターに説明を追加するために使用されます。パラメータの名前、必須項目かどうか、パラメータの説明情報、読み取り専用かどうかなどを設定できます。
上記のコードを送信した後、springboot を起動し、http://127.0.0.1:8080/swagger-ui.html
にアクセスして 2 つの部分を確認します。上の部分は完了です。 Swagger2 クラス 構成後の下部は、UserController クラスのインターフェイス ドキュメントです。
ここでは /user を例にします:
以下に示すように /user をクリックします:
上の図の黄色領域は、インターフェイスによって返されるサンプル データを示します。それがUserのデータ構造です。応答コンテンツ タイプ: インターフェイスによって返されるヘッダー情報。 「試してみる」をクリックします。以下に示すように:
このインターフェイスから返されるボディ、コード コード、および応答ヘッダーは正常に返されました。
以上がSwagger2 フレームワークを Springboot に統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。