GraphQL由类型系统,查询语言和执行语义,静态验证和类型内省组成,每个都在下面概述.为了指导您完成这些组件,我们编写了一个示例来说明GraphQL的各个部分.
- https://github.com/facebook/graphql
Falcor允许您通过虚拟JSON图表将所有远程数据源表示为单个域模型.无论数据位于何处,无论是在客户端的内存中还是通过服务器上的网络,您都可以采用相同的方式编码.
- http://netflix.github.io/falcor/
Falcor和GraphQL有什么区别(在Relay的背景下)?
我试图了解GraphQL最适合在微服务架构中使用的位置.
关于只有1个GraphQL架构作为API网关代理对目标微服务的请求并强制其响应存在争议.微服务仍然会使用REST/Thrift协议进行通信思考.
另一种方法是每个微服务一个多个GraphQL模式.拥有一个较小的API网关服务器,使用请求的所有信息+ GraphQL查询将请求路由到目标微服务.
第一种方法
将1个GraphQL架构作为API网关将有一个缺点,每次更改微服务合同输入/输出时,我们必须在API网关侧相应地更改GraphQL架构.
第二种方法
如果每个微服务使用多个GraphQL模式,那么在某种程度上是有意义的,因为GraphQL强制执行模式定义,并且消费者需要尊重微服务给出的输入/输出.
问题
在哪里可以找到适合设计微服务架构的GraphQL?
您将如何使用可能的GraphQL实现设计API网关?
假设您有GraphQL类型,它包含许多字段.如何在不写下包含所有字段名称的长查询的情况下查询所有字段?
例如,如果我有这些字段:
public function fields()
{
return [
'id' => [
'type' => Type::nonNull(Type::string()),
'description' => 'The id of the user'
],
'username' => [
'type' => Type::string(),
'description' => 'The email of user'
],
'count' => [
'type' => Type::int(),
'description' => 'login count for the user'
]
];
}
Run Code Online (Sandbox Code Playgroud)
要查询所有字段,查询通常是这样的:
FetchUsers{users(id:"2"){id,username,count}}
Run Code Online (Sandbox Code Playgroud)
但我想要一种方法来获得相同的结果,而无需编写所有字段,如下所示:
FetchUsers{users(id:"2"){*}}
//or
FetchUsers{users(id:"2")}
Run Code Online (Sandbox Code Playgroud)
有没有办法在GraphQL中执行此操作?
我正在使用Folkloreatelier/laravel-graphql库.
关于GraphQL的所有文章都会告诉你它有多棒,但它有什么缺点或缺点吗?谢谢.
我正在使用一个特定的GraphQL端点,虽然我提供了一个干净的JSON结构作为查询,当我得到结果时,我得到"edge"和"node"标签.似乎它正在污染我的数据而没有明显的好处.为什么它存在,是否有可能摆脱那些更快,更简单的数据解析?
谁有经验将两者结合使用?
我想一个将firebase调用放在相关字段的解析器中,将一些变量从组件props传递到查询的参数中.
让我们知道您的想法!
我用
POST type
URL http://######/graphql
Body:
query: "query: "{'noteTypes': {'name', 'label', 'labelColor', 'groupName', 'groupLabel', 'imageUrl'}}"
Run Code Online (Sandbox Code Playgroud)
但它返回 "消息":"必须提供查询字符串."
在阿波罗阵营文档http://dev.apollodata.com/react/queries.html#basics有被示出的组件时自动获取的例子,但我想运行查询一个按钮被点击时.我看到一个示例,当单击一个按钮时"重新"获取查询,但我不希望它最初查询.我看到有一种方法可以调用突变,但是你如何调用查询?
我一直试图解决这个问题,但没有找到一个强有力的答案。我正在尝试使用 useMutation 钩子执行登录突变。
TLDR;我想知道在选项中传递的 onError 和 useMutation 给我的错误之间到底有什么区别
这是我的代码片段
const [login, { data, loading, error }] = useMutation(LOGIN_QUERY, {
variables: {
email,
password
},
onError(err) {
console.log(err);
},
});
Run Code Online (Sandbox Code Playgroud)
在服务器端,我有一个用于登录的预设/硬编码电子邮件,我没有使用 Apollo 或任何其他客户端。在此登录突变的解析器中,如果电子邮件不相同,我只会抛出一个错误
throw new Error('Invalid Email');
Run Code Online (Sandbox Code Playgroud)
现在我想在客户端(React)处理这个错误。但我担心的是,如果我使用从 useMutation 钩子返回的“错误”并尝试以这种方式显示错误
render() {
...
{error && <div> Error occured </div>}
...
}
Run Code Online (Sandbox Code Playgroud)
错误在 UI 中更新,但随后 React 立即向我显示了一个带有 Unhandled Rejection (Error): Graphql error: My-custom-error-message 的屏幕
但是,如果我使用 onError 传递给 useMutate 函数的选项,那么它不会向我显示这个屏幕,我可以对错误做任何我想做的事情。
我想知道传递给选项的 onError 和 useMutation 给我的错误之间到底有什么区别,以及为什么 React 在不使用onError 时向我显示错误屏幕。
谢谢!
我想从服务器获取架构.我可以获得所有类型的实体,但我无法获得属性.
获得所有类型:
query {
__schema {
queryType {
fields {
name
type {
kind
ofType {
kind
name
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何获取类型的属性:
__type(name: "Person") {
kind
name
fields {
name
type {
kind
name
description
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何只在1个请求中获取具有属性的所有类型?或者更好:我如何通过mutators,enums,types获得整个架构......
graphql ×10
reactjs ×2
apollostack ×1
architecture ×1
falcor ×1
firebase ×1
graphql-js ×1
graphql-php ×1
laravel ×1
php ×1
postman ×1
react-apollo ×1
relayjs ×1
rest ×1
schema ×1