[GraphQL] graphQL


What is GraphQL?


Graphでデータを表す言語であり、Runtimeでもある.QLのQuery Languageではクエリ言語と考えられる.実際、フロントエンドはAPIデータをクエリーする言語です.しかし、バックエンドではRuntimeレイヤの役割も果たします.

Why GraphQL?


REST APIは存在するが、なぜGraphQLを使用するのかは、GraphQLの利点が標準であるためである.Swagerを使用しなくても、GraphQLはschemaを介してドキュメントを介してAPIの機能範囲を公開します.また、スナップや欠スナップは発生しません.(クエリで必要なデータを抽出できるため)とEndPoint.決定的に、グラフィック構造を使用して新しいノードのみを追加すると、バージョンが管理されます.モバイルクライアントがアプリケーションをインストールした後、APIを更新しない限り、GraphQLはこの問題を解決することができます.ただし,古いノードを扱うとともに,それをメンテナンスする.

GraphQL API

{
	person(personID: 4){
    	name
        birthYear
    }
}
上記クエリ要求IDが4のpersonのnameとbirthYear.

ドキュメント


基本的なGraphQLリクエストをドキュメントと呼びます.ドキュメントには、Query、Variation、Subscribe、fragmentが含まれます.変数とmeta-dataも含まれます.
query GetEmployees($active: Boolean!){
	allEmployees(active: $active){
    	...employeeInfo
    }
}
fragment employeeInfo on Employee {
	name
    email
    startDate
}

query


GraphQLでは、Queryは読み取り専用でデータを抽出します.

mutation


GraphQLでは,突然変異はデータを変更した後に抽出される.

subscription


GraphQLでは、subscriptionがデータの変更をリアルタイムで受信し、socket通信を行う.データポーリングよりも有効です.

フィールド


GraphQLでは、Fieldは抽出するオブジェクトの各情報単位を記述する.scalaフィールドはqueryのリーフ値を表します.スカラータイプはInt、String、Float、Booleanです.
{
	me { # 객체를 기술한 필드
    	email #스칼라 필드
        birthday { # 객체를 기술한 필드
            month # 스칼라 필드
            year # 스칼라 필드
        }
        friends { #객체를 기술한 필드
        	name # 스칼라 필드
        }
    }
}

meta field


typeまたはschemaのRoot Fieldで始まるフィールドをMetafieldと呼びます.このクエリを内向クエリと呼びます.

上記のクエリは、モードがサポートするすべてのタイプを返し、各タイプの説明を含みます.
typeを使用して、単一のタイプの情報をチェックします.

上記のクエリは、Commitタイプをサポートするすべてのフィールドを返し、引数が付きます.

レコードの指定


単一レコードの指定

query UserInfo {
	user(email: "[email protected]") {
    	firstName
        lastName
        username
    }
}
userフィールドカッコのemailをフィールドパラメータ(fieldarguments)と呼びます.
単一のレコードを表します.パラメータ値はデータベースに存在する一意の値でなければなりません.
GraphQLは、すべてのオブジェクトを単一のレコードフィールドとして管理します.
query OrgInfo {
	organization(login: 'jscomplete') {
    	name
        description
        websiteUrl
        repositoies (first: 10){
          nodes {
            	  name
            }
        }
    }
}
上のハブAPI(az.dev/github.api)では、user、repository、project、organizationが単一のレコードフィールドに対応します.
制限レコード数は、自己変数(firstまたはlast)によって制限することができる.

ソートレコード


レコードのソートには、created at、upated at、pushd at、Name、Stargazerなどの異なるフィールドを使用してソートできます.(github apiで)
query orgReposByName {
	organization(login: "jscomplete") {
    	repositories(first: 10, orderBy: {field: NAME, direction: ASC}) {
        	node {
            		name
            }
        }
    }
}

edgeフィールドの使用

...
edges {
    cursor
    node {
    	name
    }
}
親ノードとしてedgeフィールドを追加すると、ページングレコードのリストが表示されます.この場合,Connectionとは相互に接続するノードのことである.(図の関係の例)

検索とフィルタ


graphqlは、フィールド引数によってフィルタ条件またはクエリーを指定することで、リストが結果を返す範囲を縮小できます.

命令変更応答の使用


@で始まる文字列を使用します.すべてのschemaでは、@include、@skip、および@deprecatedの3つの基本命令を使用できます.
query AllDirectives {
	__schema {//내향성쿼리 
    		directives {
            		name
                    description
                    locations 
                    args {
                    	name
                        description
                        defaultValue
                    }
            }
    }
}
コンテンツの結果から,@includeや@skipはifなどの条件を引数として必要とし,@deprecated命令はresourceという引数を必要とする.

へんすう


繰り返し使用する値がある場合は、ハードコーディングを防止するために変数を使用します.したがって、クエリーは再使用できます.前に$を追加したり、宣言タイプを追加したり、値を代入したりできます.