繁体   English   中英

如何使用 Xamarin 中的 GraphQL 将数据存储在 Apollo 缓存中?

[英]How to store data in Apollo cache using GraphQL in Xamarin?

我正在使用 GraphQL 使用 AppSync 同步 aws dynamoDB 中的数据。

但现在我需要存储从 GraphQL API 获得的数据

我发现可以使用 Apollo 客户端将这些数据存储在缓存中,以便能够在离线模式下使用这些数据。

这是我使用 GraphQL 使用的代码:

amazonAppSyncClient = new AmazonAppSyncClient ("ACCESS_KEY_ID", "SECRET_ACCESS_KEY", REGION);
graphQLClient = new GraphQLClient ("https://6vl6q5h2c5bxrbmlimiia5hldy.appsync-api.us-west-2.amazonaws.com/graphql",
    new GraphQLClientOptions {
        HttpMessageHandler = new AWS4SignerMessageHandler (
            amazonAppSyncClient,
            "ACCESS_KEY_ID",
            "SECRET_ACCESS_KEY")
    });

public async Task<List<Book>> GetAllBooks () {
    var graphQLResponse = await graphQLClient.PostQueryAsync (@"query getBooks {
      listBooks {
      items {
      Id
      Title
      ISBN
      Price
      PageCount
      Author}}}");

    var json = graphQLResponse.Data;
    var value = json.GetValue ("listBooks").GetValue ("items");
    List<Book> books = value.ToObject<List<Book>> ();
    return books;
}

我从这里使用了这个代码: https://gist.github.com/NeilBostrom/cab8b9275e39bb90ecf8e06ab980664b

如何使用 apollo 在本地保存返回的数据?

如果你想在移动平台上使用 AppSync/Apollo 和 Xamarin 实现适当的离线缓存,你必须做很多工作。 首先,Apollo 是 Android 和 iOS 的原始缓存 GraphQL 客户端,而 Amazon AppSync ZF20E3C5E54C0AB3D375D66 库是基于这些的。 他们只是在上面构建了一些亚马逊特定的功能。

The problem is that even though libraries exist for both iOS and Android, they cannot be used as is with Xamarin, a separate binding project needs to be created so that you can invoke the libraries in you Xamarin specific C# code.

这是您需要做的:

  1. Create a Xamarin.iOS Binding Project to create a C# binding of the AppSync iOS SDK and follow this article on how to get it to work. Microsoft Docs上也有相当详细的信息,但它针对的是 Objective-C 代码,因此您需要注意某些差异。
  2. Create aa Xamarin.Android Java Bindings Library to create a C# binding of the AppSync Android SDK . 请按照 Microsoft Docs 上的这篇文章获取有关如何执行此操作的指导。
  3. 现在您已准备好使用 Xamarin.iOS 和 Xamarin.ZE84E30B9390CDB64DDB6DB2C 上的相关库如果我没记错的话,AppSync 库会自动将数据缓存在磁盘上,因此您甚至不需要做任何事情。 无论如何,在这一点上,我可以写一篇关于如何实现的三页文章,但如果你到了这一点,最好遵循我在上面链接到的 AppSync iOS 和 Android 存储库上的指导和教程。

编辑:如果上面看起来工作太多,您可以考虑的其他选项:

  • 尝试为Apollo iOSApollo Android创建一个绑定,并尝试以这种方式实现缓存。 无论如何,AppSync SDK 在内部使用它们(如下图所示),因此它们应该适合该任务。 在此处输入图像描述 资源

  • 如果您没有绑定到 Amazon 平台,还有其他几个 Graph QL 数据库和提供程序可能对 Xamarin 有更好的支持。

  • GraphQL 响应是纯 JSON。 如果您不需要复杂的增量处理等,您可以尝试自己为它构建一个缓存机制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM