我有一个GraphQL服务,我需要从iOS应用程序中获取,我正在尝试调查我的选项是针对此目的的客户端库.我最初的印象是,没有很多好的选择,我对此感到有些惊讶,因为Facebook的移动应用程序总是被引用为GraphQL本身的动机材料.
以下是我目前对我的选择的理解.我的问题是:我可以忽略哪些客户端库选项?我也很好奇你是否想象出适合iOS的理想GraphQL客户端库,它看起来像什么?
NSURLSession直接传递精心制作的手工制作的查询文档,并通过Dictionary代表生成的JSON进行洞察,或者我正在尝试查询具有ID数组的对象列表.类似于以下SQL查询的东西:
SELECT name FROM events WHERE id IN(1,2,3,...);
Run Code Online (Sandbox Code Playgroud)
我如何在GraphQL中实现这一目标?
我有时玩过graphQL.在graphQL之前,我们通常使用REST API.许多开发人员说graphQL修复了REST的一些问题.(例如过度提取和欠读).我对这些条款感到困惑.
在这种情况下,有人可以解释什么是过度和不足?
谢谢,
我有几个Graphql查询和突变,现在我正在尝试实现删除变异而不返回任何数据:
type Mutation{
addElement(element:ElementData): ID
removeElement(id:ID): ¿?
}
Run Code Online (Sandbox Code Playgroud)
但是,似乎需要删除操作的返回值.有没有办法在graphql中执行"空"响应?我想避免像可能的情况那样返回布尔值或状态标志.
我不确定Graphql删除操作的最佳实践是什么
我正在使用 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) 使用 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) 我想发送没有子节的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用于我们正在开发的无头CMS的第2版.
在这个CMS的第1版中,我们使用JSON Schema在保存到数据库之前根据模式验证每个文档 - 例如,如果它是博客文章,它将根据Article模式进行验证,如果它是一个综合("最好的"列表"它将根据Roundup架构进行验证.
对于版本2,我们正在考虑将GraphQL用于API.然后我们发现GraphQL模式基本上与JSON模式并行 - 它描述了文档结构,字段类型等.
因此,我们可以简单地使用"一个模式真实来源",即GraphQL模式,并在保存新版本时使用它来查询文档和验证新文档.(请注意,我正在讨论针对GraphQL架构验证JSON数据,而不是针对架构验证GraphQL查询.)
我认为数据将针对架构中的所有字段进行验证,但已弃用的字段除外,因为您只想验证字段的"最新版本".
我们可以做以下三件事之一:
问题:#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) 我正在使用<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 …
graphql ×10
apollo ×2
graphql-js ×2
json ×2
python ×2
reactjs ×2
rest ×2
django ×1
ios ×1
jsonschema ×1
mikro-orm ×1
next.js ×1
node.js ×1
react-apollo ×1
typescript ×1
validation ×1