Knife4j Gateway使用詳解

Knife4j Gateway是一款開源、免費的API文檔管理工具,基於SpringBoot2.x、Swagger2、Bootstrap、Vue.js等技術實現,提供了前後端完全分離的方式來展示API文檔,使開發人員能夠輕鬆地創建、維護和分享API文檔。本文將從多個方面對Knife4j Gateway進行詳細的闡述。

一、快速上手

1、引入依賴


<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>2.0.2</version>
</dependency>

2、在配置文件中進行配置


# Knife4j配置信息
knife4j:
  # Swagger-API文檔基礎信息配置
  api-docs:
    groupName: xxx項目API文檔
    apiBasePackage: 導入項目中需要生成文檔的介面基礎包名
    title: xxx API介面文檔
    description: xxx介面文檔描述信息
    contact:
      name: xxxx
      email: xxxx
      url: "xxx"
    version: 1.0.0
    license:
      name: xxxx
      url: xxxx
    termsOfServiceUrl: xxxx
    host: xxxx
  # GatewayAPI配置信息
  gateway:
    globalLatencyTiming: true

3、創建介面文檔類


@RestController
@Api(tags = "測試介面管理")
@RequestMapping("/test")
public class TestController {

    @ApiOperation(value = "測試API", notes = "測試API")
    @ApiResponses({@ApiResponse(code = 200, message = "操作成功", response = String.class)})
    @GetMapping(value = "/echo/{string}", produces = MediaType.APPLICATION_JSON_VALUE)
    public String echo(@PathVariable String string) {
        return "echo:" + string;
    }

}

4、啟動項目,訪問http://localhost:port/doc.html即可查看API文檔頁面。

二、功能詳細介紹

1、基本信息配置

在Knife4j Gateway中,可以通過配置文件進行基本信息的配置,或者通過Java註解進行詳細的配置。


@Api(tags = {"用戶信息管理"})
@ApiInfo(value = "用戶信息管理", description = "用戶信息管理API介面文檔")
@RestController
@RequestMapping(value = "/user")
public class UserController {

    @ApiOperation(value = "根據ID獲取用戶信息", notes = "獲取指定ID的用戶信息")
    @ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "Long", paramType = "path")
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

}

2、介面說明

在Knife4j Gateway中,使用@Api註解來標記介面說明信息。


@Api(tags = {"用戶信息管理"})
public interface UserService {

    @ApiOperation(value = "獲取所有用戶信息", notes = "獲取所有用戶信息")
    List listAllUser();

}

3、參數說明

在Knife4j Gateway中,使用@ApiImplicitParam註解來標記參數說明信息。


@ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "Long", paramType = "path")
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
    return userService.getUserById(id);
}

4、返回值說明

在Knife4j Gateway中,使用@ApiResponse註解來標記返回值說明信息。


@ApiResponses({@ApiResponse(code = 200, message = "操作成功", response = String.class)})
@GetMapping(value = "/hello")
public String sayHello() {
    return "Hello World!";
}

5、分組管理

在Knife4j Gateway中,可以通過分組管理來區分不同的API介面,方便API介面的管理和查找。


@Api(tags = {"用戶信息管理"})
public interface UserService {

    @ApiOperation(value = "獲取所有用戶信息", notes = "獲取所有用戶信息")
    List listAllUser();

}

@Api(tags = {"訂單信息管理"})
public interface OrderService {

    @ApiOperation(value = "獲取所有訂單信息", notes = "獲取所有訂單信息")
    List listAllOrder();

}

三、常用擴展

1、集成Swagger-Bootstrap-UI

Swagger-Bootstrap-UI是一款基於Swagger2的API文檔UI增強工具,可以幫助API文檔頁面展示的更加美觀和易於使用。通過在Knife4j Gateway中引入Swagger-Bootstrap-UI,可以讓API文檔頁面擁有更加豐富的功能。

引入Swagger-Bootstrap-UI的依賴:


<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.9.4</version>
</dependency>

在配置文件中啟用Swagger-Bootstrap-UI:


