使用Apollo Client查询Yelp GraphQL API时如何解决身份验证错误

时间:2019-01-16 20:16:23

标签: reactjs graphql apollo-client yelp

我正在尝试创建一个基本的应用程序,该应用程序使用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")}}},
    };
}

我在这里错过了什么吗?任何建议表示赞赏!

谢谢!

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,到目前为止,我认为这里的问题是Yelp不支持CORS,即使我们使用no-cors也无济于事。 您可以查看下面的讨论。

GraphQL api returns 500 for a valid query #248

WKWebView CORS error #44

我是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,
});

Status Code: 200 OK

在此解决方案中,我必须使用'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

此外,您还可以查看以下屏幕截图,

Status Code: 400 Bad Request

我希望这会对某人有所帮助,并且我知道可能会有更好的解决方案,如果我对此有所改进,我会告诉您。