1.GraphQLとは?
GraphQLって何?
周りはGraphQLの話をたくさん聞きました.プロジェクト発表と面接でGraphQLについて質問を受けました...この間ずっとプロジェクトをしていて、新しい技術を勉強する時間がありません.GraphQLが何なのか勉強しなければなりません.
GraphQL docsが提供してくれた「実習医」を真似する前に、まずコンセプトをつかむべきだと思います.ちょうどいいです!kakotechで整理したブログ記事を見つけました.
ココア技術リファレンスリンク
GraphQL(以下gql)は、フェイスブック上で作成されたクエリー言語で、デビューして間もない新しい友人であるが2016年から急激にユーザーが増加している.
上述したように、gqlはsqlと同様に、データを効率的に要求するための言語であるが、構造的に大きく異なり、使用目的も異なる.
sql文がデータベースから効率的にデータを取得するために使用される場合、gqlはWebクライアントがサーバから効率的なデータを取得するために作成したクエリー言語です.
Webクライアントがサーバからデータを受信するクエリー言語?ここから概念が混同される.以前知っていたクエリー言語は、バックエンドサーバがクライアントリクエストを受信し、データベースにアクセスして適切なデータを検索するために使用されていました.クライアントにクエリーを記入しますか?
例を用いて既存のRestAPIと比較し,いくつかの疑問を少し解消した.
REST APIのどのような面を解決したいですか?
REST APIと比較すると、REST APIはURL、METHODなどを組み合わせているため、複数の端点が存在する.逆にgqlには端点が1つしかありません.
ソース:KakaoTechRest APIと比較
🤔 Rest APIには複数のEndpointがありますが、gqlには1つのEndpointしかありませんか?
既存のRestAPIメソッド論を使用してapiを設計する場合、必要なリソース(すなわち、クライアント上で必要なデータセット)に基づいて、各データセットに個別のエンドポイントが提供されます.最近行われたUFOプロジェクトのapiドキュメントを見てみましょう.
🤔 OverFetching & UnderFetching
既存のRestAPIでは「overfehing」と「Under ftching」の問題も存在する.例えば、以下のデータは、UFOプロジェクトがユーザ情報を要求したときに受信した値である.
{
ok: true,
result: {
user_id: 1,
email: "[email protected]",
nickname: "user1
password: "1234",
school_auth: null,
school_email: null,
country_id: null,
univ_id: null,
createdAt: "2021-07-26T10:35:39.000Z",
updatedAt: "2021-07-26T10:35:39.000Z",
university: null,
country: null
}}
何か問題がありますか?OverFetchingですユーザー情報が必要な部分もありますが、ログインユーザーのネット名を頭に表示するためにデータを要求する場合、ユーザーのネット名を使用するために他の不要なデータを受け取ることになります.
GraphQLによるデータ受信
逆にgqlではこのような取得問題は発生しない.データを要求する際に必要な情報を制御できます.
요청 쿼리
query{
user(user:1){
nickname
}
}
반환 쿼리
{
"data":{
"user":
{
"nickname: "jane",
}
}
UnderFetchingもgqlで簡単に解決できます.特定のデータを取得する前に、underfetchinは複数のデータ要求を必要とします./feed/ --> /notify/ --> /user/1
このようにして重要な情報を受信するために、毎回複数のapi要求が連続的に呼び出される.単純なリクエストフェーズが多くなるという問題もありますが、非同期処理も難しくなります.요청:
query {
feed {
comments
likeNumber
}
notifications {
isRead
}
user {
username
profilePit
}
}
응답:
{
feed: [
{
comments:1,
likeNumber: 20
}
],
notifications: [
{
isRead: true
},
{
,....
逆に、gqlの利点は、1回のクエリが所望の情報を正確に受信できるため、複数のエンドポイントを必要とせずに複数のAPIを呼び出す必要がないことである.Reference
この問題について(1.GraphQLとは?), 我々は、より多くの情報をここで見つけました https://velog.io/@heesungj7/Node-ApolloServer-GraphQL-API-서버-만들기1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol