首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么GitHub Graphql和Yelp GraphQL不允许多个orderBy字段?

在 GraphQL 中,orderBy 字段通常用于指定查询结果的排序方式。然而,GitHub GraphQL 和 Yelp GraphQL API 都不允许在单个查询中使用多个 orderBy 字段。这种限制可能源于以下几个原因:

1. 简化实现和维护

允许多个 orderBy 字段会增加 API 的复杂性。API 提供者需要处理多个排序字段的优先级和冲突,这会增加实现和维护的难度。通过限制为单个 orderBy 字段,API 可以更简单、更高效地处理排序逻辑。

2. 性能考虑

排序操作可能会对数据库查询性能产生显著影响。允许多个 orderBy 字段可能会导致更复杂的排序逻辑,从而增加查询的计算成本和响应时间。通过限制为单个 orderBy 字段,API 提供者可以更好地控制和优化查询性能。

3. 一致性和可预测性

多个 orderBy 字段可能会导致排序结果的不一致和不可预测。例如,如果两个字段的值相同,如何确定最终的排序顺序可能会变得复杂和不明确。通过限制为单个 orderBy 字段,API 提供者可以确保排序结果的一致性和可预测性。

4. 简化客户端代码

对于客户端开发者来说,处理多个 orderBy 字段也会增加代码的复杂性。限制为单个 orderBy 字段可以简化客户端代码,使其更易于编写和维护。

5. 数据模型和用例

在某些情况下,API 提供者可能认为单个 orderBy 字段已经足够满足大多数用例需求。对于更复杂的排序需求,开发者可以通过多次查询或在客户端进行排序来实现。

示例

假设你在 GitHub GraphQL API 中查询仓库,并希望按 stargazersforks 两个字段排序:

代码语言:javascript
复制
{
  search(query: "graphql", type: REPOSITORY, first: 10) {
    edges {
      node {
        ... on Repository {
          name
          stargazers {
            totalCount
          }
          forks {
            totalCount
          }
        }
      }
    }
  }
}

GitHub GraphQL API 只允许一个 orderBy 字段,例如:

代码语言:javascript
复制
{
  search(query: "graphql", type: REPOSITORY, first: 10, orderBy: {field: STARGAZERS, direction: DESC}) {
    edges {
      node {
        ... on Repository {
          name
          stargazers {
            totalCount
          }
          forks {
            totalCount
          }
        }
      }
    }
  }
}
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GraphQL是API的未来,但它并非银弹

你可以将多个调用封装到一个 API 中,让它们在服务器端完成,而不是从客户端发出多个请求。此方法也可以解决过取欠取问题,因为你可以在将数据发回客户端之前对其进行操作。...在 GraphQL 的情况下,模式演进意味着弃用一个旧字段,并添加一个新字段。新客户端使用新字段,而你希望使用旧字段的客户端越来越少。但愿,你已经有了一个可以强制用户在某个时间下载新版本的系统。...Kyle 将一个 GraphQL 模式分散在多个 Git 存储库中的 Swagger 文件进行了对比。...无论使用哪种,你最终都会得到一个 GraphQL 模式,它描述了所有的类型字段,并允许你对它们进行注释。 那么,有什么区别呢?OAS 设置开销更大。...其表现远远超过了 Swagger 或 GraphQL Playground。 另一方面,如果你查看 GitHub 的公共 GraphQL API,就会发现没有一个查询示例。

