Мазмунга өтүү

Сабактын башталышы

GraphQL API

Кардар так өзүнө керектүү маалыматты сураган бир типтештирилген кириш чекити

Негизги идея: GraphQL — бул сиздин API'ге суроо тили жана ошол суроолорго жооп берген иштөө чөйрөсү. Ар бири белгиленген формадагы маалымат кайтарган көптөгөн туруктуу REST-жолдордун ордуна, сиз катуу типтештирилген схема турган бирдиктүү /graphql кириш чекитин ачасыз. Кардар так керектүү талаалардын топтомун сүрөттөгөн суроо жөнөтөт, ал эми сервер так ошол форманы кайтарат — кем эмес, көп эмес. Сиз мурда Express менен REST API курдуңуз; GraphQL — бул сиз мурдатан билген ошол эле маалымат булактарынын (SQL, MongoDB, башка сервистер) үстүнө коюлган башка келишим.
Сабактын аягында сиз төмөнкүлөрдү жасай аласыз:
  • объекттик типтер, Query жана Mutation менен GraphQL-схемасын SDL'де жазуу;
  • резолверлерди ишке ашыруу жана алардын (parent, args, context, info) сигнатурасын окуу;
  • суроолорду (окуу) мутациялардан (жазуу) айырмалоо жана ар бир операцияны түзүү;
  • N+1 маселесин таануу жана DataLoader аны батчинг менен кантип жоготорун түшүндүрүү;
  • GraphQL менен REST'тин чынчыл алмашууларын салмактап, аңдап тандоо.

1. GraphQL эмне үчүн керек: ашыкча жана жетишсиз тандоо

REST API'де ар бир эндпоинт белгиленген жоопту кайтарат. Колдонуучунун атын жана анын акыркы үч постунун аталыштарын талап кылган мобилдик экранды элестетиңиз. REST менен сиз көбүнчө эки начар вариант алдында каласыз:

  • Ашыкча тандоо (over-fetching). GET /users/42 бүт колдонуучу объектин кайтарат — email, дарек, ырастоолор, убакыт белгилери — сизге болгону ат керек болгондо. Ар бир сурооодо байттар текке кетет.
  • Жетишсиз тандоо (under-fetching, ашык кайрылуулар). Бул эндпоинт посттарды камтыбайт, ошондуктан кардар экинчи GET /users/42/posts сурооосун жасайт. Бир экран үчүн эки тармактык кайрылуу; экран көбөйгөн сайын тармакта ызы-чуу көбөйөт.

GraphQL кардар үчүн эки маселени тең жоёт. Кардар так өзүнө керектүү маалымат дарагын сүрөттөгөн бир суроо жөнөтөт:

query {
  user(id: 42) {
    name
    posts(last: 3) { title }
  }
}

Сервер так ушул форманы кайталаган JSON-объект менен жооп берет: name талаасы бар user жана ар биринде title бар posts массиви — башка эч нерсе жок.

Салыштыруу. REST — бул белгиленген менюсу бар ресторан: ар бир тамак (эндпоинт) алдын ала даярдалып берилет, ал эми гарнир керек болсо — экинчи тамак заказ кыласыз. GraphQL — бул өзүңүз тандаган боул: сиз бир заказ бланкында так керектүү ингредиенттерди белгилейсиз, ашкана болсо бир боул чогултат. Ашкана (сиздин маалымат булактарыңыз) өзгөрбөйт; болгону заказ келишими өзгөрөт.

Маанилүү: GraphQL сиздин маалымат базаңызды же бизнес-логикаңызды алмаштырбайт. Ар бир талаанын астында Postgres, MongoDB, кэш же башка HTTP-сервистен окуган кадимки код бар — мурдагы курстардан ушул эле көндүмдөр.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө