REST GET API এর জন্য প্রস্তাবিত তারিখের ফর্ম্যাট


105

এর মতো REST GET এপিআইয়ের প্রস্তাবিত টাইমস্ট্যাম্প ফর্ম্যাটটি কী:

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

আমি মনে করি আসল তারিখের ফর্ম্যাটটি YYYY-MM-DDThh:mm:ssZইউটিসি সময়ের মতো আইএসও 8601 ফর্ম্যাট হওয়া উচিত ।

হাইফেন এবং কলোন ছাড়াই আমাদের কি আইএসও 8601 সংস্করণ ব্যবহার করা উচিত, যেমন:

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

বা উদাহরণস্বরূপ বেস64৪ এনকোডিং ব্যবহার করে আমরা আইএসও 8601 ফর্ম্যাটটি এনকোড করব?


আইএসও 8601 ফর্ম্যাটটি কেন আপনার পক্ষে একটি বিকল্প নয়?
জোহানেস

@ জোহনেস আইএসও 8601 ফর্ম্যাটটি (হাইফেন এবং কোলন ব্যতীত সংস্করণে) ঠিক থাকবে, আমি কেবল ভাবছিলাম যে ইউআরএলগুলিতে তারিখগুলি উপস্থাপনের জন্য প্রস্তাবিত পদ্ধতির কোনও ধরণের আছে কিনা
লোরেনজো পোলিডোরি

উত্তর:


77

REST এর প্রস্তাবিত তারিখের বিন্যাস নেই। সত্যিই এটি আপনার শেষ ব্যবহারকারী এবং আপনার সিস্টেমের জন্য সবচেয়ে ভাল কী কাজ করে তা এনে দেয়। ব্যক্তিগতভাবে, আমি আইএসও 8601 (url এনকোডেড) এর মতো আপনার মতো মানকে আটকে রাখতে চাই।

তাহলে হচ্ছে না কুশ্রী কোনো URI একটি উদ্বেগের বিষয় (যেমন URL টি এনকোড সংস্করণ সহ না :, -, আপনি কোনো URI) এবং (মানুষ) addressability না গুরুত্বপূর্ণ হিসাবে, এছাড়াও আপনি যুগান্তকারী সময় (যেমন বিবেচনা পারে http://example.com/start/1331162374)। ইউআরএলটি একটু পরিচ্ছন্ন দেখায় তবে আপনি অবশ্যই পঠনযোগ্যতা হারাবেন।

/2012/03/07অন্য ফরম্যাটে আপনি অনেক দেখতে হয়। আমি মনে করি আপনি এটি প্রসারিত করতে পারে। আপনি যদি এই রুটে যান, কেবলমাত্র আপনি GMT সময়ে সর্বদা থাকবেন তা নিশ্চিত করুন (এবং আপনার ডকুমেন্টেশনে এটি পরিষ্কার করুন) অথবা আপনি কোনও ধরণের টাইমজোন সূচককে অন্তর্ভুক্ত করতে চাইতে পারেন।

আপনার API এবং আপনার শেষ ব্যবহারকারীর জন্য কী কাজ করে তা অবশেষে এটি ফুটে উঠেছে। আপনার API এর জন্য কাজ করা উচিত, এটির জন্য আপনি নয় ;-)।


12
ধন্যবাদ, খুব দরকারী উত্তর। আমি মনে করি আমি আইএসও 8601 (অর্থাত্ http://api.example.com/start_date/YYYYMMDDThhmmssZ) সংক্ষেপিত সংস্করণে যাব যা পাঠযোগ্যতা এবং পরিষ্কার URL গুলির জন্য ভাল।
লরেঞ্জো পলিডোরি

7
কিন্তু তাদেরকে JSON করে একটি প্রস্তাবিত তারিখ বিন্যাস আছে এবং এটি আইএসও 8601 এর :)
Radu Potop

@ স্টলেমেট তারিখের অবজেক্টগুলি ডিফল্টরূপে আইএসও ফর্ম্যাটে তারিখযুক্ত স্ট্রিং হিসাবে সিরিয়ালাইজ করে। developer.mozilla.org/en-US/docs/JSON
রাদু পটপ

5
@ রাদুপটপ হ্যাঁ, তবে এটি হ'ল এইচটিটিপি এবং ইউআরআই মানক। JSON এর সাথে কী করবে তা আমি নিশ্চিত নই।
নাটোগুড

3
আমি কেবল লক্ষ করতে চাই যে হাইফেনগুলির ইউআরএল-এনকোড হওয়া দরকার নেই।
ব্যবহারকারী 128216

97

এপিআই তারিখ এবং সময় 5 আইনের জন্য এই নিবন্ধটি দেখুন এখানে :

  • আইন # 1: আপনার তারিখগুলির জন্য আইএসও -8601 ব্যবহার করুন
  • আইন # 2: যে কোনও সময় অঞ্চল গ্রহণ করুন
  • আইন # 3: এটি ইউটিসিতে সঞ্চয় করুন
  • আইন # 4: এটি ইউটিসিতে ফিরিয়ে দিন
  • আইন # 5: আপনার প্রয়োজন না থাকলে সময় ব্যবহার করবেন না

ডক্সে আরও তথ্য।


2
-1, যেমন 2017-11-20T11%3A00%3A00Zখুব পঠনযোগ্য নয়। এছাড়াও (আইআইএস-নির্দিষ্ট) ইউআরএলগুলিতে এনকোড থাকা সত্ত্বেও কলোনগুলি সম্পর্কে এটি খুব ভৌতিক বলে মনে হচ্ছে ।
Iain

2
এই লিঙ্কটি - agiletribe.wordpress.com/2015/06/10/jsonrest-api-handling-dates আইসো -8601 ফর্ম্যাটের সাথে অভিজ্ঞ হতে পারে এমন মানব পাঠযোগ্যতা সমস্যাগুলি এড়াতে পূর্ণসংখ্যার যুগের পরামর্শ দেয়। আপনার ভিন্ন মতামত থাকলে আমাকে জানান।
অ্যান্ডি ডুফ্রেসন

5
নোট করুন যে হাইফেন এবং বিন্দুগুলি ইউআরএলগুলিতে সংরক্ষিত অক্ষর নয়। শুধুমাত্র কলোনের জন্য ইউআরএল এনকোডিং প্রয়োজন ( en.wikedia.org/wiki/Percent-encoding )। আইএসও -8601 ( en.wikedia.org/wiki/ISO_8601 ) হাইফেনগুলি প্রয়োজন তবে কলোনগুলি alচ্ছিক । ইউআরএলগুলিতে ইউএসএল ব্যবহারের জন্য সঠিক ISO-8601 বৈকল্পিকগুলি হ'ল YYYY-MM-DDThhmmssZ এবং YYYY-MM-DDThhmmss.mmmZ আপনার আরও বৃহত্তর নির্ভুলতার প্রয়োজন হলে।
ব্রুস অ্যাডামস

একটি ঘন ঘন যুক্ত এবং ভারী বিতর্কিত নিবন্ধ। যদিও আমি বাছাইযোগ্য বিন্যাসের নির্বাচনের সাথে সম্মত হই তবে এটি অবশ্যই স্ট্রিং হওয়া উচিত একটি ইউনিক্স টাইমস্ট্যাম্প (যা নিবন্ধটি স্বীকারও করে না) এর প্রতিটি বর্ণিত সুবিধা এবং আরও অনেক কিছু রয়েছে। উপস্থাপনা অবধি, সময় অঞ্চল এবং দিবালোক সঞ্চয় (এবং রাজনৈতিক সিদ্ধান্ত) এর সমস্যাগুলিও বিদ্যমান নেই।
কায়ে

18

আরএফসি 6690 - সংবিধানযুক্ত রিস্টালফুল এনভায়রনমেন্টস (CoRE) লিংক ফর্ম্যাটটি স্পষ্টভাবে বিবরণ দেয় না যে তারিখের ফর্ম্যাটটি বিভাগ 2 এ তবে Link লিংক ফর্ম্যাটটি এটি আরএফসি 3986- র দিকে নির্দেশ করে This এটি সূচিত করে যে আরএফসি 3986 - তারিখের জন্য প্রস্তাবনা ব্যবহার করা উচিত।

মূলত আরএফসি 3339 ইন্টারনেটে তারিখ এবং সময় হ'ল ডকুমেন্ট যা বলা আছে:

