決して使用しないGraphSQL?恐れるな!


この記事はGraphQL それはあなたがPragmalangと美しいAPIを構築を開始することができます.

GraphSQLとは
GraphSQLはFacebookによってリリースされ、2015年に標準化された言語仕様です.言語は、開発者にとってより簡単にフロントエンドアプリケーションからデータを取得するように設計されています.いくつかの利点は以下の通りです.

  • タイプセーフコミュニケーション:あなたは常にあなたが受信しているデータのタイプ/形状、サーバーが期待するデータの型を知っている.

  • 標準的なドキュメント:すべてのGraphSQL APIはドキュメントに関してある標準に従わなければなりません.多くのツールは、このドキュメントを解釈する方法を知っていますintrospecting API.

  • GraphSQLは標準であるので、多くのツールはすべてのGraphSQL APIで動作するように設計されています.たとえば、GraphSQLスキーマに基づいたTypeScriptの定義を生成するツールなど、Webアプリケーションで使用されます.

  • データの非フェッチ/オーバーフェッチはありません.必要なデータを正確に選択し、単一のクエリ内で複数の操作を実行できます.
  • GraphSQLは実際に2つの言語を1つにまとめる:スキーマ定義言語、およびクエリ言語です.

    スキーマ定義言語
    スキーマ定義言語は、APIが動作するデータの型を記述するために使用されるものであり、APIは、この型で行うことができるものです.例えば、
    # This is a type definition
    type Character {
      name: String! # '!' means "required" or "not nullable"
      friends: [Character] # '[]' mean "array". Types can be recursive
      homeWorld: Planet! # Types can relate to each other
    }
    
    # Another type definition
    type Planet {
      name: String!
      climate: String!
    }
    
    # A special type definition that specifies
    # the queries that a client can perform
    type Query {
      getCharacter(name: String!): Character
      #            ^^^^^^^^^^^^^   ^^^^^^^^^
      #           Query Arguments  Query Return Type
      # Note that the return type is `Character`, not `Character!`
    }
    

    Comments in schema definitions are typically used for documentation. Comments in the example above were used for clarification purposes.


    GraphSQL APIには、クライアントが実行できる3種類の操作があります.
  • クエリ:データの簡単な検索
  • 突然変異:既存のデータへの変更、または新しいデータの追加.
  • サブスクリプション:時間をかけてDTAの検索.
  • GraphSQL APIを開発する場合は、通常、サーバーが扱うことができるクエリ、突然変異、およびサブスクリプションを指定する必要があります.上の例では、サーバーは文字の名前をとる単一のクエリを実行できるだけです.しかし、ここでキャッチします.クエリを扱う* * * *を指定する必要があります.従来のGraphSQLフレームワークを使用すると、型の各フィールドをデータベースから取得する方法を指定するには、リゾルバとして知られているものを定義する必要があります.

    クエリ言語
    GraphSQL APIを作成したら、多くのGraphSQLクライアントを使用してサーバーに操作を送信できます.ほとんどのGraphSQL APIはGraphQL playground クエリを書くには、ボタンをクリックしてサーバーに送信し、JSON結果を表示できます.しかし、グラフィカルなアプリケーションを構築しているとき、あなたはclient library あなたのコードから.クエリの例は次のようになります.
    query {
      rick:getCharacter(name: "Rick Sanchez") { # We gave the operation a 'rick' alias
        name # Rick's name, just to make sure
        friends {
          name # We only want their names
        }
        homeWorld {
          name # We only want the name
        }
      }
    }
    
    このクエリ-もしリックがデータベースに存在するなら、
    {
      "rick": {
        "name": "Rick Sanchez",
        "friends": [],
        "homeWorld": {
          "name": "Earth"
        }
      }
    }
    

    Rick's friends array is empty because he has no friends.



    プラグマはどこに入りますか.
    GraphSQL APIを開発している場合は、必要な操作と型をすべてスキーマで指定し、これらの操作に対してリゾルバを実装する必要があります.もちろん、データベースを最初に設定する必要があります.
    pragmaとは、pragmaスキーマを定義するだけでよいことです.それだ!これは、データベース、GraphSQLスキーマ、および必要なすべての操作を生成します.さらに、非常に単純な構文では、これらの操作の機能をimport ライブラリから通常の関数を使用しているかのように.以下はpragmaスキーマの例です.
    config { projectName = "character_api" }
    
    @1 model Character {
      @1 name: String @primary
      @2 friends: [Character]
      @3 homeWorld: Planet
    }
    
    @2 model Planet {
      @1 name: String
      @2 climate: String
    }
    
    PragmaスキーマとGraphSQLスキーマの小さな違いに注意してください.pragmaでは、typemodel . モデルとモデルフィールドはユニークなインデックスを必要とする.@1 , @5 ), これにより、スキーマへの変更に基づいて自動的に大部分のデータベース移行を実行することができます.
    上記のスキーマを実行することにより、pragmaによって生成されたGraphSQL APIを探索することができますInstall Pragma ), または別の例をチェックアウトすることができますThe Generated API ドキュメントのセクション.
    ご質問やご意見がございましたら、ご参加くださいDiscord channel , またはコメントを残す!
    あなたが先週持っていた新しいアイデアを作り始める!数分しかかかりません