স্ট্যান্ডার্ড JSON এপিআই প্রতিক্রিয়া ফর্ম্যাট?


695

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

সফল অনুরোধ:

{
  "success": true,
  "payload": {
    /* Application-specific data would go here. */
  }
}

ব্যর্থ অনুরোধ:

{
  "success": false,
  "payload": {
    /* Application-specific data would go here. */
  },
  "error": {
    "code": 123,
    "message": "An error occurred!"
  }
}

16
লোকেরা সম্ভবত এসওএপি থেকে শিখেছে এবং এটি আর তৈরি করবে না ...
ডেনিস সাগুরেট

18
@ অডিস্ট্রয়: আপনার মন্তব্য ব্যাখ্যা করার যত্ন?
FtDRbwLXw6

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

13
@ অ্যালেক্স দুর্ভাগ্যক্রমে, কারণ আপনি যেখানেই যান না কেন, কোনও মান নেই। কেবল জেএসএনের মধ্যেই নয়, তবে এটি কীভাবে আরএসটিফুল অ্যাপ্লিকেশনগুলির জন্য ব্যবহার করতে হয় বা অন্য কোনও ধরণের বাছাইয়ের ক্ষেত্রে। প্রত্যেকে এটি আলাদাভাবে করে। আপনি সেরা-চর্চা (HTTP- র-প্রতিক্রিয়া, অর্থপূর্ণ প্যাকেজ-গঠন, স্ট্রাকচারিং প্রতি নজর আপনার সিস্টেম দ্বারা খরচ জন্য আপনার ডেটা) অনুসরণ করতে দ্বিধা বোধ করবেন না করতে পারেন, কিন্তু সবাই এমন একজন প্রধান পরিবেশক হয় অন্যদের তুলনায় অন্তত এক জিনিস বিভিন্ন করছে। .. কোনও মান নেই, এবং সম্ভবত একটিও হবে না, তাই শক্ত কিছু তৈরি করুন, এবং এটি আপনাকে ফিট করার জন্য তৈরি করুন।
নরগার্ড

উত্তর:


638

হ্যাঁ কয়েকটি মানক রয়েছে (মান সংজ্ঞায় কিছু স্বাধীনতা থাকা সত্ত্বেও) যেগুলি প্রকাশ পেয়েছে:

  1. জেএসএন এপিআই - জেএসএন এপিআই কেবল প্রতিক্রিয়া নয়, সম্পদ তৈরি এবং আপডেট করার বিষয়টিও কভার করে।
  2. জেএসেন্ড - সহজ এবং সম্ভবত আপনি ইতিমধ্যে যা করছেন।
  3. ওডাটা জেএসএন প্রোটোকল - খুব জটিল।
  4. এইচএএল - ওডাটার মতো তবে লক্ষ্য হ'ল হেটোওএস হ'ল

এখানে JSON API বর্ণনা ফর্ম্যাটগুলি রয়েছে:

  • সদম্ভ চাল
    • জেএসএন স্কিমা (সোয়াগার দ্বারা ব্যবহৃত তবে আপনি এটি একা দাঁড়িয়ে থাকতে পারেন)
  • জেএসনে ওয়াডল
  • RAML
  • এইচএএল কারণ তত্ত্বের মধ্যে HATEOAS স্ব স্ব বর্ণনাকারী।

19
ধন্যবাদ. বিশেষত জেএসেন্ড ঠিক আমি যা খুঁজছিলাম। এটি আমি যা করছিলাম তার সমান, তবে এর কিছু সুবিধা রয়েছে যা আমার পদ্ধতিটি করেনি। @ দৃung়তার সাথে ন্যায়সঙ্গতভাবে, জেএসেন্ড তার নিজের উত্তরেরও খুব কাছাকাছি।
FtDRbwLXw6

8
ত্রুটি প্রতিক্রিয়াগুলির জন্য বিশেষত আমি HTTP APIs আরএফসি খসড়াটির সমস্যার বিবরণটিও পছন্দ করি ।
পিটার এনেস

1
হতে পারে আপনি বর্ণন বিন্যাসের তালিকায় কোড. google.com/p/json-service যুক্ত করতে চান ?
ইমাইলসিলভিস

1
আমি মনে করি "রেলগুলির জন্য একটি প্রস্তাবিত স্ট্যান্ডার্ড" লেবেলটি কিছুটা বাড়াবাড়ি - এটি কেবলমাত্র একটি প্রোগ্রামারের সমাধান। নিশ্চিত নন কী এটিকে "প্রস্তাবিত স্ট্যান্ডার্ড" করে তোলে (বিশেষত যদি আপনি মণির জনপ্রিয়তার দিকে তাকান - দেখে মনে হচ্ছে না যে অনেক লোক একেবারেই ব্যবহার করছেন)? আমি ব্যক্তিগতভাবে ভাবি না যে বেশিরভাগ রেল প্রোগ্রামাররা স্থিতির জন্য এইচটিটিপি শিরোনামের পরিবর্তে প্রতিক্রিয়া বডি ব্যবহার করার কারণে এই সমাধানটি সুপারিশ করবে
Iwo Dziechciarow


194

গুগল জেএসএন গাইড

সাফল্যের প্রতিক্রিয়া ফিরে data

{
  "data": {
    "id": 1001,
    "name": "Wing"
  }
}

ত্রুটির প্রতিক্রিয়া ফেরত error

{
  "error": {
    "code": 404,
    "message": "ID not found"
  }
}

এবং যদি আপনার ক্লায়েন্ট জেএস হয়, আপনি if ("error" in response) {}কোনও ত্রুটি আছে কিনা তা পরীক্ষা করতে ব্যবহার করতে পারেন ।


13
প্রথমত, গুগল জেএসএন গাইড একক উদ্ধৃতির পরিবর্তে ডাবল কোট ব্যবহার করার পরামর্শ দিচ্ছে।
আরপোজারিকিজ

1
আপনি নিশ্চিত যে আপনি প্লেজসনের মতো সার্ভার সাইড জেএসএন এপিআই থেকে এটি পরিচালনা করতে পারেন কিনা তা কোনওভাবেই গুরুত্বপূর্ণ নয়। @ সত্য আপনার লিঙ্কগুলি নষ্ট হয়ে গেছে
রাইস ব্র্যাডবেরি

3
ব্যর্থতার একটি তালিকা প্রদানের প্রয়োজন এমন ত্রুটিগুলি সম্পর্কে কী (যেমন বৈধতা সমস্যা)?
এক্সনক্রস

1
@ এক্সনক্রস শব্দের লিঙ্কটিতে ক্লিক করুন error, গুগলের পৃষ্ঠাটি এর উদাহরণ দেয়
এমআই রাইট

@ এক্সনক্রস আপনি ত্রুটি ব্যবহার করে ব্যর্থতার একটি তালিকা ফিরে আসতে পারেন rors সম্ভবত শীর্ষ স্তরের ত্রুটিটি "অনুরোধ ব্যর্থ ইনপুট বৈধকরণ" উল্লেখ করবে এবং ত্রুটিগুলি [] অ্যারে সংঘটিত প্রতিটি নির্দিষ্ট বৈধতা ব্যর্থতার জন্য একটি প্রবেশ করানো হবে।
জেমস দৈনিক

130

আমি অনুমান করি যে একটি ডিফাক্টো স্ট্যান্ডার্ড সত্যিই উত্থিত হয়নি (এবং কখনও হতে পারে না)। তবে নির্বিশেষে, আমার গ্রহণ এখানে:

সফল অনুরোধ:

{
  "status": "success",
  "data": {
    /* Application-specific data would go here. */
  },
  "message": null /* Or optional success message */
}

ব্যর্থ অনুরোধ:

{
  "status": "error",
  "data": null, /* or optional error payload */
  "message": "Error xyz has occurred"
}

সুবিধা: সাফল্য এবং ত্রুটি উভয় ক্ষেত্রে একই শীর্ষ স্তরের উপাদান

অসুবিধা: কোনও ত্রুটি কোড নয়, তবে আপনি যদি চান তবে আপনি স্থিতিটিকে (সাফল্য বা ব্যর্থতা) কোড হিসাবে পরিবর্তন করতে পারেন, অথবা আপনি "কোড" নামে একটি শীর্ষ স্তরের আইটেম যুক্ত করতে পারেন।


