Swagger和Wired

前后端沟通利器:Swagger与WireMock

微信公众号:Java患者

专注Java领域技术分享

前言

        在我们前后端分离的架构中,前端与我们后端的开发是并行的,那么我们除了写自己的代码之外,我们还需要一些额外的的工具来帮助我们跟前端沟通,下面我们将为大家介绍2个常见的工具。

常见的工具

        第一个就是Swagger,它可以根据我们的代码去自动生成html文档,向前端描述清楚我们的API如何去使用的,而我们后端的程序员只需要通过简单的注释,就可以不用再去写API文档了,大大减少我们维护文档的工作量。

swagger的使用

        首先,我们还是要引入相关的开发包,并且在我们Spring boot的启动类上加一个注解@EnableSwagger2,这样我们的swagger就与我们项目整合好了。

<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>

        我们启动好项目,访问http://localhost/swagger-ui.html就可以进入我们的swagger页面里面了,里面是我们写的Controller和Spring MVC提供的Endpoint描述,他们都是用来处理HTTP请求的。

通过默认的生成的描述,有时候我们并不能清楚的知道是怎么,比如像字段的描述,方法的作用。这时,我们可以通过注解的方法,为我们的接口文档提供更详细的信息。

swagger使用实例

        @ApiOperation,方法的描述,用于方法上面,最终会代替我们的方法名称显示在文档里。

@GetMapping
@JsonView(User.UserSimpleView.class)
@ApiOperation(value = "用法查询服务")
public List<User> query(UserQueryCondition condition, Pageable pageable) {}


        参数描述有2种,一种是使用对象来接收参数的描述,针对这种描述,我们只需要在字段上面加上@ApiModelProperty描述就行了。

  @ApiModelProperty("用户的名称")
  private String name;

另一种是直接使用属性去接收,使用@ApiParam描述就可以了。

@GetMapping("{id:\\d+}")
@JsonView(User.UserDetailView.class)
public User getUserInfo(@ApiParam("用户id") @PathVariable(name = "id") String id){}


Swagger其他常见注解

@Api用在类上,说明该类的作用。
@ApiOperation注解来给API增加方法说明。
@ApiImplicitParams用在方法上包含一组参数说明。
@ApiImplicitParam用来注解来给方法入参增加说明。    ‍
@ApiResponses用于表示一组响应
@ApiResponse用在@ApiResponses中,一般用于表达一个错误的响应信息
@ApiModel描述一个Model的信息
@ApiModelProperty描述一个model的属性

WireMock的介绍

        虽然Swagger可以生成我们的文档。当时使用文档总会有些和我们实际去调用服务有区别的。WireMock可以在我们后端还没开放完的情况下,给前端伪造我们的数据。

        WireMock是一个独立的服务器,我们通过他的客户端来写一些java代码,来告诉服务器收到请求的时候发生什么的响应,而服务器是一直在运行,反复部署。前端只要连这个服务器就可以了,他们不用再去伪造哪些假数据了。

WireMock的使用

我们首先要去WireMock的官网去下载并安装我们的WireMock,http://wiremock.org/docs/running-standalone/。他下载后是一个jar包,我可以去jar的所在的目录上,通过下面这个命令来运行。

java -jar wiremock-standalone-2.26.3.jar --port

当看到这个界面,说明服务已经启动好了。

如何使用操作WireMock

我们需要在项目中导入我们WireMock的依赖。

<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
</dependency>

我们书写代码并运行告诉WireMock的服务器,实现收到指定请求,从指定文件读取数据并放回回去的过程。

public class MockServer {


  public static void main(String[] args) throws IOException {
      // configureFor可以指定ip和端口
    configureFor(8062);
    // 把之前所有的配置情况
    removeAllMappings();
        // 告诉我们服务器怎么处理请求。
        // url还可以写正则表达式
    mock("/order/1", "01");
    mock("/order/2", "02");
  }


  private static void mock(String url, String file) throws IOException {
    // 我们把响应的内容写在一个文件里面
    ClassPathResource resource = new ClassPathResource("mock/response/" + file + ".txt");
    String content = StringUtils.join(FileUtils.readLines(resource.getFile(), "UTF-8").toArray(), "\n");
    stubFor(get(urlPathEqualTo(url)).willReturn(aResponse().withBody(content).withStatus(200)));
  }


}

访问其相应的路径:

查看

### 配置 Nginx 支持 Swagger API 文档 为了使 Nginx 能够支持并优化对 Swagger API 文档的访问,可以按照以下方式调整 `nginx.conf` 文件中的设置: #### 注释无关配置项 在生产环境中仅开放80端口的情况下,如果希望通过Nginx而非Tomcat直接访问Swagger,则需先注释掉可能干扰正常工作的部分配置选项,比如根目录(`root`)声明以及针对`.html`文件的任何特定缓存策略[^1]。 ```nginx # nginx.conf 中的部分片段展示 http { ... # 关闭不必要的 root 定义 HTML 缓存规则 # root /path/to/root; # location ~* \.(?:manifest|appcache|html?|xml|json)$ { # expires -1; # } } ``` #### 设置反向代理路径 为了让外部能够顺利获取到位于内部服务器上的Swagger资源(如UI页面、API文档等),应当创建专门的位置匹配规则,并将其指向实际提供这些资源的服务地址。这通常涉及到几个关键位置的定义,包括但不限于`swagger-ui.html`入口页及其关联的数据接口[^4]。 ```nginx server { listen 80; server_name yourdomain.com; location /api-docs/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:{your_service_port}/; # 对于 swagger 的具体资源做更细致的转发设定 location /api-docs/swagger-ui.html { proxy_pass http://localhost:{your_service_port}/swagger-ui.html; } location /api-docs/v2/api-docs { proxy_pass http://localhost:{your_service_port}/v2/api-docs; } location /api-docs/swagger-resources { proxy_pass http://localhost:{your_service_port}/swagger-resources; } location /api-docs/webjars/ { proxy_pass http://localhost:{your_service_port}/webjars/; } } } ``` 上述配置中,假设Swagger相关资源部署在同一台机器的不同端口上运行的应用程序内;其中 `{your_service_port}` 应替换为应用程序监听的实际端口号。此外,还设置了通用头部信息传递以确保请求能被正确路由至目标服务[^3]。 通过以上方法,即可实现利用Nginx作为前端网关来安全高效地暴露Swagger API文档供外界查阅的目的。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值