क्या REST API को डेटाइम को उपयुक्त क्लाइंट टाइमज़ोन में बदलने में सक्षम होना चाहिए?


10

हमारे एपीआई को लागू करते समय, डेटाइम और टाइमज़ोन का मुद्दा सामने आया।

सभी तिथियों को डेटाबेस में यूटीसी के लिए सामान्य किया जाता है। वर्तमान में, गैर-एपीआई आवेदन में, सभी डेटासेट को प्रस्तुत करने से पहले उपयोगकर्ताओं की प्राथमिकताओं के आधार पर परिवर्तित किया जाता है।

अब एपीआई के लिए भी यही सवाल सामने आया है: क्या एपीआई को अनुरोध शब्दार्थ के आधार पर टाइमजोन के लिए उपयुक्त डेटटाइम को वापस करने में सक्षम होना चाहिए?

जैसे GET /posts?timezone=America/Sao_Paulo?

या यह अभी भी होना चाहिए कि जो भी ग्राहक एपीआई तक पहुंच बना रहा है?

अपडेट: चूंकि यह कुछ समय पहले आया था: वर्तमान में टाइमज़ोन के साथ टाइमस्टैम्प वापस आ गए हैं (हालांकि यह हमेशा टीबी ऑफसेट है +00:00)। प्रारूप 8601 लोकप्रिय है:2015-10-29T23:00:49+00:00


यदि आप टाइमज़ोन युक्त टाइमस्टैम्प लौटाते हैं, तो क्लाइंट इसे आसानी से स्थानीय समय में आवश्यक रूप से परिवर्तित कर सकता है। वैसे भी, यह सवाल REST से संबंधित नहीं है। ऐसे कई तरीके हैं जिनसे आप इसे लागू कर सकते हैं जो REST के सिद्धांतों का उल्लंघन नहीं करते हैं। कृपया ध्यान रखें कि इस पैरामीटर को उजागर करने का अर्थ है आपके लिए अधिक काम करना। वास्तव में एक शानदार वास्तुकला में, आपको इन लिंक को किसी भी तरह से खोज करने की आवश्यकता होगी। यह मुझे क्लाइंट और सर्वर साइड दोनों को लागू करने के लिए अनावश्यक रूप से जटिल चीज के रूप में बताता है।
toniedzwiedz

> यह मुझे क्लाइंट और सर्वर साइड दोनों पर लागू करने के लिए अनावश्यक रूप से जटिल चीज के रूप में हमला करता है। इनपुट के लिए धन्यवाद!
चिह्नित करें

जवाबों:


17

आपको समय में एक पूर्ण बिंदु वापस करना चाहिए , फिर कोई भी उस टाइमस्टैम्प को आवश्यकतानुसार स्थानीयकृत कर सकता है। "पूर्ण टाइमस्टैम्प" से मेरा मतलब है कि या तो UNIX टाइमस्टैम्प या एक मानव पठनीय टाइमस्टैम्प जिसमें मानकीकृत आईएसओ प्रारूपों में से एक में टाइमज़ोन शामिल है, जैसे "2007-04-05T14: 30Z"। यह आवश्यक रूप से ग्राहक द्वारा स्थानीय समय-क्षेत्र में तुच्छ रूप से परिवर्तित किया जा सकता है।

यदि आप एक टाइमज़ोन पैरामीटर को स्वीकार करना चाहते हैं और टाइमस्टैम्प को उस टाइमज़ोन को स्थानीय बनाना चाहते हैं जो ठीक है, लेकिन आपको अभी भी पूर्ण टाइमस्टैम्प झुकाव का उपयोग करना चाहिए। आपकी प्रतिक्रिया में टाइमज़ोन, उदाहरण के लिए "2007-04-05T16: 30-02: 00"। यह देखते हुए कि यह मूल्य पिछले गैर-स्थानीयकृत के समान है, यह बहुत ही संदिग्ध है कि आप इस पैरामीटर की पेशकश की परेशानी से क्यों गुजरेंगे। टाइमस्टैम्प का सटीक प्रदर्शन प्रारूप अंततः क्लाइंट के सामने की ओर है, इसलिए यह वैसे भी मूल्य को पोस्ट-प्रोसेस करने की संभावना है।


