পাবলিক এপিআইতে (এনাম) প্রকারগুলি কীভাবে উপস্থাপন করবেন


32

আমি একটি সাধারণ API- এ কাজ করছি যা আমি নিজের ক্লায়েন্টের জন্য ব্যবহার করতে এবং ভবিষ্যতে জনসাধারণের জন্য খুলতে চাই। আমার কাছে "আইটেম" অবজেক্ট রয়েছে যার বিভিন্ন "প্রকার" থাকতে পারে। টাইপটি একটি সি "টাইপেডেফ এনাম", আমার এই মুহুর্তের জন্য:

typedef enum {
    ItemTypeBool,
    ItemTypeNumber,
    ItemTypeDate,
} ItemType;

(আমি ভবিষ্যতে কিছু যোগ করতে পারি)

আমি ভাবছি যে এটির পরিবর্তে আমাকে পূর্ণসংখ্যা হিসাবে বা সংজ্ঞায়িত "স্ট্রিং" হিসাবে স্থানান্তর করা উচিত কিনা। JSON হবে:

পূর্ণসংখ্যার জন্য:

{
  "name": "The name",
  "type": 0,
   ...
}

স্ট্রিংগুলির জন্য:

{
  "name": "The name"
  "type": "boolean"
   ...
}

আমি ভাবছি যে এর জন্য সবচেয়ে ভাল অনুশীলন আছে কিনা। পূর্ণসংখ্যা রাখা কোডটি কিছুটা সরল করবে, এবং ব্যান্ডউইথকে হ্রাস করবে, তবে বিকাশকারীদের মনে রাখা স্ট্রিংগুলি আরও সহজ হবে। আমি মনে করি আমি একটি প্রকল্পে কাজ করেছি এবং আমাকে 1 = চিত্র, 2 = অডিও, 3 = এইচটিএমএল, মনে রাখতে হবে ... যা কোনও সত্যিকার অর্থে আসে না।

সুতরাং আমি আপনাকে জিজ্ঞাসা করছি, আপনি যদি অন্য কোনও দিক বিবেচনা করেন তবে আমার জানা উচিত।


আপনি কি আশা করেন যে আপনার ব্যবহারকারীরা প্রায়শই JSON ম্যানুয়ালি সম্পাদনা করবেন?
জেমস 22

উত্তর:


39

স্ট্রিং সরবরাহ করুন। সংখ্যা অর্থহীন। আপনি এগুলি আপনার নিজের কোডে ব্যবহার করবেন না, ঠিক (আপনি চারপাশের এনাম মানগুলিকে মুড়ে রাখছেন, যা মূলত স্ট্রিং) - এই সংখ্যাগুলি ব্যবহার করে ব্যবহারকারীকে শাস্তি দিচ্ছেন কেন?

আপনি যদি সংখ্যাগুলি প্রকাশ করেন তবে কেবলমাত্র প্রো - আপনার এগুলির পার্স করা আরও সহজ। তবে আরে, কে তোমার কথা চিন্তা করে। এপিআই ক্লায়েন্টদের যত্ন নিন।

আপনি যদি স্ট্রিং সরবরাহ করেন - ক্লায়েন্টদের জন্য সহজ; "4 এর 17 টির পক্ষে অবমাননা করা হয়েছিল" এর মতো কথা কখনও বলতে হবে না; আপনার পক্ষে সামান্য শক্ত পার্সিং, তবে এটি ঠিক আছে।

উভয় সরবরাহ করবেন না: একজন ব্যবহারকারী হিসাবে, আমি অবাক হওয়ার মতোই রয়েছি

  • আমি কোনটি ব্যবহার করব? উভয়? [দস্তাবেজগুলি পড়তে]
  • কেন একই জিনিস বলার দুটি উপায় আছে? তারা সূক্ষ্মভাবে পৃথক হয়? [দস্তাবেজগুলি পড়তে]
  • আমি যদি উভয় নির্দিষ্ট করে থাকি এবং কোনও মিল নেই? এটা কি অভিযোগ করবে? কেউ কি প্রাধান্য পাবে? কোনটি? [দস্তাবেজগুলি পড়তে]

আপনি দেখতে পাচ্ছেন, আপনি আমাকে অকারণে প্রচুর ডক্স পড়তে বাধ্য করছেন।


আমি @iluxa এর সাথে একমত
পোর্টফোরওয়ার্ডপোডকাস্ট

1
এনাম যদি বাকী কলটিতে ইনপুট হিসাবে প্রত্যাশিত শ্রেণীর (অবজেক্ট) সদস্য হয় তবে কী হবে?
স্ট্যালিয়ন

2

স্ট্রিংস।

জসনের অন্যতম শক্তি হ'ল এটি মানব-পঠনযোগ্য। এখন থেকে আধা বছর আউটপুট ডিবাগ করার সময় "0" আপনাকে কিছুই বলবে না।

কিছু ফ্রেমওয়ার্কগুলি স্বয়ংক্রিয় রূপান্তরও করবে। যদি আপনি এটি ব্যবহার না করেন - আপনি নিজের কোডটি শুকনো রাখতে নিজেই একটি রূপান্তরকারী তৈরি করতে পারেন।

যদিও এটি ভোটদানের ক্ষেত্রে পরিণত হয়।


1

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

আরেকটি জিনিস আপনি করতে পারেন উভয় প্রদান। এই ক্ষেত্রে:

{
  "name": "The name",
  "typeId": 0,
  "type": "ItemTypeBool"
   ...
}

অথবা আপনি আপনার এপিআই-র জন্য যা ভাল লাগে তার উপর নির্ভর করে আপনি টাইপ, এবং টাইপএসআরটি ব্যবহার করতে পারেন।

এবং তারপরে আপনার ডকুমেন্টেশনে স্পষ্টভাবে উল্লেখ করুন যে এগুলি অনর্থক এবং এটি প্রয়োগ করার জন্য কোনটি সেরা তা বিকাশকারীদের উপর নির্ভর করে to

এখানে জাসনকে দেখুন : https://dev.twitter.com/docs/api/1/get/search টুইটারে রিডানড্যান্ট ডেটা (আইডি এবং আইডি_স্ট্রি) সরবরাহ করার উদাহরণ রয়েছে, তবে এটি কিছু জেসন ক্লায়েন্টের কাছ থেকে দীর্ঘ ইনসকে পার্স করতে পারছে না json এ একটি "সংখ্যা" এবং অঙ্কগুলি হারাতে এড়ানোর জন্য স্ট্রিং দরকার

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