গ্রেগরিয়ান ক্যালেন্ডার ব্যবহার করে তারিখ এবং সময় উপস্থাপনের জন্য আইএসও 8601 স্ট্যান্ডার্ডের একটি প্রোফাইল যে ইন্টারনেট প্রোটোকলগুলিতে ব্যবহারের জন্য তারিখ এবং সময় ফর্ম্যাট।

এটি কীভাবে ফুটে উঠেছে: YYYY-MM-ddTHH: মিমি: ss.ss ± এইচ: মিমি

(উদাঃ 1937-01-01T12: 00: 27.87 + 00: 20)

সবচেয়ে নিরাপদ বাজি।


12

ইনপুট / আউটপুটে প্রতিটি তারিখের সময় ক্ষেত্রটি ইউনিক্স / মহাকাশে থাকা দরকার ফর্ম্যাটে থাকা দরকার। এটি API এর বিভিন্ন দিক জুড়ে বিকাশকারীদের মধ্যে বিভ্রান্তি এড়ায়।

পেশাদাররা:

  • যুগের বিন্যাসে টাইমজোন নেই।
  • যুগের একটি একক বিন্যাস রয়েছে (ইউনিক্স সময়টি একটি একক স্বাক্ষরিত নম্বর)।
  • যুগের সময় দিবালোক সংরক্ষণ দ্বারা প্রভাবিত হয় না।
  • বেশিরভাগ ব্যাকএন্ড ফ্রেমওয়ার্ক এবং সমস্ত নেটিভ আইওএস / অ্যান্ড্রয়েড এপিআইগুলি যুগের রূপান্তরকে সমর্থন করে।
  • স্থানীয় সময় রূপান্তর অংশটি অ্যাপ্লিকেশন সাইডে সম্পূর্ণভাবে করা যায় যা ব্যবহারকারীর ডিভাইস / ব্রাউজারের সময় অঞ্চল নির্ধারণের উপর নির্ভর করে।

কনস:

  • ডাটাবেসে ইউটিসি ফর্ম্যাটে সংরক্ষণের জন্য ইউটিসিতে রূপান্তর করার জন্য অতিরিক্ত প্রক্রিয়াজাতকরণ।
  • ইনপুট / আউটপুট পাঠযোগ্যতা।
  • জিইটি ইউআরএলগুলির পঠনযোগ্যতা।

মন্তব্য:

  • টাইমজোনগুলি একটি উপস্থাপনা-স্তর সমস্যা!আপনার কোডের বেশিরভাগ সময় অঞ্চল বা স্থানীয় সময় নিয়ে কাজ করা উচিত নয়, এটি প্রায় ইউনিক্স সময় পার হওয়া উচিত।
  • যদি আপনি কোনও মানব-পঠনযোগ্য সময় (যেমন লগগুলি) সঞ্চয় করতে চান তবে এটি ইউনিক্স সময়ের পরিবর্তে নয়, ইউনিক্স সময়ের পাশাপাশি সংরক্ষণের বিষয়টি বিবেচনা করুন।

1
আরও একমত হতে পারে না।
জর্জি.ভি

1
আমি এটিতে যুক্ত করব কেবলমাত্র আপনার সিস্টেমে কোথাও মিলি সেকেন্ড বিবেচনা করা উচিত কিনা তা শুরু থেকেই বিবেচনা করা উচিত। যদি তা হয় তবে ইউনিক্স টাইমস্ট্যাম্পের মিলিসেকেন্ড সংস্করণটি ব্যবহার করুন।
জামেসসনসন

1

সর্বদা ইউটিসি ব্যবহার করুন:

উদাহরণস্বরূপ আমার কাছে একটি শিডিউল উপাদান রয়েছে যা একটি প্যারামিটার DATETIME এ নেয়। আমি যখন এটি জিইটি ক্রিয়া ব্যবহার করে বলি তখন আমি নিম্নলিখিত ফর্ম্যাটটি ব্যবহার করি যেখানে আমার আগত প্যারামিটারের নামটি শিডিয়ালডেট।

উদাহরণ:
https: // লোকালহোস্ট / এপিআই / getScheduleForDate? সময়সূচি তারিখ = 2003-11-21T01: 11: 11Z

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.