2K10
  • 在以太坊上构建 GraphQL API

    这些协议[12]通常分布在多个节点(服务器)上,使任何希望成为网络一部分并提供服务的人都能参与。...subgraph 主要由下面几个部分组成的: 1.GraphQL Schema GraphQL Schema 定义了你想保存查询的数据类型/实体。也可定义如关系或全文搜索的配置项。...定义实体 通过 The Graph,在 schema.graphql 中定义实体类型,Graph Node 将生成顶层字段,用于查询该实体类型的单个实例集合。...graph codegen 为了确保智能合约、事件实体的工作更简单并且类型安全,Graph CLI 会从 subgraph 的 GraphQL 模式 数据源中包含的合约 ABI 的组合中产生 AssemblyScript...要做到这一点,首先用 User Token 实体更新 dataSources.mapping.entities字段

    1.8K90

    为什么要放弃RESTful,选择拥抱GraphQL

    修改旧接口删除冗余数据的方案往往开发人员不会选择,这是为什么呢?...Comment Author 的图,多个请求变成了一个请求的不同字段,从原有的分散式请求变成了集中式的请求,因此GraphQL又可以被看成是图数据库的形式。...,为下一步查询返回做准备; 前端使用模式查询语言(Schema)来描述需要请求的数据对象类型具体需要的字段(称之为声明式数据获取); 后端GraphQL通过前端传过来的请求,根据需要,自动组装数据字段...例如定义了一个名为User的对象类型,并对其字段进行定义施加限制条件: User字段控制 那么,返回数据时,像下面这种情况就是不允许的: 错误的表示 Graphql会根据Schema Type来自动返回正确的数据...Graphcool (github): 一个 BaaS(后端即服务),它为你的应用程序提供了一个 GraphQL 后端,且具有用于管理数据库存储数据的强大的 web ui。

    2.4K40

    为什么我劝你放弃了Restful API?

    修改旧接口删除冗余数据的方案往往开发人员不会选择,这是为什么呢?...GraphQL 实际上将多个 HTTP 请求聚合成了一个请求,将多个 restful 请求的资源变成了一个从根资源 POST 访问其他资源的 Comment Author 的图,多个请求变成了一个请求的不同字段...前端使用模式查询语言(Schema)来描述需要请求的数据对象类型具体需要的字段(称之为声明式数据获取); 后端GraphQL通过前端传过来的请求,根据需要,自动组装数据字段,返回给前端。...例如定义了一个名为User的对象类型,并对其字段进行定义施加限制条件: 那么,返回数据时,像下面这种情况就是不允许的: Graphql会根据Schema Type来自动返回正确的数据: 其他类型 除了上面的...Graphcool (github): 一个 BaaS(后端即服务),它为你的应用程序提供了一个 GraphQL 后端,且具有用于管理数据库存储数据的强大的 web ui。

    2.9K20

    GraphQL

    修改旧接口删除冗余数据的方案往往开发人员不会选择,这是为什么呢?...Comment Author 的图,多个请求变成了一个请求的不同字段,从原有的分散式请求变成了集中式的请求,因此GraphQL又可以被看成是图数据库的形式。...,为下一步查询返回做准备; 前端使用模式查询语言(Schema)来描述需要请求的数据对象类型具体需要的字段(称之为声明式数据获取); 后端GraphQL通过前端传过来的请求,根据需要,自动组装数据字段...例如定义了一个名为User的对象类型,并对其字段进行定义施加限制条件: User字段控制 那么,返回数据时,像下面这种情况就是不允许的: 错误的表示 Graphql会根据Schema Type来自动返回正确的数据...Graphcool (github): 一个 BaaS(后端即服务),它为你的应用程序提供了一个 GraphQL 后端,且具有用于管理数据库存储数据的强大的 web ui。

    2.6K65

    GraphQL + Space Cloud 简化你的API设计

    随着APP产品的迭代更新,APP Server提供的接口往往也会进行多个版本的迭代更新。...GraphQL让服务的设计者可以专注于数据建模,而非接口的数据表示组织。...具体的,GraphQL有3个主要组成部分: Queries:客户端的请求即一个查询; Resolvers:服务端通过resolver的方式告诉GraphQL每个查询字段的数据如何获取;这也使得API数据模型后端的数据库表结构...从2016年开始,随着GraphQL在不同编程语言上的生态的丰富,这项技术开始被Twitter,Yelp,Airbnb等公司应用于自己的产品中,如下图目前GraphQL已经在近100家不同规模的企业中开始使用...而借助与GraphQL的并行嵌套语法,你自动的获得了将微服务与数据库操作进行组合或者并行查询的能力。

    1.5K20

    GraphQL详解

    修改旧接口删除冗余数据的方案往往开发人员不会选择,这是为什么呢?...Comment Author 的图,多个请求变成了一个请求的不同字段,从原有的分散式请求变成了集中式的请求,因此GraphQL又可以被看成是图数据库的形式。...,为下一步查询返回做准备; 前端使用模式查询语言(Schema)来描述需要请求的数据对象类型具体需要的字段(称之为声明式数据获取); 后端GraphQL通过前端传过来的请求,根据需要,自动组装数据字段...例如定义了一个名为User的对象类型,并对其字段进行定义施加限制条件: User字段控制 那么,返回数据时,像下面这种情况就是不允许的: 错误的表示 Graphql会根据Schema Type来自动返回正确的数据...Graphcool (github): 一个 BaaS(后端即服务),它为你的应用程序提供了一个 GraphQL 后端,且具有用于管理数据库存储数据的强大的 web ui。

    2.6K00

    【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS

    对比标准 API 图 1 对比图 1 中的标准 API 的标准是基于实现与多个数据源的互操作性。关于这种比较需要注意的一点是规范的成熟度。...GraphQL 通过强制客户端准确指定他们需要哪些字段来解决 API 版本控制维护问题。API 开发人员可以主动联系已知的字段使用者,以迁移已弃用的字段。响应包括有关哪些字段已弃用的信息。...OData 通过提供一个选择列表来将返回的字段数限制为应用程序所需的字段数,从而提供类似的功能。这减少了应用程序中的响应大小处理。但是,它没有提供一种机制来指示字段已被弃用。...相比之下,当您使用 orderBy 查询参数时,OData 会准确地告诉您它的行为方式,因为它的行为被定义为规范的一部分。 建议 GraphQL 几乎就像一种编程语言,这使得它非常灵活。...您执行 POST,准确定义要包含在响应中的字段函数。 因此,尽管 GraphQL 使您能够从元数据中确定哪些字段函数可用,但您仍然不知道它们在语义上的含义。

    2.1K30

    GraphQL-BFF:微服务背景下的前后端数据交互方案

    https://github.com/apollographql/apollo-client/tree/master/packages/graphql-anywhere 它跟静态类型的 GraphQL...首先来想一下,GraphQL 为什么要叫 GraphQL,其中的 Graph 体现在什么地方? GraphQL 的查询语句,看起来是 JSON 写法的一种简化。...通过这个角度,我们可以理解为什么 GraphQL 不允许 Query 语句停留在 Object 类型,一定要明确的写出对象内部的字段,直到所有 Leaf Node 都是 Scalar 类型。...在 Query 下的每个字段,都可能对应 1 到多个内部服务的 API 的调用处理。只用普通函数构成的 resolverMap,不足以充分表达其中的逻辑复杂度。...当我们多个字段要复用相同的逻辑时,编写成中间件,然后将 handler 变成数组形式即可。

    3.7K72

    干货 | 万字长文全面解析GraphQL,携程微服务背景下的前后端数据交互方案

    https://github.com/apollographql/apollo-client/tree/master/packages/graphql-anywhere 它跟静态类型的 GraphQL...首先来想一下,GraphQL 为什么要叫 GraphQL,其中的 Graph 体现在什么地方? GraphQL 的查询语句,看起来是 JSON 写法的一种简化。...通过这个角度,我们可以理解为什么 GraphQL 不允许 Query 语句停留在 Object 类型,一定要明确的写出对象内部的字段,直到所有 Leaf Node 都是 Scalar 类型。...在 Query 下的每个字段,都可能对应 1 到多个内部服务的 API 的调用处理。只用普通函数构成的 resolverMap,不足以充分表达其中的逻辑复杂度。...当我们多个字段要复用相同的逻辑时,编写成中间件,然后将 handler 变成数组形式即可。

    3.7K21

    安息吧 REST API,GraphQL 长存

    引入 GraphQL 层有诸多好处。例如,一大好处便是能与多个服务进行通信。当你有多个客户端请求多个服务的数据时,中间的 GraphQL 层可以简化标准化此通信过程。...这对客户端和服务器而言都是网络内存资源的浪费。 REST API 的另一大问题是版本控制。如果你需要支持多个版本,那通常意味着需要新的端点。...这就是为什么 GraphQL 提供了更好的选择。 GraphQL如何做到这一点? GraphQL 背后有很多概念设计决策,但最重要的可能是: GraphQL 模式是强类型模式。...星球大战数据有一个 GraphQL API 托管在 https://github.com/graphql/swapi-graphql。可以去尝试使用它构建我们的人物数据对象。...GraphQL 查询字段被设计为独立的功能,并且使用数据库中的数据解析这些字段可能会导致对已解析字段产生新的数据库请求。

    2.7K30

    记一次通过c#运用GraphQL调用Github api

    关于egdenode在下文会有少许讲解。...三、运用GraphQL调用Github api    Github提供的API相关文档在https://developer.github.com/v4/ 右侧的目录树上,这次笔者需要拉取github的大量...repository库,所以用到的search接口(但是很奇怪,这个接口在文档中并没有列出来,也不知道为什么)。...建议大家可以先在Github提供的explorer中先测试验证,OK了在把代码写到实际的项目中。   接着,笔者在实现自己需要的功能时又学习了2个概念,才能正常开展下面的工作。...四、结语   最后附带提一下,GraphQL的出现,主要的场景还是在于赋能前端开发,赋予了前端开发者自由组织定制请求数据的能力。

    1.3K20

    GraphQL-BFF:微服务背景下的前后端数据交互方案

    https://github.com/apollographql/apollo-client/tree/master/packages/graphql-anywhere 它跟静态类型的 GraphQL...首先来想一下,GraphQL 为什么要叫 GraphQL,其中的 Graph 体现在什么地方? GraphQL 的查询语句,看起来是 JSON 写法的一种简化。...通过这个角度,我们可以理解为什么 GraphQL 不允许 Query 语句停留在 Object 类型,一定要明确的写出对象内部的字段,直到所有 Leaf Node 都是 Scalar 类型。...在 Query 下的每个字段,都可能对应 1 到多个内部服务的 API 的调用处理。只用普通函数构成的 resolverMap,不足以充分表达其中的逻辑复杂度。...当我们多个字段要复用相同的逻辑时,编写成中间件,然后将 handler 变成数组形式即可。

    1.6K20

    2018年微服务的5个发展趋势

    GraphQL类型系统允许开发人员定义数据模式。可以添加新字段,并且字段可以在不影响现有查询或重构客户端应用程序的情况下进行优化。GraphQL功能强大,因为它不依赖于特定的数据库或存储引擎。...通通过在类型字段之间定义资源之间的关系(而不是像REST一样的端点),GraphQL可以遵循属性之间的引用,因此服务可以使用单个查询从多个资源中接收数据。...另外,REST api要求为一个请求加载多个url,增加网络跳数,减慢查询速度。通过减少往返,GraphQL减少了每个数据请求所需的资源数量。返回的数据通常被格式化为JSON。...查询的形状完全匹配从服务器获取的数据的形状,这使得与SQL或Gremlin等其他语言相比,GraphQL非常高效。查询反映了响应的形状,因此可以检测到偏差,并可以识别出不能正确解析的字段。...GraphQL用户包括Amplitude,Credit Karma,KLM,NY Times,Twitch,Yelp等.11月,亚马逊通过推出AWS AppSync(包括GraphQL支持)来验证GraphQL

    1.4K20

    Go GraphQL 教程

    尽管有时候需求并不需要所有字段,又或者有时候需求需要 调用多个接口,组装成一个大的格式,以完成需求。 后端抽象出多少实体,对应就会设计各种资源实体的接口。...GraphQL 尝试解决这些问题: 查询语法查询结果高度相似 根据需求获取字段 一个路由能获取多个请求的结果 无需接口版本管理 1 既然是一种专门用于 API 的查询语言,其必定有一些规范或者语法约束...Schema 是类型语言的合集,定义了具体的操作(比如:请求、更改),对象信息(比如:响应的字段) schema.graphql type Query { ping(data: String...} 具体定义了请求合集:Query, 更改或者创建合集:Mutation,定义了两个对象类型:Pong, Vote , 对象内包含字段类型。...定义的类型对象响应的字段设计几乎保持一致。

    4.4K20

    GraphQL API渗透测试指南

    RESTful VS GraphQLGraphQL API与Rest API最大的区别在于:GraphQL 通过将数据查询和数据修改分离开来,使得客户端能够更灵活地控制所需数据的粒度类型,并且在多个资源之间建立关系...改变请求方法/报错信息判断利用不同的请求方法(GET、POST)发起请求也能够进行GraphQL API的辨别,因为对于一些仅允许某种请求方法的GraphQL API而言,不同的请求方法返回的格式内容也不同...字段重复查询由于GraphQL API不会对重读字段进行去重处理,所以还可以通过查询重复字段进行Dos攻击。...会提示过多登陆尝试GraphQL对象不能够包含多个同名的属性,所以我们可以利用别名来实现多个同属性的操作,这样如果系统只限制了API请求速率,那么也可以通过别名查询来实现登陆爆破。...://github.com/graphql-kit/graphql-voyagerGraphQLmap:GraphQL API渗透测试脚本引擎,https://github.com/swisskyrepo

    1.3K30
    领券