2016-09-13 6 views
15

GraphQLInt के बजाय GraphQLID का उपयोग करना स्पष्ट नहीं है।GraphQLInt के बजाय GraphQLID का उपयोग कब करें?

type User { 
    id: Int! 
    firstName: String! 
    lastName: String! 
} 

type Query { 
    user (id: ID!): User 
} 

Query.user के मामले में, यह कोई फर्क नहीं GraphQLID या GraphQLInt का उपयोग करने या नहीं करने लगते हैं:

निम्न स्कीमा पर विचार करें।

User.id के मामले में, GraphQLID का उपयोग कर स्ट्रिंग के लिए इनपुट डाली जाएगी। GraphQLInt का उपयोग करके यह सुनिश्चित होगा कि इनपुट एक पूर्णांक है।

यह क्वेरी और टाइप सिस्टम असंगत बनाता है।

spec बस का कहना है:

एक GraphQLScalarType एक आईडी प्रतिनिधित्व करता है।

(उदा GraphQL ग्राहक एक पूर्णांक जब यह कर सकते हैं करने के लिए GraphQLID डाली चाहिए) इस एक कार्यान्वयन विस्तार है, या ऐसी उम्मीद है कि ID हमेशा में एक स्ट्रिंग है?

उत्तर

14

मैंने ग्राफक्लुएल स्पेक पर एक नज़र डाली थी।

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

- https://facebook.github.io/graphql/#sec-ID

सवाल यह कार्यान्वयन के लिए छोड़ दिया है या कल्पना से निर्धारित होता है कि क्या उत्तर देता है यही कारण है, अर्थात आईडी हमेशा एक String को धारावाहिक होना चाहिए।

इसके अलावा, इनपुट प्रकार के संदर्भ में, इनपुट को स्ट्रिंग में घुमाया जाना आवश्यक है। कल्पना से:

इनपुट बलात्कार

जब कोई इनपुट प्रकार, (जैसे "4" रूप में) या पूर्णांक किसी भी स्ट्रिंग (जैसे 4) इनपुट मूल्य के लिए उचित रूप में आईडी के लिए मजबूर किया जाना चाहिए के रूप में की उम्मीद किसी दिए गए ग्राफ़क्यूएल सर्वर की पहचान करता है आईडी प्रारूप। फ्लोट इनपुट मानों (जैसे 4.0) सहित कोई भी अन्य इनपुट मान, गलत प्रकार का संकेत देने वाली क्वेरी त्रुटि जरूरी है।

जो मुझे मूल समस्या के साथ छोड़ देता है।

मेरे पास बैकएंड है जहां मेरे पीके पूर्णांक हैं।

तरह से मैं इसे देख, मैं इन विकल्प हैं:

  • प्रारंभ पीकेएस के लिए UUIDs का उपयोग कर।हालांकि, इसमें performance implications है।
  • अंतर्निहित आवश्यकता को अनदेखा करें ( पारिस्थितिक तंत्र में उत्पन्न) ताकि एप्लिकेशन में अद्वितीय आईडी हो और आंतरिक खपत के लिए संभव हो सके आईडी को कास्ट किया जा सके।
  • हैश एप्लिकेशन डेटा परत पर एनकोड आईडी, उदा। UUID base64 तालिका नाम & पीके मान के एक संयोजन से व्युत्पन्न।

मैं बाद के विकल्प के साथ जा रहा हूं। यह भी दृष्टिकोण है कि graphql-relay-js ने toGlobalId और fromGlobalId के माध्यम से अपनाया है।

संबंधित मुद्दे