我正在尝试创建一个基本的应用程序,该应用程序使用Apollo Client查询Yelp GraphQL API。
当我尝试发送查询时,我收到401错误响应。
我已经与Yelp一起加入了开发人员Beta程序,并尝试刷新我的API密钥,但这没有用。这是我的index.js文件的代码。
private static void Main()
{
Dictionary<string, List<TimeLapse>> devices = GetDeviceList();
foreach (var device in devices)
{
Console.WriteLine("{0}: {1} total days", device.Key,
TimeLapse.Merge(device.Value).Sum(value => value.Duration.TotalDays));
}
GetKeyFromUser("Done! Press any key to exit...");
}
private static Dictionary<string, List<TimeLapse>> GetDeviceList()
{
return new Dictionary<string, List<TimeLapse>>
{
// device1 total should be 4 days (1/1 - 1/5)
{"device1", new List<TimeLapse>{
new TimeLapse {StartTime = DateTime.Parse("1/1/2019"),
EndTime = DateTime.Parse("1/3/2019")},
new TimeLapse {StartTime = DateTime.Parse("1/2/2019"),
EndTime = DateTime.Parse("1/3/2019")},
new TimeLapse {StartTime = DateTime.Parse("1/3/2019"),
EndTime = DateTime.Parse("1/5/2019")}}},
// device2 total should be 7 days (1/1 - 1/4 plus 1/6 - 1/10)
{"device2", new List<TimeLapse>{
new TimeLapse {StartTime = DateTime.Parse("1/1/2019"),
EndTime = DateTime.Parse("1/3/2019")},
new TimeLapse {StartTime = DateTime.Parse("1/3/2019"),
EndTime = DateTime.Parse("1/4/2019")},
new TimeLapse {StartTime = DateTime.Parse("1/6/2019"),
EndTime = DateTime.Parse("1/10/2019")}}},
// device3 total should be 2 days (1/1 - 1/2 plus 1/6 - 1/7)
{"device3", new List<TimeLapse>{
new TimeLapse {StartTime = DateTime.Parse("1/1/2019"),
EndTime = DateTime.Parse("1/2/2019")},
new TimeLapse {StartTime = DateTime.Parse("1/6/2019"),
EndTime = DateTime.Parse("1/7/2019")}}},
// device4 total should be 2 days (1/1 - 1/3)
{"device4", new List<TimeLapse>{
new TimeLapse {StartTime = DateTime.Parse("1/1/2019"),
EndTime = DateTime.Parse("1/3/2019")}}},
};
}
我在这里错过了什么吗?任何建议表示赞赏!
谢谢!
答案 0 :(得分:1)
我遇到了同样的问题,到目前为止,我认为这里的问题是Yelp不支持CORS,即使我们使用no-cors也无济于事。 您可以查看下面的讨论。
GraphQL api returns 500 for a valid query #248
我是YELP API的新手,我对Apollo Client的经验还不是很丰富。但是我的工作方法如下。我不会将此项目仅用于生产目的。我用herokuapp激活了cors。
const cache = new InMemoryCache();
// Seting up Apollo Client
const client = new ApolloClient({
uri: 'https://cors-anywhere.herokuapp.com/https://api.yelp.com/v3/graphql',
request: (operation) => {
operation.setContext({
headers: {
Authorization: `Bearer ${apiKey}`,
'Accept-Language': 'en-US',
},
});
},
cache,
});
在此解决方案中,我必须使用'Accept-Language': 'en-US',
,因为如果没有此操作,我会收到一个错误400 Bad request,默认情况是en-us;
code: "INVALID_LOCALE"
description: "The locale you specified is not valid."
也许您注意到我没有指定
“ Content-Type”:“ application / graphql”
那是因为它又给我们带来了400个错误的请求。 Apollo Client默认值的内容类型为“ application / json”,当我们指定“ application / graphql”时,此类型将被覆盖。 您可以在下面阅读有关此内容的有用讨论。
Getting 400 error "Must Provide Query String" from Yelp GraphQL API (using Apollo Client) #278
此外,您还可以查看以下屏幕截图,
我希望这会对某人有所帮助,并且我知道可能会有更好的解决方案,如果我对此有所改进,我会告诉您。