GraphQL. HTTP-ում Հանգստանալու այլընտրանք


Պարզեք, թե ինչպես GraphQL API-ն կարող է ձեզ լրացուցիչ ուժ տալ և կրճատել ձեր զարգացման ժամանակը:

Բազմաթիվ բաց կոդով ճարտարապետական ստանդարտներ կան հավելվածների կառուցման և բաշխման համար: REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) և GraphQL API-ներն ամենահայտնին են:

RESTful API-ներն ամենաշատ օգտագործվող API ճարտարապետական ստանդարտներն են: Եթե դուք գրել եք բարդ RESTful API-ներ բազմաթիվ վերջնակետերով, հավանաբար հասկացել եք, թե որքան բարդ կարող են լինել դրանք: Սա հատկապես ճիշտ է, եթե վերջնական կետերի միջև կան միայն աննշան տարբերություններ:

Դուք կարող եք նաև խնդիրներ ունենալ տվյալների առբերման հետ կապված, քանի որ RESTful API-ները բավականաչափ ճկուն չեն կոնկրետ տվյալներ ընտրելու համար: GraphQL-ը լուծում է RESTful API-ների այս խնդիրները:

Ի՞նչ է GraphQL-ը:

GraphQL (Graph Query Language) հարցումների լեզու և գործարկման ժամանակ API-ներ ստեղծելու համար: Ի տարբերություն REST API-ների, որոնք ունեն տվյալների սպառման շատ վերջնակետեր, GraphQL API-ներն ունեն մեկ մուտքի կետ: Դուք կարող եք ստանալ կոնկրետ տվյալներ՝ դրանք նկարագրելով հարցումներում:

GraphQL հստակեցումը սահմանում է հարցման լեզուն և ինչպես են աշխատում GraphQL սերվերները: Դուք կարող եք կառուցել և օգտագործել GraphQL API-ներ սերվերի կողմից՝ Python-ից մինչև Javascript և ցանկացած լեզվով, որն աջակցում է HTTP-ին:

Meta-ն կառուցեց GraphQL-ը 2012 թվականին՝ որպես REST-ի այլընտրանք՝ HTTP-ի վրա կառուցելու համար: Նրանք թողարկեցին GraphQL-ը որպես բաց կոդով ստանդարտ 2015-ին: Այսօր GraphQL հիմնադրամը վերահսկում է GraphQL ճշգրտման մշակումը:

GraphQL-ը բավականին նոր է, ցածր ընդունմամբ, և այն օգտագործելու համար թաքնված ծախսեր կան: GraphQL API-ների կառուցումը կարող է անհարկի բարդ լինել, հատկապես մի քանի վերջնակետերով փոքր նախագծերի համար:

Բացի այդ, GraphQL-ի բոլոր հարցումները ի վերջո վերադարձնում են 200 կարգավիճակի կոդ՝ անկախ հարցման վիճակից:

Ինչպե՞ս է աշխատում GraphQL-ը:

Ի տարբերություն REST-ի, որը ուղղված է ռեսուրսներին, GraphQL-ը պահանջում է, որ դուք մտածեք տվյալների մասին որպես գրաֆիկ՝ տվյալների հետ փոխազդելու համար: Դուք կարող եք նշել տվյալների կառուցվածքը, և ճշգրտումը ապահովում է հարցումների ամուր միջերես՝ API-ի հետ HTTP-ով փոխազդելու համար: Դուք կկարողանաք օգտագործել տարբեր հնարավորություններ՝ կախված ձեր ընտրած GraphQL փաթեթից կամ գրադարանից:

GraphQL սխեմաները ներառում են օբյեկտների տեսակներ, որոնք սահմանում են պահանջվող օբյեկտը և դրա հասանելի դաշտերը: API հարցումների և մուտացիաների դեպքում GraphQL փաթեթը վավերացնում է հարցումները և կատարում հարցումները՝ հիմնված նշված կարգավորիչի գործառույթների (լուծիչների) վրա:

Ինչու՞ պետք է օգտագործեք GraphQL:

REST-ը հեշտ օգտագործման ստանդարտ է, և ծրագրավորման լեզուների մեծամասնությունն ունի RESTful API-ներ արագ կառուցելու գործիքներ: Այնուամենայնիվ, կան բազմաթիվ խնդիրներ RESTful API-ների ստեղծման և սպառման հետ կապված:

Ահա REST-ի հետ կապված որոշ խնդիրներ, որոնք ստիպում են մշակողներին գերադասել GraphQL-ը որոշ օգտագործման դեպքերի համար:

Տվյալների անարդյունավետ բեռնում

RESTful API-ները փոխանցում են տվյալները՝ հիմնված վերջնական կետի ճշգրտման վրա: Նրանք բավականաչափ ճկուն չեն, որպեսզի կարողանան ստանալ տվյալներ այն սահմաններից դուրս, ինչ կոշտ կոդավորված է վերջնական կետի մշակման գործառույթում:

Ենթադրենք, վերջնակետը վերադարձնում է տվյալների ցանկը զանգի ժամանակ, և դուք պետք է նշեք արժեքներ կամ չափորոշիչներ դաշտերի համար: Այդ դեպքում մշակողը պետք է ստեղծի վերջնակետ և սահմանի բիզնես տրամաբանությունը՝ տվյալները վերադարձնելու համար։ Դուք կարող եք ձեռքով վերլուծել արժեքավոր ռեսուրսը, որն ի վերջո ավելի շատ ժամանակ է պահանջում:

GraphQL-ը լուծում է տվյալների անարդյունավետ առբերման խնդիրը, քանի որ դուք կարող եք հարցումներ կատարել API-ներից՝ ճկունորեն չափանիշների և բնութագրերի հիման վրա տվյալները վերադարձնելու համար:

