GraphQL - प्रकार प्रणाली

GraphQL एक जोरदार टाइप की गई भाषा है। टाइप सिस्टम विभिन्न डेटा प्रकारों को परिभाषित करता है जिनका उपयोग ग्राफकॉल एप्लिकेशन में किया जा सकता है। प्रकार प्रणाली स्कीमा को परिभाषित करने में मदद करती है, जो क्लाइंट और सर्वर के बीच एक अनुबंध है। आमतौर पर इस्तेमाल किया जाने वाला ग्राफकैलिक डेटा प्रकार इस प्रकार हैं -

अनु क्रमांक। प्रकार और विवरण
1

Scalar

एक एकल मूल्य रखता है

2

Object

दिखाता है कि किस प्रकार की वस्तु प्राप्त की जा सकती है

3

Query

प्रवेश बिंदु प्रकार अन्य विशिष्ट प्रकारों के लिए

4

Mutation

डेटा हेरफेर के लिए प्रवेश बिंदु

5

Enum

ऐसी स्थिति में उपयोगी जहां आपको उपयोगकर्ता को विकल्पों की एक निर्धारित सूची से चुनने की आवश्यकता होती है

स्केलर प्रकार

स्केलर प्रकार आदिम डेटा प्रकार हैं जो केवल एक ही मूल्य को स्टोर कर सकते हैं। ग्राफ़िकल ऑफर प्रदान करने वाले डिफ़ॉल्ट स्केलर प्रकार हैं -

  • Int - 32-बिट इंटेगर पर हस्ताक्षर किए

  • Float - हस्ताक्षरित डबल सटीक फ़्लोटिंग पॉइंट मान

  • String - UTF - 8-वर्ण क्रम

  • Boolean - सही या गलत

  • ID - एक विशिष्ट पहचानकर्ता, अक्सर एक वस्तु लाने या कैश के लिए कुंजी के रूप में एक विशिष्ट पहचानकर्ता के रूप में उपयोग किया जाता है।

स्केलर प्रकार को परिभाषित करने का सिंटैक्स इस प्रकार है -

field: data_type

नीचे दिया गया स्निपेट ग्रीटिंग नामक एक क्षेत्र को परिभाषित करता है जो स्ट्रिंग मूल्य देता है।

greeting: String

वस्तु प्रकार

ऑब्जेक्ट प्रकार स्कीमा में उपयोग किया जाने वाला सबसे सामान्य प्रकार है और फ़ील्ड के समूह का प्रतिनिधित्व करता है। ऑब्जेक्ट के अंदर प्रत्येक फ़ील्ड दूसरे प्रकार के नक्शे टाइप करती है, जिससे नेस्टेड प्रकारों की अनुमति मिलती है। दूसरे शब्दों में, एक ऑब्जेक्ट प्रकार कई स्केलर प्रकार या ऑब्जेक्ट प्रकार से बना होता है।

ऑब्जेक्ट प्रकार को परिभाषित करने का सिंटैक्स नीचे दिया गया है -

type object_type_name
{
   field1: data_type
   field2:data_type 
   ....
   fieldn:data_type
}

आप निम्नलिखित कोड स्निपेट पर विचार कर सकते हैं -

--Define an object type--

type Student {
   stud_id:ID
   firstname: String
   age: Int
   score:Float
}

--Defining a GraphQL schema--  

type Query
{
   stud_details:[Student]
}

ऊपर दिया गया उदाहरण एक ऑब्जेक्ट डेटा-प्रकार छात्र को परिभाषित करता है। Stud_details जड़ क्वेरी स्कीमा में क्षेत्र छात्र वस्तुओं की एक सूची वापस आ जाएगी।

क्वेरी प्रकार

डेटा को लाने के लिए एक ग्राफ़िकल क्वेरी का उपयोग किया जाता है। यह REST- आधारित API में संसाधन का अनुरोध करने जैसा है। इसे सरल रखने के लिए, क्वेरी प्रकार क्लाइंट एप्लिकेशन से ग्राफक्लाइन सर्वर पर भेजा गया अनुरोध है। ग्राफक्लाइन का उपयोग करता हैSchema Definition Language (SDL)एक क्वेरी को परिभाषित करने के लिए। ग्राफ टाइप में कई प्रकार के रूट-स्तर में से एक है।

