# GraphQL **Repository Path**: naclnezn/graph-ql ## Basic Information - **Project Name**: GraphQL - **Description**: GraphQL - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-17 - **Last Updated**: 2024-08-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GraphQL ## 简介 GraphQL 是一种用于应用编程接口(API)的查询语言和服务器端运行时,它可以使客户端准确地获得所需的数据,没有任何冗余。 ### 优势 - GraphQL 速度快,并且比较稳定,GraphQL 的操作是在数据层面的,所以比较快。 - GraphQL 可以获取更多的资源,当查询一个数据的时候,不止是这个数据,甚至可以很快地查询到数据引用的另一个数据。GraphQL 可以在单个请求中去获取尽量多的数据,并且在弱网状态下,GraphQL 依旧表现出色。 - GraphQL 是单端点查询,并在此端点中去完成所有的查询。 - GraphQL 的可持续性非常出色,无论是新字段、还是旧字段,它都能很好地去处理,可维护性也极佳。 - GraphQL 具有向下兼容的特性,就算是很久很久以前的功能,GraphQL 还是能很好地去兼容它,保证旧版本的正常运行,同时又不影响新功能的加入以及整体的稳定性。这样做的好处就是,不需要去担忧版本号问题了。 - GraphQL 具有强类型,在 GraphQL 的查询中,一个级别对应一个强类型,这个类型充当一个字段的描述。这样的好处就是,在查询之前,可以校验出错误并提示,方便定位问题,提高性能。 - 自省:可以查询 GraphQL 服务器支持的类型。这为工具和客户端软件创建了一个强大的平台,可以在这些信息的基础上构建静态类型语言的代码生成、我们的应用程序框架、Relay 或 GraphiQL 等 IDE。 - GraphQL 支持使用者去决定服务器支持的类型。这样的好处就是,给很多使用 GraphQL 的 工具或者端建立了一个比较成熟且强大的应用平台,通过这个平台,一些框架、工具得到不断地优化提升。 ### 劣势 - GraphQL 无法完成深度查询,所以无法对于未知深度的数据进行一次性查询。 - GraphQL 具有非常死板的响应结构,你必须遵从这个结构去查询数据,或者自己添加一个转换器来转换。 - GraphQL 无法进行网络级别的缓存,你必须使用另外别的办法进行持久查询。 - GraphQL 默认没有上传文件的功能,GraphQL 也不接收文件类型的参数,但是你可以使用 REST 的方式进行上传文件,达到上传文件的目的。 - GraphQL 的执行是不可预测的,因为 GraphQL 太过于灵活了。 - 同样的一个简单的 API,GraphQL 会表现得很复杂,所以建议简单 API 使用 RSET。 ## 初始化 mysql ```sql CREATE DATABASE IF NOT EXISTS `graphql_api_data`; USE `graphql_api_data`; CREATE TABLE IF NOT EXISTS `book` ( `id` int(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `pageCount` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `Index_name` (`name`) ) ENGINE = InnoDB AUTO_INCREMENT = 235 DEFAULT CHARSET = utf8; CREATE TABLE `author` ( `id` INT(20) NOT NULL AUTO_INCREMENT, `firstName` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `lastName` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `bookId` INT(20) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `Index_name` (`firstName`) USING BTREE, INDEX `FK_Author_Book` (`bookId`) USING BTREE, CONSTRAINT `FK_Author_Book` FOREIGN KEY (`bookId`) REFERENCES `graphql_api_data`.`book` (`id`) ON UPDATE CASCADE ON DELETE CASCADE ) COLLATE = 'utf8_general_ci' ENGINE = InnoDB AUTO_INCREMENT = 6; INSERT INTO `book` (`id`, `name`, `pageCount`) VALUES (1, 'the golden ticket', '255'); INSERT INTO `book` (`id`, `name`, `pageCount`) VALUES (2, 'coding game', '300'); INSERT INTO `author` (`id`, `firstName`, `LastName`, `bookId`) VALUES (4, 'Brendon', 'Bouchard', 1); INSERT INTO `author` (`id`, `firstName`, `LastName`, `bookId`) VALUES (5, 'John', 'Doe', 2); ``` ## 测试 ![1723873911231.png](imgs/1723873911231.png) ```shell http://127.0.0.1:8088/graphql query { allBook{ id name pageCount } } ```