4
"यह बहुत ही संदिग्ध है कि आप परेशानी से क्यों गुजरेंगे" - अगर और कुछ नहीं, तो यह कील का पतला अंत है। इस API का अगला क्लाइंट आपको strftimeसुविधा के उन्हीं कारणों के लिए उन्हें एक प्रारूप (प्लस लोकेल, महीने / दिन के नाम के लिए) निर्दिष्ट करने के लिए कह सकता है , जो पहले क्लाइंट ने टाइमजोन निर्दिष्ट करने के लिए उपयोगी पाया था। यहां तक ​​कि एकमात्र रियायत के रूप में टाइमज़ोन के साथ, आपने अपने एपीआई की प्रतिक्रिया को और अधिक जटिल बना दिया है: यह अब "हर बार एक ही प्रारूप में टाइमस्टैम्प" नहीं है, यह "एक टाइमस्टैम्प है जिस तरह से मुझे व्यक्त करने के लिए कहा गया था"
स्टीव जेसॉप

3
बिल्कुल, जटिलता। जटिलता बुराई है। यह हर किसी को उत्पाद या व्यवसाय के लिए किसी भी अतिरिक्त मूल्य के बिना कड़ी मेहनत करता है। हजार पेपर कट से मौत।
ब्रेंडन

2
> आपको समय में एक निरपेक्ष बिंदु वापस करना चाहिए मैंने अपना प्रश्न स्पष्ट किया कि मैं यह पहले से ही कर रहा हूं। आपकी अंतर्दृष्टि के लिए धन्यवाद!
चिह्नित करें

4

यदि आपके पास पहले से ही उपयोगकर्ता के स्थानीय समय क्षेत्र में डेटाटाइम मानों को परिवर्तित करने का तर्क है, तो आप अपने एपीआई में दोनों संभावनाओं की पेशकश कर सकते हैं।

यदि कोई ग्राहक अनुरोध करता है GET /posts, तो वे डिफ़ॉल्ट समयक्षेत्र (यूटीसी) में हर समय मिलते हैं।
यदि कोई ग्राहक अनुरोध करता है GET /posts?timezone=America/Sao_Paul, तो उत्तर में सभी समय को निर्दिष्ट टाइमज़ोन पर समायोजित किया जाएगा।

यह तब क्लाइंट कार्यान्वयन पर निर्भर है कि वे टाइमज़ोन के साथ क्या करना चाहते हैं।


2

वास्तव में आप एक एपीआई से यूटीसी की उम्मीद करेंगे।

हालाँकि, यदि आपका 'REST API' एक जावास्क्रिप्ट फ्रेमवर्क का उपयोग करते हुए एक वेबपेज का सर्वर साइड हिस्सा है। मेरा तर्क है कि वास्तव में आप एक ViewModel लौटा रहे हैं और इसलिए इसमें स्थानीयकृत तार, संख्या और समय होना चाहिए।


2

यह एक बुरा, बुरा, बुरा विचार है। ऐसी स्थिति पर विचार करें जहां क्लाइंट सर्वर से प्रतिक्रियाएं संग्रहीत करता है, और फिर उपयोगकर्ता एक अलग समय क्षेत्र में यात्रा करता है। अब आपके पास एक ऐसी स्थिति है जहां यह "सुविधा" आपको सबसे अच्छा लाभ देगी जो भी हो, या भारी परेशानी पैदा करें।

Btw। कितने समय के लिए और कितने ग्राहक आप यह परीक्षण करने जा रहे हैं? यदि सर्वर अमेरिका / साओ_पॉल के लिए अपेक्षित उत्तर देता है, तो वह अमेरिका / साओ_पाउलो के लिए क्या जवाब देगा?


यह मेरी ओर से एक गलती थी, मैंने इसे सही किया America/Sao_Paulo। मुझे लगता है कि यह चर्चा के लिए है कि क्या होता है यदि समयक्षेत्र की पहचान नहीं की जा सकती है; या तो क्योंकि यह गलत है या टीबी डेटाबेस पुराना है (मुझे लगता है कि वास्तविक नामों के लिए बाद की संभावना नहीं है [लेकिन ऑफसेट मूल्यों के लिए ऐसा नहीं है)। हालांकि, किसी भी मामले में, मैं शायद एक 400 BAD_REQUESTप्रतिक्रिया वापस कर दूंगा।
चिह्नित करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.