REST GET API के लिए अनुशंसित तिथि प्रारूप


105

REST GET API के लिए अनुशंसित टाइमस्टैम्प प्रारूप इस प्रकार है:

http://api.example.com/start_date/{timestamp}

मुझे लगता है कि वास्तविक तिथि प्रारूप आईएसओ 8601 प्रारूप होना चाहिए, जैसे कि YYYY-MM-DDThh:mm:ssZयूटीसी समय के लिए।

क्या हमें हाइफ़न और कॉलन के बिना आईएसओ 8601 संस्करण का उपयोग करना चाहिए, जैसे:

http://api.example.com/start_date/YYYYMMDDThhmmssZ

या हमें ISO 8601 प्रारूप को एनकोड करना चाहिए, उदाहरण के लिए बेस 64 एनकोडिंग का उपयोग?


आईएसओ 8601 प्रारूप क्यों नहीं है, आपके लिए एक विकल्प है?
जोहान्स

@ जोहान्स आईएसओ 8601 प्रारूप (हाइफ़न और कॉलन के बिना संस्करण में) ठीक होगा, मैं बस सोच रहा था कि क्या यूआरएल में तारीखों का प्रतिनिधित्व करने के लिए अनुशंसित तरीका है
लोरेंजो पोलिडोरी

जवाबों:


77

REST में अनुशंसित दिनांक प्रारूप नहीं है। वास्तव में यह आपके अंतिम उपयोगकर्ता और आपके सिस्टम के लिए सबसे अच्छा काम करता है। व्यक्तिगत रूप से, मैं आईएसओ 8601 (url एन्कोडेड) के लिए एक मानक से चिपकना चाहूंगा।

अगर नहीं होने बदसूरत यूआरआई चिंता का विषय है (उदाहरण के लिए का यूआरएल इनकोडिंग संस्करण सहित नहीं :, -, आप में URI) और (मानव) पता योग्यता नहीं महत्वपूर्ण के रूप में, आप भी युग समय (उदाहरण के लिए विचार कर सकते हैं है http://example.com/start/1331162374)। URL थोड़ा साफ दिखता है, लेकिन आप निश्चित रूप से पठनीयता खो देते हैं।

/2012/03/07किसी अन्य स्वरूप आप एक बहुत देखते हैं। तुम पर विस्तार कर सकते हैं कि मुझे लगता है। यदि आप इस मार्ग पर जाते हैं, तो सुनिश्चित करें कि आप या तो हमेशा GMT समय में हैं (और अपने दस्तावेज़ में स्पष्ट करें) या आप किसी प्रकार का टाइमज़ोन संकेतक भी शामिल करना चाह सकते हैं।

अंततः यह आपके एपीआई और आपके अंतिम उपयोगकर्ता के लिए काम करता है। आपका API आपके लिए काम करे, न कि आप इसके लिए ;-)


12
धन्यवाद, बहुत उपयोगी जवाब। मुझे लगता है कि मैं आईएसओ 8601 (यानी http://api.example.com/start_date/YYYYMMDDThhmmssZ) के संकुचित संस्करण के लिए जाऊंगा जो पठनीयता और स्वच्छ यूआरएल के लिए अच्छा है।
लोरेंजो पोलिडोरी

7
लेकिन JSON करता है एक सिफारिश की दिनांक स्वरूप है और यह आईएसओ 8601 है :)
राडू Potop

डिफ़ॉल्ट रूप से @stalemate दिनांक ऑब्जेक्ट ISO स्वरूप में दिनांक वाली स्ट्रिंग के रूप में क्रमबद्ध करें। developer.mozilla.org/en-US/docs/JSON
Radu Potop

5
@RaduPotop हाँ, लेकिन यह HTTP और URI मानकों के बारे में हम बात कर रहे हैं। मुझे यकीन नहीं है कि JSON को इसके साथ क्या करना है।
nategood

3
मैं सिर्फ यह नोट करना चाहता हूं कि हाइफ़न को URL-एन्कोडेड होने की आवश्यकता नहीं है।
user128216

97

यहाँ एपीआई तारीखों और समय के 5 कानूनों के लिए इस लेख की जाँच करें :

  • कानून # 1: अपनी तारीखों के लिए ISO-8601 का उपयोग करें
  • कानून # 2: किसी भी समयक्षेत्र को स्वीकार करें
  • कानून # 3: इसे यूटीसी में स्टोर करें
  • कानून # 4: इसे यूटीसी में लौटाएं
  • कानून # 5: यदि आपको इसकी आवश्यकता नहीं है तो समय का उपयोग न करें

डॉक्स में अधिक जानकारी।


2
-1, जैसा 2017-11-20T11%3A00%3A00Zकि बहुत पठनीय नहीं है। इसके अलावा (IIS- विशिष्ट) यह URL में कॉलन के बारे में बहुत पागल लगता है, भले ही वे एन्कोडेड हों।
इयान