3
হ্যাঁ আপনি যদি জসন পার্সিংয়ের জন্য পোজো ব্যবহার করছেন তবে এটি সঠিক উপায়! যখন আমরা POJOs ব্যবহার করি তখন আমাদের স্ট্যাটিক, নন ডায়নামিক জসন ফর্ম্যাট দরকার!
LOG_TAG

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

1
আমি এই প্যাটার্নটিও খুব বেশি ব্যবহার করি তবে এমন একটি ক্ষেত্র messagesযা একটি একক স্ট্রিংয়ের পরিবর্তে বার্তাগুলির অ্যারে
স্টকব্রেক

4
উত্তরটি প্রায় নথিবদ্ধ জেএসেন্ডের একটি অনুলিপি যা সহজ এবং খুব দরকারী। তারা failসাধারণ বৈধতা সমস্যার জন্য তৃতীয় স্থিতি সরবরাহ করেছে, যখন errorকেবলমাত্র ডিবি ত্রুটির মতো প্রাণঘাতী দ্বারা ব্যবহৃত হয়।
s3m3n

সাফল্যের জন্য: যদি এটি 200শিরোনামে থাকে তবে আপনার এমনকি একটি statusক্ষেত্রের প্রয়োজন কেন ? শুধু তথ্য অবজেক্ট সোজা ফিরে। আপনি জানেন যে এটি টাইপস্ক্রিপ্টের মতো টাইপযুক্ত এফ এআর ভাষাগুলিতে অতিরিক্ত ব্যথার কারণ হতে পারে।
ডেনিস এম।

84

আপনার প্রশ্নটি ধরে নেওয়া হ'ল REST ওয়েব-সার্ভিসেস ডিজাইন এবং সাফল্য / ত্রুটির বিষয়ে আরও স্পষ্টভাবে।

আমি মনে করি 3 টি বিভিন্ন ধরণের ডিজাইন রয়েছে।

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

    • পেশাদাররা: এটি আপনার এপিআই থেকে স্বতন্ত্র একটি মান।
    • কনস: আসলে কী ঘটেছে সে সম্পর্কে কম তথ্য।
  2. এইচটিটিপি স্থিতি + জসন বডি ব্যবহার করুন (এমনকি এটি ত্রুটি হলেও)। ত্রুটির জন্য একটি অভিন্ন কাঠামো সংজ্ঞায়িত করুন (উদা: কোড, বার্তা, কারণ, প্রকার, ইত্যাদি) এবং এটি ত্রুটির জন্য ব্যবহার করুন, যদি এটি সাফল্য হয় তবে কেবল প্রত্যাশিত জসন প্রতিক্রিয়াটি ফিরিয়ে দিন।

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

    • পেশাদাররা: ক্লায়েন্টটি কেবলমাত্র জসন স্ট্রিংয়ের প্রতিক্রিয়াটির সাথে সম্পর্কিত এবং স্থিতি (?) উপেক্ষা করে।

    • কনস: কম মান।

এটি আপনার চয়ন করা :)

এপিআই উপর নির্ভর করে আমি 2 বা 3 বেছে নেব (আমি জসন রেস্ট এপিসের জন্য 2 পছন্দ করি)। আরআরএসটি এপি ডিজাইনের ক্ষেত্রে আমি আর একটি জিনিস অভিজ্ঞ করেছি যা হ'ল প্রতিটি সংস্থার (ইউআরএল) জন্য ডকুমেন্টেশনের গুরুত্ব: পরামিতি, শরীর, প্রতিক্রিয়া, শিরোনাম ইত্যাদি + উদাহরণ।

আমি আপনাকে জার্সি (জ্যাক্স-আরএস বাস্তবায়ন) + জেনসন (জাভা / জেসন ডেটাবাইন্ডিং গ্রন্থাগার) ব্যবহার করার পরামর্শ দিচ্ছি । আপনার ক্লাসপথে আপনাকে কেবল জেনসন + জার্সি ফেলে দিতে হবে এবং জেসসন স্বয়ংক্রিয়ভাবে সমর্থিত।

