[訳]Hello Apollo:GraphQLを使用したAndroid Appを作成

4922 ワード

原文タイトル:Hello Apollo Writing Your First Android App With GraphQL原文アドレス:https://android.jlelse.eu/hello-apollo-writing-your-first-android-app-with-graphql-d8edabb35a2 作者:Pranay Airan翻訳:leesniper
モバイルアプリケーション開発者であれば、より速いAPIとより速いアプリケーションの重要性を理解するに違いありません.特に、データトラフィックが高い国では、必要なデータだけを取得することが特に重要になります.
しかし、APIは複数のクライアントのために設計されており、各クライアントには異なる要求があり、多くの場合、これらのAPIはモバイルアプリケーションに対して最適化されていないことがわかります.これがGraphQLのような新しい技術が役に立つ場所です.
GraphQLは、クライアントが必要とするデータを正確に取得できるAPI向けのクエリー言語です.GraphQLをまだ知らない場合は、次のリンクで詳細を確認できます.http://graphql.org/.
GraphQL on Android
AndroidプラットフォームでGraphQL APIを使用する方法を見てみましょう.ネット上にはサードパーティ製のライブラリがたくさんありますが、これまでアンドロイドプラットフォームにはGraphQLライブラリ:Apolloが1つしかありませんでした.
Apollo Androidは素晴らしいGraphQLライブラリで、GraphQL APIを使いやすくすることができます.2つの主要なコンポーネントがあります.
  • Apolloコード生成(Apollo Codegen).このコンポーネントはButterKnifeのようにコードを生成できるgradleプラグインで、apollo codegenはコンパイル時に標準graphqlクエリからJava modelを生成します.
  • ネットワークとキャッシュ(Networking/Caching).Apollo Androidのもう一つのコンポーネントは、GraphQL APIとすべてのネットワーク通信を担当し、返されたデータを正しいmodelに解析し、動的データをGraphQLクエリーと応答キャッシュに渡すことができます.

  • Hello World
    GraphQLとApollo Androidの動作原理を知っています.次に、ApolloをAndroidアプリケーションに統合する方法を見てみましょう.
    既存のプロジェクトがない場合は、空のアンドロイドプロジェクトを作成します.プロジェクトレベルのbuild.gradleファイルにこの行を追加します.
    classpath 'com.apollographql.apollo:gradle-plugin:0.3.2'
    

    この行はcom.android.tools.の後に置くべきです.アプリケーションのbuild.gradleファイルを開き、この行を追加します.
    apply plugin: 'com.apollographql.android'
    

    この行はcom.android.applicationの下にあるはずです.KotlinプロジェクトでApolloを使用したい場合は、ApolloプラグインをKotlinプラグインの前に追加します.この2つの依存があれば、Apolloを私たちのプロジェクトに追加しました.
    コード生成(Codegen)
    ApolloはGraphQLリクエストとschemaファイルを受信し、Javaクラスを生成します.それがどのように働いているのか研究してみましょう.
  • src/mainの下にjava/resフォルダと同じレベルのフォルダを作成します.このフォルダに任意の名前を付けることができます.graphqlと名付けます.
  • このフォルダの下にschema.jsonファイルを追加します.Schema.jsonは、GraphQL API、すべてのフィールド、入力パラメータなどの情報を記述するファイルです.ここにschemaファイルの例があります.
  • 同じフォルダに拡張子.graphqlというGraphQLクエリー(query)ファイルを追加します.これらのクエリーは、Apollo codegenによって返されるデータ構造を生成するために使用されます.ここにはGraphQLファイルの例があります.

  • schemaファイルと.graphqlファイルを追加した後、プロジェクトを再buildします.Apolloはこれらのクエリー(query)とモード(schema)を解析し、コードを生成します.buildが完了すると、app/build/generated/source/apolloフォルダの下に生成されたファイルを表示できます.
    に糸を通す
    Apollo依存関係を追加し、コードを生成しました.次に、すべてをつなぎ、最初のGraphQLネットワークリクエストを作成します.
    この例示的なアプリケーションでは、GitHubの例示的なGraphQL APIを使用します.https://githunt-api.herokuapp.com/graphql
    ApolloはOkHTTPをネットワーククライアントとして使用しています.OkHttpに慣れている場合は、OkHttpを使用してheadersとinterceptorsを追加できることを知っています.
    要求ヘッダ情報の追加
      OkHttpClient okHttpClient = new OkHttpClient.Builder()
          .addInterceptor(logging)
          .build();
    

    キャッシュを有効にしたい場合は、apolloが3レベルのキャッシュをサポートしています.このリンクを使用して、キャッシュに関する詳細を参照してください.https://github.com/apollographql/apollo-android.キャッシュを使用する場合は、次の依存関係を追加する必要があります.
    compile "com.apollographql.apollo:apollo-android-support:0.3.2"
    

    OkHttp ClientとCacheがあり、Apollo clientオブジェクトを作成できます.
    apolloClient = ApolloClient.*builder*()
            .serverUrl(*BASE_URL*)
            .okHttpClient(okHttpClient)
            .normalizedCache(normalizedCacheFactory, cacheKeyResolver)
            .build();
    

    キャッシュの部分はオプションで、Apolloクライアントが作成されると、すべてのネットワークリクエストが同じクライアントを使用できます.
    最初のGraphQL リクエスト
    私たちの例のAPPでは、Apolloは私たちの例.graphqlファイルからFeedQueryクラスを生成します.このクラスを使用してネットワーク呼び出しを行い、新しく作成したapolloClientオブジェクトを使用します.
    要求を作成し、すべてのパラメータを渡す
    FeedQuery feedQuery = FeedQuery.*builder*()
            .limit(*FEED_SIZE*)
            .type(FeedType.*HOT*)
            .build();
    

    LimitとTypeはgraphQLクエリの動的パラメータであり、Apolloはこれらのパラメータのsettersメソッドを自動的に作成し、javaコードからこれらのパラメータを渡すことができます.
    ApolloCallの作成
    ApolloCall githuntFeedCall = apolloClient
                                                 .query(feedQuery);
    

    Apolloは通常のコールバックとRxJavaをサポートします.サンプルプログラムには2つのAPIがあり、1つは通常のコールバックで使用され、1つはRxJavaで使用されます.この文章では、コールバック方式がどのように働いているかを見てみましょう.
    githuntFeedCall.enqueue(new ApolloCall.Callback() {
        @Override
        public void onResponse(@Nonnull Response response) {
            FeedQuery.Data data = response.data();
        }
    
        @Override
        public void onFailure(@Nonnull ApolloException e) {
    
        }
    });
    

    通常のコールバックメソッドを使用するには、enqueue関数を呼び出すときにApolloCall.Callbackコールバックを転送する必要があります.Retrofitのスタイルに似ています.
    Androidアプリケーションで最初のGraphQL APIを使用することに成功しました.
    GraphQLは強力で、RESTベースのAPIに代わることができます.複雑なAPIを処理しており、GraphQLをサポートしている場合は、GraphQLに切り替えることでアプリケーションを簡素化できます.
    ここには完全なサンプルプログラムがありますhttps://github.com/apollographql/apollo-android/tree/master/apollo-sample.しかし、Apolloのサンプルアプリには、すべてのプロジェクトレベルの依存関係が追加されており、うまく機能していません.
    そこで、サンプルappを修正し、すべてのプロジェクトレベルの依存関係を削除しました.次のリンクから、ApolloとGraphQLを使用する完全な有効なアプリを見つけることができます.https://github.com/pranayairan/HelloApolloAndroid