2
यह लिंक - agiletribe.wordpress.com/2015/06/10/jsonrest-api-handling-dates मानव पठनीयता से बचने के लिए पूर्णांक युग की सिफारिश करता है जिसे iso-8601 प्रारूप के साथ अनुभव किया जा सकता है। मुझे पता है अगर आप अलग विचार है।
एंडी डफ्रेसने

5
ध्यान दें कि URL में हाइफ़न और डॉट्स आरक्षित वर्ण नहीं हैं। केवल कॉलनों के लिए URL एन्कोडिंग ( en.wikipedia.org/wiki/Percent-encoding ) की आवश्यकता होती है । ISO-8601 ( en.wikipedia.org/wiki/ISO_8601 ) में हाइफ़न की आवश्यकता होती है लेकिन कॉलन वैकल्पिक होते हैं। यदि आप अधिक सटीकता की आवश्यकता है, तो URL में उपयोग करने के लिए ISO-8601 वेरिएंट YYYY-MM-DDThhmmssZ और YYYY-MM-DDThhmmss.mmmZ हैं।
ब्रूस एडम्स

अक्सर जुड़ा हुआ और भारी बहस वाला लेख। हालांकि मैं एक छांटने योग्य प्रारूप की पसंद से सहमत हूं अगर यह एक स्ट्रिंग होना चाहिए , एक यूनिक्स टाइमस्टैम्प (जो कि लेख भी स्वीकार नहीं करता है) में हर एक को बताए गए लाभ और अधिक हैं। प्रस्तुति तक, टाइमज़ोन और डेलाइट बचत (और राजनीतिक निर्णय) के मुद्दे भी मौजूद नहीं हैं।
काए

18

RFC6690 - विवश पुनर्जीवित वातावरण (CoRE) लिंक प्रारूप स्पष्ट रूप से यह नहीं बताता है कि तिथि प्रारूप को सेक्शन 2 में फिर भी क्या होना चाहिए । लिंक प्रारूप यह RFC 3986 की ओर इशारा करता है। इसका तात्पर्य यह है कि RFC 3986 में दिनांक प्रकार के लिए अनुशंसा का उपयोग किया जाना चाहिए।

मूल रूप से RFC 3339 इंटरनेट पर दिनांक और समय उस दस्तावेज़ को देखने के लिए कहते हैं:

इंटरनेट प्रोटोकॉल में उपयोग के लिए दिनांक और समय का प्रारूप जो ग्रेगोरियन कैलेंडर का उपयोग करके दिनांक और समय के प्रतिनिधित्व के लिए आईएसओ 8601 मानक का एक प्रोफाइल है।

यह क्या उबालता है: YYYY-MM-ddTHH: mm: ss.ss ± hh: mm

(उदा। 1937-01-01T12: 00: 27.87 + 00: 20)

सबसे सुरक्षित शर्त है।


12

इनपुट / आउटपुट में प्रत्येक डेटाटाइम क्षेत्र को UNIX / युग प्रारूप में होना चाहिए । यह एपीआई के विभिन्न पक्षों में डेवलपर्स के बीच भ्रम से बचा जाता है।

पेशेवरों:

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

विपक्ष:

  • डेटाबेस में यूटीसी प्रारूप में भंडारण के लिए यूटीसी को परिवर्तित करने के लिए अतिरिक्त प्रसंस्करण।
  • इनपुट / आउटपुट की पठनीयता।
  • GET URL की पठनीयता।

टिप्पणियाँ:

  • Timezones एक प्रस्तुति-परत समस्या है! आपका अधिकांश कोड टाइमज़ोन या स्थानीय समय के साथ काम नहीं करना चाहिए, यह यूनिक्स समय के आसपास गुजर रहा होना चाहिए।
  • यदि आप एक मानव-पठनीय समय (जैसे लॉग) संग्रहीत करना चाहते हैं, तो इसे यूनिक्स समय के बजाय संग्रहीत करने पर विचार करें, यूनिक्स समय के बजाय।

1
अधिक सहमत नहीं हो सका।
जॉर्ज

1
केवल एक चीज जो मैं इससे जोड़ूंगा, वह इस बात से है कि क्या आपको अपने सिस्टम में कहीं भी मिलीसेकंड पर विचार करने की आवश्यकता होगी। यदि ऐसा है, तो यूनिक्स टाइमस्टैम्प के मिलीसेकंड संस्करण का उपयोग करें।
jamesjansson

1

हमेशा यूटीसी का उपयोग करें:

उदाहरण के लिए मेरे पास एक अनुसूची घटक है जो एक पैरामीटर DATETIME में लेता है। जब मैं इसे GET क्रिया का उपयोग करके कहता हूं तो मैं निम्नलिखित प्रारूप का उपयोग करता हूं जहां मेरा आने वाला पैरामीटर नाम शेड्यूल है।

उदाहरण:
https: // localhost / api / getScheduleForDate! शेड्यूलडेट = 2003-11-21T01: 11: 11Z

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.