সম্পাদনা করুন:

  • সমাধান 2 কার্যকর করা সবচেয়ে কঠিন তবে সুবিধাটি হ'ল আপনি ব্যতিক্রমগুলি সুন্দরভাবে পরিচালনা করতে পারেন এবং কেবল ব্যবসায় ত্রুটিগুলিই নয়, প্রাথমিক প্রচেষ্টা আরও গুরুত্বপূর্ণ তবে আপনি দীর্ঘমেয়াদে জয়ী হন।

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


2
আপনি বলছেন যে আমার "ত্রুটির জন্য একটি অভিন্ন কাঠামো সংজ্ঞায়িত করা উচিত" এবং অন্যান্য অনুরূপ পরামর্শগুলি, তবে আমি যা বলছি ঠিক এটি এটি। আমি অনুমান করি উত্তরটি পরিণত হয়েছে যে "না, এই কাঠামোর সাথে কোনও মান বা সর্বোত্তম অনুশীলন নেই।"
FtDRbwLXw6

7
রেকর্ডের জন্য: HTTP স্থিতি কোডটি শিরোনাম নয়।
পেপकिन 88

3
"প্রতিক্রিয়াটি জসন নয়, এইচটিএমএল হবে।" ভুল! এইচটিএমএলের ত্রুটি পরিচালনার সাথে কোনও সম্পর্ক নেই। প্রতিক্রিয়া আপনি কন্টেন্ট টাইপ সমর্থন যাই হোক না কেন হতে পারে।
অলিগোফ্রেন

2
@ ア レ ッ ク ス HTTP স্থিতি কোডটি একটি HTTP প্রতিক্রিয়ার শিরোনামের স্থিতি রেখায় একটি 3-অঙ্কের কোড। এই লাইনটি শিরোনামের ক্ষেত্রগুলি অনুসরণ করে, স্বতন্ত্রভাবে হেডারও বলা হয়।
pepkin88

1
@ ア レ ッ ク HT এইচটিটিপি-তে উইকিপিডিয়া পৃষ্ঠাটি আপনার প্রশ্নের সুন্দর উত্তর দেয়, আপনি এটি এখানে দেখতে পারেন: en.wikedia.org/wiki/… (বিভাগের প্রতিক্রিয়া বার্তার লিঙ্ক)
পেপকিন ৮

21

জন্য RFC 7807: HTTP- র API গুলির জন্য সমস্যার বিবরণ মুহূর্তে সর্বনিকটবর্তী বস্তু আমরা একটি সরকারী মান আছে।


1
3 বছর পরে ... মনে হচ্ছে এটি যেতে হবে। আরও দেখুন: youtu.be/vcjj5pT0bSQ?t=611 (ভিজ্যুয়াল স্টুডিও। 7807 এর জন্য নেট কোর সাপোর্ট)
এডেলওয়াটার

19

ইনস্টাগ্রামটি ব্যবহার করছে জাসন ফর্ম্যাটটি নীচে

{
    "meta": {
         "error_type": "OAuthException",
         "code": 400,
         "error_message": "..."
    }
    "data": {
         ...
    },
    "pagination": {
         "next_url": "...",
         "next_max_id": "13872296"
    }
}

19

আমি দাবি করার মতো অহঙ্কার করব না যে এটি মানক তাই আমি "আমি পছন্দ করি" ফর্মটি ব্যবহার করব।

আমি সংক্ষিপ্ত প্রতিক্রিয়া পছন্দ করি (নিবন্ধগুলির / লিস্টের তালিকার জন্য যখন আমি নিবন্ধের জেএসওএন অ্যারে চাই তা অনুরোধ করি) prefer

আমার ডিজাইনে আমি স্থিতির প্রতিবেদনের জন্য এইচটিটিপি ব্যবহার করি, 200 একটি মাত্র পেডলোড দেয়।

400 অনুরোধে যা ভুল ছিল তার বার্তা ফেরত দেয়:

{"message" : "Missing parameter: 'param'"}

404 ফিরুন যদি মডেল / কনট্রোলার / ইউআরআই উপস্থিত না থাকে

যদি আমার পক্ষ থেকে প্রক্রিয়াজাতকরণে ত্রুটি ঘটে থাকে তবে আমি একটি বার্তা দিয়ে 501 ফেরত দেব :

{"message" : "Could not connect to data store."}

