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 փաստաթղթերը և դրա ճշգրտումները: