アポロサーバ対Prisma 2


導入



我々が一般的に尋ねられた質問は、「HasuraはPrisma 2と比較します」、あるいは、「Hasuraはどのようにアポロ(Server)と比較します」.
この質問に答えるために、理想的なシナリオはおそらく議論することです.
  • 機能の各ツールを提供します
  • それぞれの部分が通常、アプリケーションにおいて、そして、それらの関係において、一般に生きるところ
  • 早村


    hasuraは、1つ以上のデータソースに接続し、データソースのGraphSQL(および任意で、REST)APIを公開するWebサービスです.
    このデータソースのグラフには、統合データアクセスハブを作成するために、他のREADEやGraphSQL APIを組み合わせることができます.
    設定可能な認証層を使用すると、両方のDataSources(スキーマ/表/列/行レベル)へのアクセス許可、およびHashuraにプルしたLEFT/GraphSQL APIエンドポイントまたはリゾルバを設定できます.

    アポロサーバ


    アポロサーバは、ノードのためのGraphSQLサーバフレームワークです.js独自のGraphSQLサーバーの実装を書くことができます.
    アポロサーバから提供される例を見てみましょう.
  • https://www.apollographql.com/docs/apollo-server
  • 以下に、1つのクエリを持つGraphSQLサーバーを作成しますbooks , を返します.
    通常、データベースオブジェクトのboilerplate - crud操作以外にも、次のような処理を行うリゾルバがあります.
  • ストライプ/ブレインツリーで支払いを処理する
  • ユーザーにウェルカムメールを送信するときにサインアップ
  • フォームで満たされたパスワードをDBに格納されている安全にハッシュされたパスワードに対して比較することで認証を行い、一致するならJWTトークンに署名します
  • など
    <--カードエンド:マークダウン
  • const { ApolloServer, gql } = require('apollo-server');
    
    // A schema is a collection of type definitions (hence "typeDefs")
    // that together define the "shape" of queries that are executed against your data.
    const typeDefs = gql`
      # This "Book" type defines the queryable fields for every book in our data source.
      type Book {
        title: String
        author: String
      }
      # The "Query" type is special: it lists all of the available queries that
      # clients can execute, along with the return type for each. In this
      # case, the "books" query returns an array of zero or more Books (defined above).
      type Query {
        books: [Book]
      }
    `;
    
    const sampleBooks = [
      {
        title: 'The Awakening',
        author: 'Kate Chopin',
      },
      {
        title: 'City of Glass',
        author: 'Paul Auster',
      },
    ];
    
    // Resolvers define the technique for fetching the types defined in the
    // schema. This resolver retrieves books from the "books" array above.
    const resolvers = {
      Query: {
        books: () => {
          return sampleBooks
        },
      },
    };
    
    const server = new ApolloServer({ typeDefs, resolvers });
    server.listen().then(({ url }) => {
      console.log(`🚀 Server ready at ${url}`);
    });
    

    プリマ


    Prisma 2は、ノードを書くときにデータベースへのアクセスを提供するライブラリです.JSコード.ActiveRecord、EntityFramework、typeOrm、SQLAlchemy、または他に似ているかもしれない他の“Orm”ツールのカテゴリに分類されます.
    これは、データソースに接続し、データソースを照会することができますコードを書く能力を与えます-このコードは、ビジネスロジック(APIエンドポイント、内部スクリプト/ツール、どこ)の内部に住んでいます.

    これはどういう意味ですか。


    この点で結論が出てきたかもしれませんが、これらのツールは互いに異なった選択肢ではありません.
    アプリケーションを構築するときは、常に特定のタスクを処理するためのカスタムビジネスロジックのいくつかの並べ替えが必要です.
    ハハラはあなたのためにこのコードを書くことができません(それは少し不思議かもしれません、しかし、それは魔法でありません!)!これが意味するのは、このカスタムコードを書かなければならないということであり、最終的にはHasuraと統合する方法が必要です.
    Hasuraとカスタムビジネスロジックを統合する方法の一つは、リモートのスキーマを使用することです.これはアポロサーバへの要求を転送し、リゾルバ関数を呼び出します.
    または、おそらくあなたは急行している.プリズマはすでにあなたのビジネスロジックを実施の一部としてデータにアクセスし、それに統合されたJS API.
    Apache APIエンドポイントをHasuraに接続するには、ExpressとPrismaを両方のHashuraスタックに統合する方法です.

    結論


    私たちは、このポストがあなたに議論されたすべてのテクノロジーのより良い理解を与えたことを望みます、そして、具体例は必要に応じてこれらのツールがどのように相補的でありえるかを示す際に役に立ちました.