আমি বেশ কয়েকটি REST-ish ফ্রেমওয়ার্কগুলি যা দেখেছি সেগুলি থেকে এই লাইনগুলি বরাবর থাকে।

যুক্তি :

জেএসএনকে পে-লোড ফর্ম্যাট হওয়ার কথা , এটি কোনও সেশন প্রোটোকল নয়। ভার্বোজ সেশন-ইশ পেডলোডগুলির পুরো ধারণাটি এক্সএমএল / এসওএপি বিশ্ব এবং বিভিন্ন বিভ্রান্তিকর পছন্দগুলি থেকে আসে যা এই ফোলা নকশাগুলি তৈরি করে। আমরা এগুলির সমস্তটি একটি বিশাল মাথাব্যথা অনুধাবন করার পরে, REST / JSON এর পুরো পয়েন্টটি এটি চুম্বন করা, এবং এইচটিটিপি মেনে চলা ছিল। আমি মনে করি না যে জেএসেন্ডের মধ্যে দূরবর্তীভাবে স্ট্যান্ডার্ড কিছু আছে এবং বিশেষত তাদের মধ্যে আরও ভার্বোজের সাথে নেই। এক্সএইচআর এইচটিটিপি প্রতিক্রিয়ায় প্রতিক্রিয়া জানাবে, আপনি যদি আপনার এজেএক্সের জন্য jQuery ব্যবহার করেন (বেশিরভাগ করুন) আপনি ত্রুটিগুলি ক্যাপচার করতে try/ catchএবং done()/ fail()কলব্যাক ব্যবহার করতে পারেন। আমি দেখতে পাচ্ছি না যে JSON এ স্থিতি প্রতিবেদনগুলি কীভাবে এর চেয়ে বেশি কার্যকর।


2
"জেএসএন হ'ল পে-লোড ফর্ম্যাট ..."। না, জেএসএন একটি ডেটা সিরিয়ালাইজেশন ফর্ম্যাট। সেশন প্রোটোকল বা সাদামাটা পেডলোড সহ আপনি যা চান তা সঞ্চার করতে আপনি এটি ব্যবহার করতে পারেন। আপনার KISS মন্তব্যগুলি লক্ষ্য করে যদিও JSON এর থেকে পৃথক। জাসন এটি কী (ফাংশন হিসাবে সাফল্য ডেটা বা ব্যর্থতার কারণ হিসাবে আপনি বর্ণনা করছেন) ফোকাস রাখাই ভাল যা এটিকে দু'জনের কিছু ধরণের মেশম্যাশ দিয়ে দূষিত করা যা ক্রমাগত রচনা করতে হয় এবং পরে বের করে দেওয়া হয়। তারপরে আপনি পুরো পথে যেতে পারেন এবং আপনার জেএসওন ডেটা কাউচবেসে যেমন সংরক্ষণ করতে পারেন এবং অ্যাপ্লিকেশনটির মতো তা ফিরিয়ে দিতে পারেন।
ডার্ক বেস্টার

1
সম্ভবত আমার এটি "পে-লোড ফর্ম্যাট হিসাবে অনুমিত" হিসাবে তৈরি করা উচিত ছিল, তবে সেগুলি বাদ দিয়ে আমি আমার মন্তব্যে দাঁড়িয়ে আছি। আপনি এইচটিএমএল ডকুমেন্টে বডি ট্যাগের বৈশিষ্ট্য হিসাবে সেশন / ত্রুটি ডেটা রাখতে পারেন তবে এটি এটি করার সঠিক বা বোধগম্য উপায় করে না।
বোজন মার্কোভিক

16

যার পক্ষে এটি মূল্যবান তা আমি অন্যভাবে করি। একটি সফল কলটিতে সবে JSON অবজেক্ট রয়েছে। আমার কোনও উচ্চ স্তরের জেএসওএন অবজেক্টের দরকার নেই যাতে সাফল্যের ক্ষেত্র এবং JSON অবজেক্ট রয়েছে এমন একটি পে-লোড ক্ষেত্র রয়েছে success আমি শিরোনামে HTTP স্থিতির জন্য 200 বা উপযুক্ত পরিসরে যথাযথ JSON অবজেক্টটি ফিরিয়ে দিই।