क्वेरी को परिभाषित करने का सिंटैक्स नीचे दिया गया है -

type Query {
   field1: data_type
   field2:data_type
   field2(param1:data_type,param2:data_type,...paramN:data_type):data_type
}

एक प्रश्न को परिभाषित करने का एक उदाहरण -

type Query  {
   greeting: String
}

उत्परिवर्तन प्रकार

म्यूटेशन ऑपरेशन को सर्वर पर भेजे जाते हैं create, update या deleteडेटा। ये REST- आधारित API को कॉल करने के लिए PUT, POST, PATCH और DELETE क्रियाओं के अनुरूप हैं।

म्यूटेशन रूट-लेवल डेटा-ग्राफ में से एक है। क्वेरी प्रकार डेटा-फ़िंचिंग ऑपरेशनों के लिए प्रवेश-बिंदुओं को परिभाषित करता है जबकि म्यूटेशन प्रकार डेटा-हेरफेर संचालन के लिए प्रवेश बिंदुओं को निर्दिष्ट करता है।

म्यूटेशन प्रकार को परिभाषित करने का सिंटैक्स नीचे दिया गया है -

type Mutation {
   field1: data_type
   field2(param1:data_type,param2:data_type,...paramN:data_type):data_type 
}

उदाहरण के लिए, हम नीचे के रूप में एक नया छात्र जोड़ने के लिए एक उत्परिवर्तन प्रकार को परिभाषित कर सकते हैं -

type Mutation {
   addStudent(firstName: String, lastName: String): Student
}

Enum प्रकार

एनम एक स्केलर प्रकार के समान है। एनम ऐसी स्थिति में उपयोगी होते हैं जहां किसी क्षेत्र के लिए मूल्य विकल्पों की निर्धारित सूची से होना चाहिए।

एक Enum प्रकार को परिभाषित करने का सिंटैक्स है -

type enum_name{
   value1
   value2
}

निम्नलिखित स्निपेट दिखाता है कि एक एनुम प्रकार को कैसे परिभाषित किया जा सकता है -

type Days_of_Week{
   SUNDAY
   MONDAY
   TUESDAY
   WEDNESDAY
   THURSDAY
   FRIDAY
   SATURDAY
}

सूची प्रकार

विशिष्ट प्रकार के मूल्यों की एक सरणी का प्रतिनिधित्व करने के लिए सूचियों का उपयोग किया जा सकता है। सूचियों को एक प्रकार के संशोधक के साथ परिभाषित किया जाता है [] जो ऑब्जेक्ट प्रकार, स्केलर और एनम को लपेटता है।

निम्नलिखित सिंटैक्स का उपयोग सूची प्रकार को परिभाषित करने के लिए किया जा सकता है -

field:[data_type]

नीचे दिया गया उदाहरण सूची प्रकार को परिभाषित करता है -

type Query {
   todos: [String]
}

गैर-अशक्त प्रकार

डिफ़ॉल्ट रूप से, कोर स्केलर के प्रत्येक प्रकार को अशक्त करने के लिए सेट किया जा सकता है। दूसरे शब्दों में, ये प्रकार या तो निर्दिष्ट प्रकार का मान लौटा सकते हैं या उनका कोई मूल्य नहीं हो सकता है। इस डिफ़ॉल्ट को ओवरराइड करने और निर्दिष्ट करने के लिए कि किसी फ़ील्ड को परिभाषित किया जाना चाहिए, एक विस्मयादिबोधक चिह्न (!) को एक प्रकार से जोड़ा जा सकता है। यह क्वेरी द्वारा लौटाए गए परिणामों में मूल्य की उपस्थिति सुनिश्चित करता है।

एक गैर-अशक्त क्षेत्र को परिभाषित करने के लिए निम्नलिखित सिंटैक्स का उपयोग किया जा सकता है -

field:data_type!

नीचे दिए गए उदाहरण में, stud_id को एक अनिवार्य क्षेत्र के रूप में घोषित किया गया है।

type Student {
   stud_id:ID!
   firstName:String
   lastName:String
   fullName:String
   college:College
}