簡體   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