তবে, যদি কোনও ত্রুটি (400 পরিবারে কিছু) থাকে তবে আমি একটি সুসংহত JSON ত্রুটি বস্তুটি ফিরিয়ে দিই। উদাহরণস্বরূপ, যদি ক্লায়েন্ট কোনও ইমেল ঠিকানা এবং ফোন নম্বর সহ কোনও ব্যবহারকারীকে পোস্ট করছে এবং এর মধ্যে একটি ত্রুটিযুক্ত (যেমন আমি এটি আমার অন্তর্নিহিত ডাটাবেসে সন্নিবেশ করতে পারি না) আমি এই জাতীয় কিছু ফিরিয়ে দেব:

{
  "description" : "Validation Failed"
  "errors" : [ {
    "field" : "phoneNumber",
    "message" : "Invalid phone number."
  } ],
}

এখানে গুরুত্বপূর্ণ বিটগুলি হ'ল "ক্ষেত্র" বৈশিষ্ট্যটি অবশ্যই জেএসওএন ফিল্ডের সাথে মিলবে যা বৈধ হওয়া যায়নি। এটি ক্লায়েন্টদের তাদের অনুরোধে ঠিক কী ভুল হয়েছে তা জানতে দেয়। এছাড়াও, "বার্তা" অনুরোধের লোকেলের মধ্যে রয়েছে। যদি "ইমেলএড্রেস" এবং "ফোন নাম্বার" উভয়ই অবৈধ হয় তবে "ত্রুটি" অ্যারেটিতে উভয়ের জন্য এন্ট্রি থাকবে। একটি 409 (সংঘাত) JSON প্রতিক্রিয়া বডিটি দেখতে দেখতে এটি দেখতে পারে:

{
  "description" : "Already Exists"
  "errors" : [ {
    "field" : "phoneNumber",
    "message" : "Phone number already exists for another user."
  } ],
}

এইচটিটিপি স্থিতি কোড এবং এই জেএসওএন দিয়ে ক্লায়েন্টের কাছে একটি নির্ধারক পদ্ধতিতে ত্রুটির প্রতিক্রিয়া জানানো দরকার এবং এটি কোনও নতুন ত্রুটি মান তৈরি করে না যা HTTP স্থিতি কোডগুলি প্রতিস্থাপনের চেষ্টা করে complete দ্রষ্টব্য, এগুলি কেবল 400 ত্রুটির পরিসীমাতে ঘটে। 200 ব্যাপ্তির যে কোনও কিছুর জন্য আমি উপযুক্ত যা ফিরিয়ে দিতে পারি। আমার জন্য এটি প্রায়শই এইচএএল-জাতীয় JSON অবজেক্ট তবে এটি এখানে আসলে গুরুত্বপূর্ণ নয়।

আমি যুক্ত করার বিষয়ে যে জিনিসটি ভেবেছিলাম তা হ'ল "ত্রুটিগুলি" অ্যারে এন্ট্রিগুলিতে বা নিজেই JSON অবজেক্টের মূলের একটি সংখ্যাসূচক ত্রুটি কোড। তবে এখনও পর্যন্ত আমাদের এটির প্রয়োজন হয়নি।


9

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

এপিআই এর চাহিদা যেমন পৃথক হতে পারে বোর্ডে প্রত্যেককে পাওয়া এবং কিছু ফর্ম্যাটে সম্মত হওয়া খুব কঠিন is আপনার এপিআই ব্যবহার করে যদি আপনার কয়েক মিলিয়ন ব্যবহারকারী থাকে তবে আপনি কেন আপনার প্রতিক্রিয়া ফর্ম্যাটটি পরিবর্তন করবেন?

গুগল, টুইটার, অ্যামাজন এবং ইন্টারনেটের কিছু পোস্ট দ্বারা অনুপ্রাণিত প্রতিক্রিয়া ফর্ম্যাটটি গ্রহণ করা নিম্নলিখিত:

https://github.com/adnan-kamili/rest-api-response-format

সোয়াগার ফাইল:

https://github.com/adnan-kamili/swagger-sample-template


1
খাম-মুক্ত বিশ্রাম-এপিআই-প্রতিক্রিয়া-ফর্ম্যাটটির জন্য
উত্সাহ দিন

