Spring Boot - Rest VS GraphQL

简介: 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>


3.创建一个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!";
            }
        };
    }
}


   4.启动应用程序,访问http://localhost:8080/graphiql可以使用图形化界面测试GraphQL查询,或者通过POST请求http://localhost:8080/graphql发送查询。


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

相关文章
|
4月前
|
前端开发 Java API
Spring Boot与GraphQL的集成
Spring Boot与GraphQL的集成
|
1月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
124 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
1月前
|
前端开发 Java C++
RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
本文介绍了在 Spring Boot 3.3 中使用 RSocket 和 WebSocket 实现实时通信的方法。RSocket 是一种高效的网络通信协议,支持多种通信模式,适用于微服务和流式数据传输。WebSocket 则是一种标准协议,支持全双工通信,适合实时数据更新场景。文章通过一个完整的示例,展示了如何配置项目、实现前后端交互和消息传递,并提供了详细的代码示例。通过这些技术,可以大幅提升系统的响应速度和处理效率。
|
4月前
|
Java API 开发者
如何在Spring Boot中使用GraphQL
如何在Spring Boot中使用GraphQL
|
1月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
185 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
1月前
|
Java API Maven
使用 Smart-doc 记录 Spring REST API
使用 Smart-doc 记录 Spring REST API
47 0
|
3月前
|
Java Spring API
Spring框架与GraphQL的史诗级碰撞:颠覆传统,重塑API开发的未来传奇!
【8月更文挑战第31天】《Spring框架与GraphQL:构建现代API》介绍了如何结合Spring框架与GraphQL构建高效、灵活的API。首先通过引入`spring-boot-starter-data-graphql`等依赖支持GraphQL,然后定义查询和类型,利用`@GraphQLQuery`等注解实现具体功能。Spring的依赖注入和事务管理进一步增强了GraphQL服务的能力。示例展示了从查询到突变的具体实现,证明了Spring与GraphQL结合的强大潜力,适合现代API设计与开发。
135 0
|
4月前
|
安全 Java API
构建基于Spring Boot的REST API安全机制
构建基于Spring Boot的REST API安全机制
|
4月前
|
Java
graphql dgs springboot gradle学习
https://dgraphql dgs springboot gradle学习
|
4月前
|
前端开发 Java API