这是我在stackoverflow上的第一篇文章(长时间阅读器)。我主要来自Python背景,对Ruby很新。我想知道构建Ruby GraphQL API的推荐方法是什么,如下所示。每个密钥都有一个解析器,它请求不同的网站API来获取相关数据。这些目前以下列方式嵌套在汽车下(我删除了他们正在打击的实际http源,因为你需要api密钥):
Types::CarsType = GraphQL::ObjectType.define do
name "Cars"
field :count, types.ID
field :contact, types.String
field :prices do
type Types::PricesType
resolve ->(obj, args, ctx) {
HTTParty.get('http://example.com').parsed_response.fetch('some_key').map { |data| OpenStruct.new(data) }
}
end
field :inquiries do
type Types::InquiriesType
resolve ->(obj, args, ctx) {
HTTParty.get('http://example1.com').parsed_response.fetch('some_key').map { |data| OpenStruct.new(data) }
}
end
end
Types::InquiriesType = GraphQL::ObjectType.define do
name "Inquiries"
field :name, types.String
field :phone, types.String
end
Types::PricesType = GraphQL::ObjectType.define do
name "Prices"
field :max, types.String
field :min, types.String
field :suggested, types.String
end
Types::QueryType = GraphQL::ObjectType.define do
name 'Query'
field :cars, types.String do
type Types::CarsType
argument :brand, !types[types.String]
resolve ->(obj, args, ctx) {
HTTParty.get('http://example2.com').parsed_response.fetch('some_key').map { |data| OpenStruct.new(data) }
}
end
end
示例查询:
query {
cars(brand: "ford") {
count
contact
prices {
max
min
suggested
}
inquiries {
name
phone
}
}
}
这很好但我觉得这个方法并没有充分利用GraphQL。当我看到它时,一些直接的问题是,如果您要进行这样的查询,那么现在只需要一个API请求就会产生两个API请求(客户没有请求cars
上的任何字段,只是查询) 。查询是汽车的属性,所以我认为嵌套在cars
下是有意义的吗?
query {
cars(brand: "ford") {
inquiries {
name
phone
}
}
}
我已经查看了连接,但我不确定这是否是他们的正确用例。具有设计可靠的GraphQL API经验的人能够称重吗?我应该尝试以某种方式利用工会或接口吗?非常感谢你。