@ আদনান কমিলি - >>> স্থিতি কোড: 304, যুক্তি-মন্তব্য: 'পরিবর্তিত নয়', সংস্করণ: 1.1, বিষয়বস্তু: <নাল>, শিরোনাম: <} <<<< এটি কি রেজিস্ট্রিটির যথাযথ প্রতিক্রিয়া?
আর্নল্ড ব্রাউন

@ আর্নল্ডব্রাউন কোন এপিআই এর শেষ পয়েন্টের জন্য - আপনি এই কোডটি ফিরিয়ে দিচ্ছেন?
আদনান কামিল

এটি কোনও চিত্র (ফর্ম ডেটা) আপলোড করতে ব্যবহৃত এপিআইয়ের প্রতিক্রিয়া ফেরত - ক্লায়েন্টের লিখিত এপিআই।
আর্নল্ড ব্রাউন

7

জেএসওনের বিষয়টি হ'ল এটি সম্পূর্ণ গতিময় এবং নমনীয়। আপনি যা খুশি তাই এটি বক্র করুন, কারণ এটি কেবল সিরিয়ালযুক্ত জাভাস্ক্রিপ্ট অবজেক্ট এবং অ্যারেগুলির একটি সেট, যা কোনও একক নোডে মূলী।

কি rootnode প্রকার আপনার ব্যাপার, এটা কি রয়েছে, আপনি আপ হয় কিনা মেটাডেটা সঙ্গে প্রতিক্রিয়া আপনার ব্যাপার বরাবর পাঠাতে, আপনি মাইম-প্রকার সেট কিনা application/jsonঅথবা ফাঁকা এটি হিসাবে text/plainআপনি আপ হয় ( যতক্ষণ আপনি জানেন কিভাবে প্রান্তের কেসগুলি পরিচালনা করতে হয়)।

আপনার পছন্দ মতো হালকা ওজনের স্কিমা তৈরি করুন।
ব্যক্তিগতভাবে, আমি পেয়েছি বিশ্লেষণ-ট্র্যাকিং এবং MP3 / OGG ভজনা এবং ইমেজ-গ্যালারি ভজনা এবং পাঠ্য-মেসেজিং এবং অনলাইন গেমিং এর জন্য নেটওয়ার্ক-প্যাকেট, এবং ব্লগ-পোস্ট ও ব্লগ মন্তব্য সব আছে খুব ভিন্ন প্রয়োজনীয়তা কি পদ প্রেরিত এবং কী গ্রহণ করা হয় এবং কীভাবে সেগুলি গ্রাস করা উচিত

সুতরাং আমি সর্বশেষ জিনিসটি যখন চাইছিলাম তখন সমস্তটি হ'ল এক্সএমএল ২.০ বা সামসুচের উপর ভিত্তি করে প্রত্যেককে একই বয়লারপ্লেট মান হিসাবে মেনে চলার চেষ্টা করা।

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


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

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

2
আমি বুঝতে পারি যে এটি করার মতো একটি ফাঁকা স্লেট আমার ইচ্ছে মতো করুন। আমার প্রশ্নের উদ্দেশ্যটি জিজ্ঞাসা করা হল যে কাঠামো যতদূর এগিয়ে যায় তেমন কোনও উত্থাপিত মান ছিল কিনা। আমি "জেএসওএন কী এবং আমি কীভাবে এটি ব্যবহার করব" জিজ্ঞাসা করছিলাম না, বরং "আমি জেএসএনকে কীভাবে আমার কিছু চাইবে / কাঠামো ফিরে আসতে ব্যবহার করতে জানি, তবে আমি জানতে চাই যে এখানে কোনও মানক কাঠামো ব্যবহার করা হচ্ছে কিনা বা জনপ্রিয় হয়ে উঠছে। " আমি প্রশ্নের দ্বারা ভুল লিখে থাকলে আমি দুঃখিত। যাইহোক, আপনার প্রতিক্রিয়া জন্য ধন্যবাদ।
FtDRbwLXw6

6

