Spring Boot - Rest VS GraphQL

在这里插入图片描述


概述

REST(Representational State Transfer)和GraphQL都是用于构建Web服务的API设计和交互方式,它们有不同的特点和优劣势。

REST(Representational State Transfer)

  1. 架构风格:REST是一种架构风格,强调资源的状态和标识的分离,它通常基于HTTP协议来进行通信。

  2. 资源导向:REST API将应用程序的数据建模为一组资源,每个资源都有唯一的URL标识,例如/users/1表示用户1的信息。资源的操作通常使用HTTP动词来执行,如GET(获取资源)、POST(创建资源)、PUT(更新资源)和DELETE(删除资源)等。

  3. 状态无关:REST是无状态的,每个请求都包含足够的信息以处理该请求,服务器不需要存储客户端的状态。

  4. 数据传输:客户端通常不能选择要获取的数据,而是由服务器决定哪些数据返回给客户端。这可能导致过度或不足的数据传输。

  5. 版本控制:通常需要考虑API版本控制,以确保向后兼容性。

GraphQL

  1. 查询语言:GraphQL是一种查询语言,客户端可以精确指定需要获取的数据,并且不会获取多余的数据。客户端可以创建一个自定义的查询来获取所需的数据,这降低了过度传输数据的问题。

  2. 单一入口点:GraphQL通常只有一个入口点(通常是/graphql),客户端可以在单个请求中获取多个资源的数据。

  3. 强类型:GraphQL具有强类型系统,定义了可用的数据类型和查询结构,这有助于提前检测错误。

  4. 实时数据:GraphQL支持实时数据查询,允许客户端订阅数据的更改。

  5. 自描述:GraphQL APIs通常提供自描述的能力,客户端可以查询API的模式和文档,以便更好地理解如何构建查询。

  6. 版本管理:由于客户端可以选择要获取的字段,因此在某种程度上可以减少版本控制的需求,因为不会破坏现有客户端的查询。

选择REST还是GraphQL取决于您的项目需求和偏好。REST通常更简单,适用于简单的API,而GraphQL提供了更大的灵活性和效率,特别适用于复杂的数据查询和实时应用程序。根据项目的具体情况,您可以选择其中之一或将它们结合使用。

图解

在这里插入图片描述


Code

Spring Boot + Rest

在Spring Boot中整合REST,您可以使用Spring Web模块,它提供了用于构建RESTful Web服务的支持。下面是一个简单的示例工程:

  1. 创建一个Spring Boot项目,可以使用Spring Initializer或手动创建。

  2. 添加依赖,确保在pom.xml文件中包含以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  1. 创建一个REST控制器,例如:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class MyController {
    
    

    @GetMapping("/hello")
    public String sayHello() {
    
    
        return "Hello, REST!";
    }
}
  1. 启动应用程序,访问http://localhost:8080/api/hello将返回"Hello, REST!"。

这就是一个简单的Spring Boot整合REST的示例工程。

Spring Boot + GraphQL

在Spring Boot中整合GraphQL,您可以使用第三方库(例如graphql-java和spring-graphql)。下面是一个简单的示例工程:

  1. 创建一个Spring Boot项目,可以使用Spring Initializer或手动创建。

  2. 添加依赖,确保在pom.xml文件中包含以下依赖:

<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-spring-boot-starter</artifactId>
    <version>11.1.0</version>
</dependency>
<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphiql-spring-boot-starter</artifactId>
    <version>11.1.0</version>
    <scope>runtime</scope>
</dependency>
  1. 创建GraphQL模式和查询,例如:
# src/main/resources/graphql/schema.graphqls
type Query {
    hello: String
}
import graphql.schema.DataFetcher;
import graphql.schema.GraphQLSchema;
import graphql.schema.StaticDataFetcher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GraphQLConfig {
    
    

    @Bean
    public GraphQLSchema schema() {
    
    
        return GraphQLSchema.newSchema()
                .query(queryType())
                .build();
    }

    @Bean
    public GraphQLQueryResolver queryType() {
    
    
        return new GraphQLQueryResolver() {
    
    
            public String hello() {
    
    
                return "Hello, GraphQL!";
            }
        };
    }
}
  1. 启动应用程序,访问http://localhost:8080/graphiql可以使用图形化界面测试GraphQL查询,或者通过POST请求http://localhost:8080/graphql发送查询。

这就是一个简单的Spring Boot整合GraphQL的示例工程,它允许您定义自己的GraphQL模式和查询,并通过HTTP端点进行查询。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yangshangwei/article/details/132863341