Как хранить данные в кеше Apollo, используя GraphQL в Xamarin? - PullRequest
0 голосов
/ 31 октября 2019

Я использую GraphQL для синхронизации данных в AWS DynamoDB с помощью AppSync.

, но теперь мне нужно сохранить данные, полученные из API GraphQL

Я обнаружил, что клиент 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?

1 Ответ

0 голосов
/ 31 октября 2019

Если вы хотите добиться правильного автономного кэширования на мобильных платформах, используя AppSync / Apollo с Xamarin, вам придется проделать немало работы. Во-первых, Apollo - это оригинальный клиент для кэширования GraphQL для Android и iOS, на котором основаны библиотеки Amazon AppSync SDK. Они просто создают некоторые специфические для Amazon функции.

Проблема в том, что, хотя библиотеки существуют как для iOS, так и для Android, их нельзя использовать как и в Xamarin, необходимо создать отдельный проект связывания, чтобы вы моглиВы можете вызывать библиотеки в своем коде C # для Xamarin.

Вот что вам нужно сделать:

  1. Создать проект привязки Xamarin.iOS для создания привязки C # AppSync iOS SDK и следуйте этой статье о том, как заставить его работать. Есть также довольно подробная информация о Microsoft Docs , но она предназначена для кода Objective-C, поэтому необходимо учитывать некоторые различия.
  2. Создание библиотеки привязок Java Xamarin.Android для созданияпривязка C # AppSync Android SDK . Следуйте этой статье в Microsoft Docs для получения инструкций о том, как это сделать.
  3. Теперь вы готовы использовать соответствующие библиотеки в Xamarin.iOS и Xamarin.Android. Если я не ошибаюсь, библиотеки AppSync автоматически кешируют данные на диске, поэтому вам даже не нужно ничего делать на вашей стороне. В любом случае, на данный момент я мог бы написать статью на трех страницах о том, как добиться чего-то, но если вы дойдете до этого, лучше всего следовать указаниям и учебным пособиям по репозиториям AppSync для iOS и Android, на которые я ссылался выше.

Редактировать: Другие варианты, которые вы могли бы рассмотреть, если выше, выглядит слишком много работы:

  • Попробуйте создать привязку для Apollo iOS и Apollo Android и попытайтесь добиться кэширования таким образом. В любом случае, AppSync SDK использует их внутри (как показано на рисунке ниже), поэтому они должны подходить для этой задачи. enter image description here Источник

  • Если вы не привязаны к платформе Amazon, есть несколько других графовБазы данных и поставщики QL, которые могут лучше поддерживать Xamarin.

  • Ответы GraphQL - чистый JSON. Вы можете просто попытаться создать для него механизм кэширования, если вам не нужна сложная дельта-обработка и т. Д.
...