জেএসএন-আরপিসি 2.0 একটি মানক অনুরোধ এবং প্রতিক্রিয়া ফর্ম্যাটটি সংজ্ঞায়িত করে এবং REST এপিআইয়ের সাথে কাজ করার পরে তাজা বাতাসের শ্বাসকষ্ট।


ব্যতিক্রমগুলির জন্য কেবল JSON-RPC_2.0 অফার কেবল একটি ত্রুটি কোড? একটি সংখ্যাসূচক ত্রুটি কোড যে সমস্যাটি ঘটেছে তা কোনও বিশ্বস্ততার সাথে উপস্থাপন করতে পারে না।
AgilePro

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

2

পরে যারা আসছেন তাদের জন্য, এইচএল, জেএসেন্ড এবং জেএসএন এপিআই সহ স্বীকৃত উত্তরের পাশাপাশি, আমি আরও কয়েকটি বিশেষ উল্লেখ যুক্ত করব:


1

প্রস্তাবিত বুনিয়াদি কাঠামোটি দুর্দান্ত দেখায়, তবে সংজ্ঞায়িত হিসাবে ত্রুটিযুক্ত বস্তুটি খুব সীমাবদ্ধ। সমস্যাটি প্রকাশ করার জন্য একজন সাধারণত একক মান ব্যবহার করতে পারে না এবং এর পরিবর্তে সমস্যা এবং কারণগুলির একটি শৃঙ্খলা প্রয়োজন

আমি কিছুটা গবেষণা করে দেখেছি যে ত্রুটি (ব্যতিক্রম) ফেরত দেওয়ার জন্য সর্বাধিক সাধারণ বিন্যাসটি এই ফর্মের একটি কাঠামো:

{
   "success": false,
   "error": {
      "code": "400",
      "message": "main error message here",
      "target": "approx what the error came from",
      "details": [
         {
            "code": "23-098a",
            "message": "Disk drive has frozen up again.  It needs to be replaced",
            "target": "not sure what the target is"
         }
      ],
      "innererror": {
         "trace": [ ... ],
         "context": [ ... ]
      }
   }
}

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

আপনি এখানে সম্পূর্ণ ওপেন সোর্স লাইব্রেরিটি প্রয়োগ করতে পারেন যা এটি প্রয়োগ করে: মেনডোসিনো জেএসএন ইউটিলিটিস । এই গ্রন্থাগারটি ব্যতিক্রমগুলির পাশাপাশি JSON অবজেক্টগুলিকে সমর্থন করে।

JSON REST APIত্রুটি পরিচালনা করার বিষয়ে আমার ব্লগ পোস্টে বিশদটি আলোচনা করা হয়েছে


0

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

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

এছাড়াও, আমাদের কি সত্যই 'ত্রুটি' একটি পতাকা করা উচিত? আমি যদি একাধিক বৈধতা ত্রুটি দিয়ে প্রতিক্রিয়া জানাতে চাই তবে কী হবে? সুতরাং, আমি সেই নোডের শিশু হিসাবে প্রতিটি ত্রুটির সাথে একটি 'ত্রুটি' নোড পাওয়া আরও দক্ষ বলে মনে করি; যেখানে খালি (শূন্যকে গণনা করা) 'ত্রুটি' নোড একটি 'সাফল্য' বোঝায় would


-2

মোবাইল অ্যাপ্লিকেশনগুলির জন্য সেরা প্রতিক্রিয়া যা মোবাইল বিকাশকারীরা সহজেই বুঝতে পারে।

এটি "সাফল্য" প্রতিক্রিয়াটির জন্য

{  
   "ReturnCode":"1",
   "ReturnMsg":"Successfull Transaction",
   "ReturnValue":"",
   "Data":{  
      "EmployeeName":"Admin",
      "EmployeeID":1
   }
}

এটি "ত্রুটি" প্রতিক্রিয়াটির জন্য

{
    "ReturnCode": "4",
    "ReturnMsg": "Invalid Username and Password",
    "ReturnValue": "",
    "Data": {}
}

2
আপনার সম্পত্তিগুলি মানক করা ভাল। এগুলি সবই "রিটার্ন ..." মান। তবে ডেটা উপসর্গ করা হয় না। আমি বলব, সমস্ত "রিটার্ন" উপসর্গ ফেলে দিন।
z0mbi3

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