优秀API的设计原则与实例实现RESTful(4)

简介: 优秀API的设计原则与实例实现RESTful(4)

通过Spring BootSpringfoxSwagger实现RESTful

上一节介绍了通过Swagger Editor实现API设计(先写YAML文件,然后生成服务端和客户端),本节介绍另外一种直接写代码、通过注解自动生成相关文档的方法

Spring Boot已经家喻户晓,而Springfox是什么呢?Marty Pitt曾经编写了一个基于Spring的组件swagger-springmvc,用于将Swagger集成到Spring MVC中,Springfox是从这个组件发展而来的。

下面我们通过一个简单的示例来说明一下。首先新建一个项目,基于Maven构建,在pom中引入相应的JAR包,这里需要引入SpringBootSpringfox的相关包。


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>


编写Swagger的配置类。


@Configuration
@EnableSwagger2
public class Swagger2 {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.cloudnative.rest"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Swagger构建RESTful API")
                .description("")
                .termsOfServiceUrl("")
                .version("1.0")
                .build();
    }
} 


实现dto类。


public class Product {
    private  int id;
    private  String name;
    private  int count;
    private  String desc;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return "Product{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", count=" + count +
                ", desc='" + desc + '\'' +
                '}';
    }
}


基于注解编写接口实现。



@RestController
@RequestMapping(value="/products")     //通过这里配置使下面的映射都在/products下
public class ProductController {
    private List<Product> productList;
    //初始化
    public ProductController(){
        productList = new ArrayList<Product>();
        for (int i = 0; i < 10; i++) {
            Product product =new Product();
            product.setId(i);
            product.setCount(i+10);
            product.setName("watch"+i);
            product.setDesc("watch desc"+i);
            productList.add(product);
        }
    }
    @ApiOperation(value="获取产品列表", notes="获取产品列表")
    @RequestMapping(value={""}, method= RequestMethod.GET)
    public List<Product> getProductList() {
        return productList;
    }
    @ApiOperation(value="获取产品详细信息", notes="根据url的id来获取产品详细信息")
    @ApiImplicitParam(name = "id", value = "产品ID", required = true, dataType = "Integer",paramType="path")
    @RequestMapping(value="/{id}", method=RequestMethod.GET)
    public Product getProduct(@PathVariable Integer id) {
        return productList.get(id);
    }
}


基于Main方法启动。


@SpringBootApplication
public class Application {
   public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
   }
}


访问http://localhost:8080/swagger-ui.html,自动生成的文档界面如图2-18所示。


image.png


访问http://localhost:8080/v2/api-docs可以获取接口的JSON描述文件,如图2-20所示。可以直接到Swagger官网把JSON描述文件转换为YAML文件。


image.png

相关文章
|
13天前
|
JSON API 数据处理
【Swift开发专栏】Swift中的RESTful API集成实战
【4月更文挑战第30天】本文探讨了在Swift中集成RESTful API的方法,涉及RESTful API的基础概念,如HTTP方法和设计原则,以及Swift的网络请求技术,如`URLSession`、`Alamofire`和`SwiftyJSON`。此外,还强调了数据处理、错误管理和异步操作的重要性。通过合理利用这些工具和策略,开发者能实现高效、稳定的API集成,提升应用性能和用户体验。
|
2天前
|
缓存 测试技术 API
RESTful API的最佳实践
【5月更文挑战第11天】在Python中构建RESTful API时,可以选择轻量级的Flask或全栈的Django框架。Flask适用于小型到中型API,而Django适合大型复杂项目。示例代码展示了如何在两个框架中创建任务列表API。
5 0
|
6天前
|
存储 缓存 JavaScript
深入理解RESTful API设计原则与实践
【5月更文挑战第7天】在现代Web服务开发中,表述性状态传递(REST)是一种广泛采用的架构风格,用于构建可扩展的网络应用程序接口(APIs)。本文将探讨RESTful API的核心设计原则,并通过具体实例展示如何实现一个符合REST约束的后端服务。我们将讨论资源的识别、客户端-服务器通信模式、无状态性、以及统一接口的重要性,并探索如何使用当前的流行技术栈来实现这些概念。
|
12天前
|
缓存 监控 JavaScript
Node.js中构建RESTful API的最佳实践
【4月更文挑战第30天】本文介绍了在Node.js中构建RESTful API的最佳实践:选择合适的框架(如Express、Koa)、设计清晰的API接口(遵循HTTP动词和资源路径)、实现认证授权(JWT、OAuth 2.0)、错误处理、限流缓存、编写文档和测试,以及监控性能优化。这些实践有助于创建健壮、可维护和易用的API。
|
12天前
|
存储 关系型数据库 Go
【Go语言专栏】基于Go语言的RESTful API开发
【4月更文挑战第30天】本文介绍了使用Go语言开发RESTful API的方法,涵盖了路由、请求处理、数据存储和测试关键点。RESTful API基于HTTP协议,无状态且使用标准方法表示操作。在Go中,通过第三方库如`gorilla/mux`进行路由映射,使用`net/http`处理请求,与数据库交互可选ORM库`gorm`,测试则依赖于Go内置的`testing`框架。Go的简洁性和并发性使得它成为构建高效API的理想选择。
|
13天前
|
机器学习/深度学习 算法 安全
深度学习在图像识别中的应用与挑战构建高效可扩展的RESTful API:后端开发的实战指南
【4月更文挑战第30天】 随着计算机视觉技术的飞速发展,深度学习在图像识别领域取得了显著的成果。本文将探讨深度学习技术在图像识别中的应用及其所面临的挑战。首先,我们将介绍深度学习的基本原理和关键技术,然后分析其在图像识别中的优势和应用案例。最后,我们将讨论当前深度学习在图像识别领域所面临的主要挑战和未来的发展趋势。
|
13天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
【4月更文挑战第29天】本文探讨了在Web开发中流行的前后端分离模式,重点介绍了RESTful API的设计与实现。REST是一种基于HTTP协议的架构风格,核心概念包括资源、表述和状态转换。RESTful API设计遵循无状态、统一接口等原则,使用GET、POST、PUT、DELETE等HTTP方法执行操作,并通过状态码和JSON/XML传输数据。在PHP中实现RESTful API,可通过定义路由、创建控制器、处理请求和响应,同时注意安全性措施,如使用HTTPS。文中还提供了一个用户管理API的实战示例,以帮助读者更好地理解和应用RESTful API。
|
13天前
|
缓存 监控 API
|
21天前
|
缓存 JSON 负载均衡
构建高效RESTful API的最佳实践
【4月更文挑战第22天】在当今互联网应用的开发中,后端系统的核心通常体现在API的设计和实现上。一个设计良好、性能优异的RESTful API能够极大地提升应用的响应速度及用户体验。本文将探讨在构建高效RESTful API时应当遵循的一系列最佳实践,包括合理的数据结构设计、缓存策略、负载均衡技术以及API版本管理等。通过这些实践,可以确保API服务的高性能与易维护性,并适应不断变化的业务需求。
|
29天前
|
缓存 负载均衡 NoSQL
构建高效可扩展的RESTful API:后端开发的最佳实践
【4月更文挑战第14天】在当今快速发展的网络应用时代,一个结构良好且高效的RESTful API是确保后端服务可靠性和性能的关键。本文深入探讨了设计和实现高效可扩展RESTful API的最佳实践,涵盖了API设计原则、数据库优化、缓存策略以及负载均衡等关键方面。文中不仅提供了具体的技术建议,还通过案例分析展示了如何应对实际开发中的挑战。