# Swagger-Bootstrap-UI配置信息
swagger:
  base-package: 掃描項目中需要生成文檔的介面基礎包名
  contact:
    name: 某某公司
  title: 項目名稱 - API介面文檔
  description: 項目描述信息
  enable: true
  version: 1.0.0
  termsOfServiceUrl: http://xxxx
  authorization:
    name: Authorization
    description: 在請求頭中添加Token信息,格式為"Bearer token"

2、API文檔訪問控制

在一些敏感的項目中,需要對API文檔的訪問進行控制,防止未授權的人員訪問API文檔。Knife4j Gateway提供了訪問控制的方式,使用Spring Security進行安全控制。

添加Spring Security的依賴:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

配置Spring Security:


@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/doc.html", "/webjars/**", "/v2/api-docs", "/swagger-resources/**")
                .permitAll()
                .anyRequest()
                .authenticated()
                .and()
                .formLogin()
                .loginPage("/login.html")
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/css/**", "/js/**", "/webjars/**");
    }
}

3、介面文檔自定義UI

在Knife4j Gateway中,默認使用了Bootstrap-Vue作為UI框架,但是開發人員可以根據自己的需求進行UI的自定義,以便更好的滿足業務需求。

在resources/templates目錄下創建自定義的HTML模板,使用FreeMarker或Thymeleaf等模板引擎來渲染頁面,然後在配置文件中進行UI的配置即可。


# UI配置信息
knife4j:
  ui:
    isDefault: false # 是否使用默認UI
    url: /doc.html # 訪問API文檔的URL
    title: 項目名稱API介面文檔 # 頁面標題
    logo: /static/images/logo.png # Logo圖片地址
    tagsSorter: alpha # 標籤排序方式:alpha/alphabetical/alphaDesc
    operationsSorter: method # 操作排序方式:method/methodDesc/path/pathDesc
    disableFilter: false # 是否禁用過濾功能
    enableSwaggerBootstrapUi: true # 是否啟用Swagger-Bootstrap-UI
    apiDocsUrl: /v2/api-docs # 獲取API文檔信息的URL
    footer:
      name: xxx公司 # 版權信息
      url: http://xxxx # 鏈接地址

四、常見問題

1、如何在Knife4j Gateway中使用全局異常處理?

Knife4j Gateway默認使用SpringBoot的全局異常處理,但是在一些特殊的業務場景中,可能需要自定義全局異常處理。可以通過@ControllerAdvice註解來實現的全局異常處理。


@ControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 處理異常:NullPointerException
     *
     * @param e NullPointerException異常
     * @return 錯誤信息
     */
    @ExceptionHandler(value = {NullPointerException.class})
    public ResponseEntity handleNullPointerExceptionException(Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("系統繁忙!");
    }

}

2、如何為Knife4j Gateway中的介面設置訪問限制?

為了保護系統的安全和穩定,可能需要為Knife4j Gateway中的介面設置訪問限制。可以通過使用Spring Security等安全框架來為介面設置訪問限制。

3、如何將Knife4j Gateway中的API文檔集成到SwaggerHub中?

可以使用SwaggerHub提供的導入功能,將Knife4j Gateway中的API文檔導入到SwaggerHub中進行管理。

在SwaggerHub中,選擇「APIs」菜單,然後在「New API」下拉菜單中選擇「Import API」,在彈出的窗口中選擇「Import from Remote URL」,輸入Knife4j Gateway中API文檔的URL,然後點擊「Import API」按鈕完成導入。

五、總結

通過本文的介紹,不難看出Knife4j Gateway具有許多豐富的功能和優秀的易用性,對於開發人員來說是一款非常實用和優秀的API文檔管理工具。使用Knife4j Gateway可以讓開發人員輕鬆地創建、維護和分享API文檔,從而提高項目的效率和可維護性。

原創文章,作者:VFXWN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/334780.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VFXWN的頭像VFXWN
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相關推薦

  • gateway io.netty.buffer.poolchunk

    在本文中,我們將深入探討Netty中的一個基礎組件——PoolChunk,它是Netty中ByteBuf的一個關鍵實現,負責對ByteBuf進行緩存和管理。我們將從多個方面對該組件…

    編程 2025-04-28
  • 如何通過knife4j設置全局token

    本文將介紹如何在使用knife4j作為介面文檔管理工具時,通過設置全局token來提高介面文檔的安全性。 一、什麼是knife4j Knife4j是一款基於springfox的開源…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論