Sobes.tech
Junior

Ի՞նչ է GraphQL-ը։

sobes.tech AI

Պատասխան AI-ից

GraphQL-ը API-ի համար հարցումների լեզու է և այդ հարցումները կատարելու համար գործարկման միջավայր։ Այն թույլ է տալիս հաճախորդին պահանջել հենց այն տվյալները, որոնք նրան անհրաժեշտ են, որոշելով պատասխանների կառուցվածքը։ Տարբեր է ավանդական REST API-ներից, որտեղ հարցում են կատարվում վերջնակետերին, GraphQL-ը ուղարկում է հարցում մեկ վերջնակետին՝ նշելով պահանջվող դաշտերը։

Հիմնական գաղափարներ GraphQL-ի:

  • Սխեմա (Schema): Դիտարկում է տվյալների տեսակները, հասանելի գործողությունները (հարցումներ, մուտացիաներ, բաժանորդագրություններ) և տեսակների միջև կապերը։ Գրվում է Schema Definition Language (SDL)-ով։
  • Տեսակներ (Types): Դիտարկում են տվյալների կառուցվածքը։ Կարող են լինել սալարկային (String, Int, Float, Boolean, ID), օգտագործողի սահմանած կամ կոնտեյներային տեսակներ (Lists, Non-Null)։
  • Հարցումներ (Queries): Օգտագործվում են տվյալներ ստանալու համար սերվերից։ Հաճախորդը նշում է, թե որ դաշտերը պետք է, և սերվերը վերադարձնում է տվյալները միայն այդ դաշտերի համար։
  • Մուտացիաներ (Mutations): Օգտագործվում են տվյալների փոփոխության համար սերվերում (ստեղծում, թարմացում, ջնջում): Դրանք նման են հարցումներին, բայց հստակ նշում են փոփոխության վիճակը։
  • Բաժանորդագրություններ (Subscriptions): Позволяют клиенту получать обновления в реальном времени по мере изменения данных на сервере.

GraphQL-ի առավելությունները:

  • Արդյունավետություն: Հաճախորդը պահանջում է միայն անհրաժեշտ տվյալները, ինչը նվազեցնում է փոխանցվող տեղեկատվության ծավալը և կանխում ավելորդությունը (overfetching):
  • Կնքվածություն: Հաճախորդը ինքն է որոշում պատասխանների կառուցվածքը, ինչը հեշտացնում է API-ի զարգացման և զարգացման գործընթացը։
  • Բարելավված կատարողականություն: Տվյալների արդյունավետ ստացումը կարող է արագացնել էջերի բեռնումը։
  • Կոշտ տիպավորում: Սխեման ապահովում է հստակ սահմանված պայմանագիր հաճախորդի և սերվերի միջև, ինչը հեշտացնում է վավերացումը և սխալների հայտնաբերումը։

Նմուշ հարցում:

query GetUser {
  user(id: "123") {
    name
    email
    posts {
      title
    }
  }
}

Նմուշ մուտացիա:

mutation CreatePost {
  createPost(input: { title: "New Post", content: "..." }) {
    id
    title
  }
}