标签: graphql

适用于iOS的GraphQL客户端库

我有一个GraphQL服务,我需要从iOS应用程序中获取,我正在尝试调查我的选项是针对此目的的客户端库.我最初的印象是,没有很多好的选择,我对此感到有些惊讶,因为Facebook的移动应用程序总是被引用为GraphQL本身的动机材料.

以下是我目前对我的选择的理解.我的问题是:我可以忽略哪些客户端库选项?我也很好奇你是否想象出适合iOS的理想GraphQL客户端库,它看起来像什么?

  1. 只需Alamofire,AFNetworking,或者NSURLSession直接传递精心制作的手工制作的查询文档,并通过Dictionary代表生成的JSON进行洞察,或者
  2. 切斯特
  3. GraphQLicious
  4. 斯威夫特 - GraphQL

rest json ios graphql

20
推荐指数
2
解决办法
4299
查看次数

20
推荐指数
1
解决办法
3448
查看次数

如何在GraphQL中查询数组作为参数的对象列表

我正在尝试查询具有ID数组的对象列表.类似于以下SQL查询的东西:

SELECT name FROM events WHERE id IN(1,2,3,...);
Run Code Online (Sandbox Code Playgroud)

我如何在GraphQL中实现这一目标?

graphql graphql-js

20
推荐指数
1
解决办法
2万
查看次数

什么是过度取材或欠读?

我有时玩过graphQL.在graphQL之前,我们通常使用REST API.许多开发人员说graphQL修复了REST的一些问题.(例如过度提取和欠读).我对这些条款感到困惑.

在这种情况下,有人可以解释什么是过度和不足?

谢谢,

fetching-strategy graphql

20
推荐指数
1
解决办法
5468
查看次数

不从GraphqL变异返回数据

我有几个Graphql查询和突变,现在我正在尝试实现删除变异而不返回任何数据:

type Mutation{
    addElement(element:ElementData): ID
    removeElement(id:ID): ¿?
}
Run Code Online (Sandbox Code Playgroud)

但是,似乎需要删除操作的返回值.有没有办法在graphql中执行"空"响应?我想避免像可能的情况那样返回布尔值或状态标志.

我不确定Graphql删除操作的最佳实践是什么

graphql

20
推荐指数
3
解决办法
1万
查看次数

React Apollo 错误:不变违规:在上下文中找不到“客户端”或作为选项传入

我正在使用 React、Apollo 和 Next.js 构建一个项目。我正在尝试将 react-apollo 更新到 3.1.3,现在在查看站点时出现以下错误。

不变违规:无法在上下文中找到“客户端”或作为选项传入。将根组件包装在 中,或通过选项传递 ApolloClient 实例。

如果我将 react-apollo 包降级到 2.5.8,它可以正常工作,所以我认为 2.5 和 3.x 之间发生了一些变化,但在 react-apollo 或 next-with-apollo 文档中找不到任何内容来表明那可能是什么。任何帮助将不胜感激。

withData.js

import withApollo from 'next-with-apollo';
import ApolloClient from 'apollo-boost';
import { endpoint } from '../config';

function createClient({ headers }) {
    return new ApolloClient({
        uri: endpoint,
        request: operation => {
            operation.setContext({
                fetchOptions: {
                    credentials: 'include'
                },
                headers
            });
        },
        // local data
        clientState: {
            resolvers: {
                Mutation: {}
            },
            defaults: {}
        }
    });
}

export default withApollo(createClient); …
Run Code Online (Sandbox Code Playgroud)

apollo reactjs graphql next.js

20
推荐指数
3
解决办法
3万
查看次数

验证错误:不允许将全局实体管理器实例方法用于上下文特定操作

使用 MikroORM 并收到此错误:


ValidationError: Using global EntityManager instance methods for context specific actions is disallowed.
If you need to work with the global instance's identity map, use `allowGlobalContext` configuration option or `fork()` instead
Run Code Online (Sandbox Code Playgroud)

其对应的代码如下:


import { MikroORM } from "@mikro-orm/core";
import { __prod__ } from "./constants";
import { Post } from "./entities/Post";
import mikroConfig from "./mikro-orm.config";

const main = async () => {
  const orm = await MikroORM.init(mikroConfig);
  const post = orm.em.create(Post, {
    title: "my first post",
  });
  await orm.em.persistAndFlush(post); …
Run Code Online (Sandbox Code Playgroud)

node.js typescript graphql mikro-orm

20
推荐指数
2
解决办法
8825
查看次数

没有子节的GraphQL变异

我想发送没有子节的graphql变异请求

mutation _ {
    updateCurrentUser(fullName: "Syava", email: "fake@gmail.com")
}
Run Code Online (Sandbox Code Playgroud)

我正在接受

{
  "errors": [
    {
      "message": "Field \"updateCurrentUser\" of type \"User\" must have a sub selection.",
      ... 
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

添加{id}请求工作正常,但我不想要

也是架构代码

const userType = new GraphQLObjectType({
  name: 'User',
  fields: () => ({
    id: { type: new GraphQLNonNull(GraphQLString) },
    fullName: { type: GraphQLString },
    email: { type: GraphQLString },
  }),
});

type: userType,
  args: {
    fullName: { type: GraphQLString },
    email: { type: new GraphQLNonNull(emailType) },
    password: { type: GraphQLString }, …
Run Code Online (Sandbox Code Playgroud)

graphql graphql-js

19
推荐指数
1
解决办法
8926
查看次数

如何使用GraphQL架构进行类似JSON Schema的数据验证?

我们正在研究将GraphQL用于我们正在开发的无头CMS的第2版.

在这个CMS的第1版中,我们使用JSON Schema在保存到数据库之前根据模式验证每个文档 - 例如,如果它是博客文章,它将根据Article模式进行验证,如果它是一个综合("最好的"列表"它将根据Roundup架构进行验证.

对于版本2,我们正在考虑将GraphQL用于API.然后我们发现GraphQL模式基本上与JSON模式并行 - 它描述了文档结构,字段类型等.

因此,我们可以简单地使用"一个模式真实来源",即GraphQL模式,并在保存新版本时使用它来查询文档和验证新文档.(请注意,我正在讨论针对GraphQL架构验证JSON数据,而不是针对架构验证GraphQL查询.)

我认为数据将针对架构中的所有字段进行验证,但已弃用的字段除外,因为您只想验证字段的"最新版本".

我们可以做以下三件事之一:

  1. 直接使用GraphQL AST来验证文档,即自己编写数据验证器.
  2. 使用GraphQL AST生成JSON模式,并使用标准JSON模式验证器来实际验证它.
  3. 只是接受GraphQL不太适合验证,并定义模式两次 - 一次在GraphQL中进行查询,再次在JSON Schema中进行验证(烦人且容易出错以保持同步).

问题:#1和#2愚蠢的想法?是否有任何GraphQL工具可以进行这种数据验证?如果没有定义两次架构,还有其他方法可以实现吗?

作为参考,我们的后端将用Python编写,但管理UI将是客户端的React和JavaScript.这是我们正在讨论的GraphQL架构的缩减版本(支持"Article"和"Roundup"文档类型):

schema {
    query: Query
}

type Query {
    documents: [Document!]!
    document(id: Int): Document!
}

interface Document {
    id: Int!
    title: String!
}

type Article implements Document {
    id: Int!
    title: String!
    featured: Boolean!
    sections: [ArticleSection!]!
}

union ArticleSection = TextSection | PhotoSection | VideoSection

type TextSection {
    content: String!
    heading: String
}

type PhotoSection …
Run Code Online (Sandbox Code Playgroud)

python validation json jsonschema graphql

19
推荐指数
1
解决办法
1346
查看次数

Apollo Optimistic UI在Mutation Component中不起作用?

我正在使用<Mutation />具有Render Prop API的组件并尝试在UI中执行乐观响应.

到目前为止,我在_onSubmit功能中有这个块-

createApp({
    variables: { id: uuid(), name, link },
    optimisticResponse: {
        __typename: "Mutation",
        createApp: {
            __typename: "App",
            id: negativeRandom(),
            name,
            link
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我的<Mutation />组件看起来像 -

<Mutation
    mutation={CREATE_APP}
    update={(cache, { data: { createApp } }) => {
        const data = cache.readQuery({ query: LIST_APPS });
        if (typeof createApp.id == "number") {
            data.listApps.items.push(createApp);
            cache.writeQuery({
                query: LIST_APPS,
                data
            });
        }
    }}
>

{/* 
some code here
*/}

</Mutation>
Run Code Online (Sandbox Code Playgroud)

我知道该update函数在<Mutation …

apollo reactjs graphql react-apollo optimistic-ui

19
推荐指数
1
解决办法
969
查看次数