GraphQL API-ները ինտերակտիվ են. Դուք կարող եք նշել այն տվյալները, որոնք անհրաժեշտ են առբերելու համար հեշտ, ընթեռնելի շարահյուսությամբ:

{
    user(where: {age: {_eq: "89"}}) { 
        name
        school(where: {alive: {_eq: true}}) {
            bio
            nationality
        }
    }
}

Վերևում գտնվող GraphQL հարցումը հարցում է կատարում օգտատիրոջ սխեման այն գրառումների համար, որտեղ տարիքը դաշտը 89 է: Հարցումն ունի ներկառուցված հարցում այն գրառումների համար, որտեղ կենդանի դաշտը: գնահատում էճշմարիտ: Այն վերադարձնում է անուն, կենսագրություն և ազգություն դաշտերը սխեմայից:

Արագ զարգացում

GraphQL API-ներ կառուցելն ու սպառելը ավելի հեշտ է, քան REST-ը, հատկապես, երբ նախագծի չափը մեծանում է: Զարգացման փուլում դուք ստիպված չեք լինի զարգացնել այնքան երթուղիներ և կարգավորիչի գործառույթներ, որքան կկատարեք RESTful API-ներ մշակելիս: GraphQL API-ների սպառումը այնքան էլ հոգնեցուցիչ չէ, որքան RESTful API-ները:

REST-ում տարբեր վերջնակետերը հասանելի են դարձնում տարբեր ռեսուրսներ, ի տարբերություն GraphQL-ի, որտեղ կա մեկ վերջնական կետ: Սա տալիս է ճկունություն և կատարողականություն, և հարցումները կարող են կանչել լուծիչի տարբեր գործառույթներ:

GraphQL սխեմայի սահմանման լեզուն

GraphQL Schema Definition Language-ը (SDL) սահմանում է GraphQL ծառայությունների սխեմաները:

GraphQL SDL շարահյուսությունը հեշտ է կարդալ և հասկանալ: Դուք կնշեք ձեր սխեմայի կառուցվածքը ֆայլում .graphql կամ .graphqls ընդլայնմամբ:

type Human {
    name: String!
    age: Int!
}
 
input AddHuman {
    name: String!
    age: Int!
}
 
type Mutation {
    CreateHuman(input: AddHuman!): Human!
    DeleteHuman(id: Int!): String!
    UpdateHuman(id: Int!): String!
}
 
type Query {
    GetHuman(id: Int!): Human!
    GetHumans: [Human!]!
}

Վերը նշված GraphQL կոդը GraphQL API-ի սխեման է, որը սահմանում է API-ի կառուցվածքը հարցումների համար: Սխեման սահմանում է CRUD ֆունկցիոնալությունը API-ի համար:

Հաճախորդի կողմից, հիմնվելով սխեմայի կառուցվածքի և հաճախորդի տվյալների կամ գործողության վրա, հաճախորդը կարող է կատարել հարցում (GET կամ DELETE REST-ում) կամ մուտացիա (PUT կամ ՓՈՍՏ):

Ահա Մարդու սխեմայի հարցումների օրինակ:

query Human {
    name
    age
}

Վերոնշյալ հարցումը կվերադարձնի մարդու սխեմայի անունը և տարիքը դաշտի տվյալները:

GraphQL մուտացիաները ունեն բավականին տարբեր շարահյուսություն, ի տարբերություն հարցումների: Ահա Մարդու սխեմայի մուտացիայի գործողության օրինակ:

mutation {
    CreateHuman(input:{ name:"man", age:1000000000000000,}) {
        name
        age
    }
}

Մուտացիայի կոդը հաճախորդին մուտքագրում է անուն և տարիք դաշտերը և վերադարձնում տվյալները դաշտերից:

Ձեր GraphQL API-ն կառուցելիս ձեզ անհրաժեշտ կլինի տվյալների պահեստ՝ հաստատակամության համար: Ինչպես REST-ը և HTTP-ի վրա հիմնված վեբ ճարտարապետության մեծ մասը, GraphQL-ն քաղաքացիություն չունի, և դուք կարող եք օգտագործել ցանկացած տվյալների պահեստ կամ տվյալների բազա ձեր հավելվածի համար:

GraphQL API-ի կառուցում

GraphQL-ը հստակեցում է, և դուք կարող եք ստեղծել GraphQL սերվերի կողմից ամենատարածված լեզուներով: Դուք պետք է գտնեք գրադարան ձեր նախագծի համար անհրաժեշտ հատկանիշներով:

GraphQL գրադարան ընտրելիս ցանկանում եք օգտագործել գործառույթներով հարուստ գրադարան, որն աջակցում է GraphQL-ի բոլոր տեսակներն ու գործողությունները: Գրադարաններից շատերն ընդունում են կա՛մ սխեմա-առաջին, կա՛մ կոդ-առաջին մոտեցում: Նախկինում դուք սահմանում եք GraphQL սխեման, և գրադարանը ստեղծում է լուծիչներ և կաթսայի կոդ: Վերջինիս համար դուք կոշտ կոդավորում եք լուծիչները՝ առանց սխեմա սահմանելու։

GraphQL-ը ստանում է ընդունում

GraphQL-ի ստեղծման օրվանից ծրագրավորողները և ընկերությունները թողարկել են գործիքներ դրա օգտագործումը պարզեցնելու համար: Դրանք կարող են նվազեցնել փոքր և միջին նախագծերի զարգացման ժամանակը:

Ավելին իմանալու համար կարող եք ստուգել բաց կոդով GraphQL հաճախորդները, GraphQL փաստաթղթերը և դրա ճշգրտումները: