首页
学习
活动
专区
圈层
工具
发布

用 GraphQL 快速搭建服务端 API

设计 ObjectType 并编写 Query 下面我们就以 Starship 和 Crew 为例,演示如何比较完整地实现 GraphQL 的服务端。...另外可以看到 Starship 的 captain 字段是另个一 ObjectType :Crew ,定义时也必须用 graphene.Field 将其封装为一个 Field 而不能直接使用 ObjectType...在我们的例子中,现在仅提供 Query 以支持一个查询操作: class Query(graphene.ObjectType): starship = graphene.Field(Starship...=Query) code 2.2 这样我们的 Schema 框架就搭好了,虽然现在什么都查询不到,但已经可以通过客户端了解到数据实体的结构和 query 的规范了,如下图: ?...错误处理 当查询语句出错或部分出错时,GraphQL 不会将错误直接上抛造成服务器 500 错误,而是依然会返回一个 json 对象,只是在这个对象中描述了发生怎样的错误。

2.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用 GraphQL 查询你的 Django 应用

    GraphQL 首先是一种查询语言,它定义了一种通用的数据查询方式,可以理解为一种通用的 SQL,只不过前者面向抽象的数据集,后者往往是具体的关系型数据库。...其次,它还包括一种服务端运行时,用于实现查询语句解析、数据类型定义。...vs 扩展的 REST 协议 (此小节中图片拷贝自网络,懒得画) 和 REST 一样,GraphQL 并不是什么开发框架,它只是定义了一种通用型查询的 DSL。...(ObjectType): comments = DjangoListObjectField(CommentListType, description="Query all comments")...: 10 offset: 0){ id email } } } 自定义查询字段 Django 默认的查询能力,对于一些特殊字段并不能完全覆盖需求,这时我们就需要针对这些内容手写一些处理逻辑

    2.9K60

    REST 已死:为什么你的 .NET API 应该迁移到 GraphQL

    我们将涵盖以下内容 • GraphQL 的真正定义(通俗易懂) • 在 .NET 项目中设置 GraphQL(逐步指南) • 与 REST 的真实对比(含代码) • 何时使用(以及何时不用)GraphQL...每个 GraphQL 服务都定义了一组类型,完整描述可查询的数据。...定义 GraphQL API 时,需先定义这些类型: • 对象类型:主数据模型(如 User、Order、Product) • 标量类型:基础数据类型(String、Int、Boolean 等) • 输入类型...:用于变更操作的参数类型 • 枚举:允许的值集合 • 接口:其他类型可实现的抽象类型 定义类型后,GraphQL 会自动强制执行。...执行流程 当查询到达时,GraphQL 会: 1.

    57300

    GraphQL 实践与服务搭建

    GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。...query​ 查询所有 People 并且只获取 name、gender、height 字段 查询 personID 为 1 的 Person 并且只获取 name,gender,height 字段...} from '@nestjs/graphql'; @Resolver() export class AppResolver { @Query(() => String) // 定义一个查询,并且返回字符类型...resolver主要包括query(查询数据)、mutation(增、删、改数据)、subscription(订阅,有点类型 socket),在 graphql 项目中我们用 resolver 替换了之前的控制器...尝试输入 GraphQL 的 query 查询(可以按 Ctrl + i 触发代码建议(Trigger Suggest),与 vscode 同理) 此时点击执行,可以得到右侧结果,即app.resolver.ts

    6.3K10

    GraphQL到底怎么使?看看智联前端团队技术沉淀

    操作模型:GraphQL 规范中对数据的操作做了定义,有三种,query(查询)、mutation(变更)、subscription(订阅)。...所以为了避免误解,后文将把 Query Document(查询文档)称为 Document 或文档。一个 Document 中可包含单个或多个操作,每个操作都可以查询补丁数量的跟字段。...而在研究 GraphQL 时发生的的误解在于: 规范、教程提到 query(查询)时,无法确认是指客户端侧客户端发出的 Query Document 整个操作还是,Document 中的 query 操作...,亦或是服务端侧定义在 Schema 中的 Query 类型。...创建可执行 Schema import 'reflect-metadata' import { buildSchemaSync } from 'type-graphql' @ObjectType({

    2.9K20

    混搭 TypeScript + GraphQL + DI + Decorator 风格写 Node.js 应用

    兼顾 Restful + GraphQL 方式提供数据接口,前两年 GraphQL 特别流行,最近这段时间有些平淡下来(现在比较火热的是 Serverless);GraphQL 这种查询语言对前端来讲还是很友好的...,启动自定义的服务 async didLoad() { await DatabaseService.initInstance(this.app); } } 说明: 选择在 app 的配置加载完毕之后来启动自定义的数据库服务...服务端的 Web 中间件,支持 Koa 也就天然的支持了 Midway TypeGraphQL:它通过一些 TypeScript + Decorator 规范了 Schema 的定义,避免在 GraphQL...几个主要的 Decorator 说明如下: @Resolver:来声明当前类是数据处理的 @Query:声明改方法是一个 Query 查询操作 @Mutation:声明改方法是一个 Mutation 修改操作...: number; } // 查询结果的类型 @ObjectType() export class Pagination { // 总共有多少条 @Field() totalCount:

    4K20

    我的GraphQL安全学习之旅

    GraphQL简介 GraphQL是Facebook的一个开源项目,定义了一种查询语言,用来代替传统的RESTful API。...看到QL这样的字眼,很容易产生误解,以为是新的数据库查询语言,但其实GraphQL和数据库没有什么太大关系,GraphQL并不直接操作查询数据库,可以理解为传统的后端代码与数据库之间又多加了一层,这一层就是...(graphene.ObjectType): users = graphene.List(User) def resolve_users(self, info):...query{ users{ id, password, name } } 查询结果如下: [查询结果.png] 查询出来的数据即UserModel.query.all()...但如果我要在浏览器实现只查询id=2的用户的信息是做不到,因为后端python代码里没有写,也就是说,只有代码里写了接口,定义了相应的schema,才能通过GraphQL查询出对应结果,所以并不是通过GraphQL

    2.2K60

    C# 一分钟浅谈:GraphQL 与 REST 比较

    RESTful API1.1 概念REST(Representational State Transfer)是一种软件架构风格,它定义了客户端和服务器之间的交互规则。...GraphQL2.1 概念GraphQL 是一种用于 API 的查询语言,它提供了一种更高效、强大的数据获取方式。客户端可以通过一个请求获取所需的所有数据,而不需要多次请求。...Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;public class ProductType : ObjectType...3.2 GraphQL学习曲线:GraphQL 的概念和语法相对复杂,初学者可能需要更多时间来掌握。性能问题:复杂的查询可能导致数据库查询性能下降。安全性:不合理的查询可能导致数据泄露或性能问题。...GraphQL:使用字段限制和深度限制,防止客户端发送过于复杂的查询。实现数据加载器(DataLoader),优化数据库查询性能。使用中间件进行权限验证和日志记录,确保安全性和可追溯性。4.

    65110

    C# 一分钟浅谈:GraphQL 与 REST 比较

    RESTful API 1.1 概念 REST(Representational State Transfer)是一种软件架构风格,它定义了客户端和服务器之间的交互规则。...GraphQL 2.1 概念 GraphQL 是一种用于 API 的查询语言,它提供了一种更高效、强大的数据获取方式。客户端可以通过一个请求获取所需的所有数据,而不需要多次请求。...dotnet add package HotChocolate.Data 然后,创建 GraphQL 类型和查询: using HotChocolate; using HotChocolate.Types...3.2 GraphQL 学习曲线:GraphQL 的概念和语法相对复杂,初学者可能需要更多时间来掌握。 性能问题:复杂的查询可能导致数据库查询性能下降。...GraphQL: 使用字段限制和深度限制,防止客户端发送过于复杂的查询。 实现数据加载器(DataLoader),优化数据库查询性能。 使用中间件进行权限验证和日志记录,确保安全性和可追溯性。

    34910

    激荡二十年:HTTP API 的变迁

    GraphQL 从输入和输出入手,在 HTTP 协议之上定义了一套查询语言 —— 客户端和服务器之间需要定义好支持的 query / mutation / subscription 的 schema,以及输入和输出数据结构的...GraphQL 提出了一个看待 API 的全新视角:客户端使用者可以根据需要灵活定义他们想查询的数据,而不需要看服务端老爷们的脸色。...对客户端来说,这额外多了两个浪费用户宝贵等待时间的 roud trip,为什么不能一个查询就获得我想要的数据,且仅包含我想要的数据呢? 这个想法很有创意,但它忽视了灵活性带来的可能并不值得的复杂性。...GraphQL 的理想情况一直没有很好地达成,因为服务端不可能为一个多层随意嵌套的查询去准备数据。...Hasura 试图回答一个问题:有没有可能把 GraphQL 的 query 一对一转换成 SQL 语句?

    2.5K30

    GraphQL 初体验,Node.js 构建 GraphQL API 指南

    使用 GraphQL,你无需进行多个 API 调用(例如 GET /user/:id 和 GET /user/:id/addresses ),而是进行一次 API 调用并将查询提交到单个端点: ` query...你还记得,我们前面说过,GraphQL 查询的样子: ` query { user(id: 1) { name email addresses { street...性能考量 尽管 GraphQL 为你解决了很多问题,但它并不能解决构建 API 的所有固友问题。特别是缓存和授权两方面,只是需要一些预案来防止性能问题。...GraphQL 什么时候不合适? GraphQL 不能像 REST 一样精确地满足 HTTP 通信的需求。...例如,无论成功与否,GraphQL 仅制定一个状态码 200.在这个响应中会返回一个特殊的错误键,供客户端解析和识别出错,因此,错误处理可能会有些棘手。

    9.3K40

    防止你的GraphQL API被恶意查询

    不幸的是,它还有两个主要的折衷: 1、我们永远不能更改或删除查询,只能添加新的查询:如果任何用户运行过时的客户端,我们不能阻止他们的请求。 ...(尽管DataLoader可能会缓解数据库压力,但网络和处理压力不会) 我们没有将第一个参数的类型设置为Int(允许任意数量),而是使用graphql-input-number创建了一个自定义标量,该标量将最大值限制为...100个对象,这将抛出错误。 ...(The GitHub GraphQL API also uses Query Cost Analysis) 实施查询成本分析 在npm上有几个包来实现查询成本分析。 ...还有graphql-query-complexity,但与graphql-cost-analysis相比,我是不推荐选择它的,因为它是没有指令或乘法支持。

    2.4K10
    领券