ডগলাস ক্রকফোর্ড ও JSON: কেন প্রতিটি অ্যাপ এটিই ব্যবহার করে
কীভাবে ডগলাস ক্রকফোর্ড JSON‑কে জনপ্রিয় করেছেন এবং কেন এটি ওয়েব অ্যাপ ও API‑গুলোর ডিফল্ট ভাষায় পরিণত হয়েছে—সঙ্গে আজ JSON দক্ষভাবে ব্যবহারের জন্য ব্যবহারিক টিপস।

JSON সহজ ভাষায়: এটা কী এবং কেন গুরুত্বপূর্ণ
JSON (JavaScript Object Notation) হল কী‑ভ্যালু পেয়ার্স এবং তালিকা ব্যবহার করে ডেটা প্লেইন টেক্সটে উপস্থাপন করার একটি হালকা উপায়।
যদি আপনি ওয়েব অ্যাপ তৈরি করেন—এমনকি যদি আপনি “ডেটা ফরম্যাট” সম্পর্কে বেশি ভাববেন না—তবুও JSON সম্ভবত আপনার প্রোডাক্টকে একত্রে বেঁধে রাখা গ্লু। এটি কীভাবে একটি ফ্রন্টএন্ড ডেটা চায়, কীভাবে ব্যাকএন্ড উত্তর দেয়, কীভাবে মোবাইল অ্যাপ স্টেট সিঙ্ক করে, এবং কীভাবে তৃতীয়‑পার্টি সার্ভিস ইভেন্ট পাঠায়। JSON যদি পরিস্কার ও ধারাবাহিক হয়, দলগুলো দ্রুত ডেলিভারি করে; যদি বিশৃঙ্খল হয়, প্রতিটি ফিচারের কাজ লম্বা হয় কারণ সবাই ডেটার “অর্থ” নিয়ে যুক্তি করে।
একটি ছোট উদাহরণ
এখানে একটি ছোট JSON অবজেক্ট আছে যা এক নজরে পড়া যায়:
{
"userId": 42,
"name": "Sam",
"isPro": true,
"tags": ["beta", "newsletter"]
}
প্রযুক্তিগত প্রসঙ্গ না জেনে ও সাধারণত আপনি ধরে নিতে পারবেন কী ঘটছে: একজন ব্যবহারকারীর একটি ID, একটি নাম, একটি স্ট্যাটাস ফ্ল্যাগ, এবং ট্যাগের একটি তালিকা আছে।
আপনি এই আর্টিকেল থেকে কী পাবেন
আপনি জানবেন:
- JSON কোথা থেকে এলো এবং কীভাবে এটি মেইনস্ট্রিম হয়ে উঠলো (ডগলাস ক্রকফোর্ডের ভূমিকা সহ)
- কেন এর “মনিমাল” ডিজাইন জেতার বড় অংশ
- কেন JSON API ও HTTP‑এর সাথে এত স্বাভাবিকভাবে মিলে যায়
- JSON ভালোভাবে ব্যবহারের জন্য প্র্যাকটিক্যাল গাইডলাইন—যাতে আপনার অ্যাপ বড় হয়ে উঠলেও পে লোডগুলো বোঝা যায়
লক্ষ্য সোজা: আপনাকে শুধু JSON কী তা বোঝানো নয়, বরং কেন প্রায় প্রতিটি অ্যাপ এটিই “বলে” এবং দলের সাধারণ ভুলগুলো কিভাবে এড়াতে হবে।
ডগলাস ক্রকফোর্ডের ভূমিকা: JSON কীভাবে মেইনস্ট্রিম হল
ডগলাস ক্রকফোর্ড JSON‑এর প্রতিটি ধারণা “আবিষ্কার” করেননি, কিন্তু তিনি অন্য একটি গুরুত্বপূর্ণ কাজ করেছেন: তিনি একটি সাধারণ, কার্যকর প্যাটার্নকে দৃশ্যমান করে উঠালেন, নাম দিলেন, এবং সেটিকে প্রচার করলেন।
প্রাথমিক ওয়েব সমস্যাটি: ডেটা এক্সচেঞ্জ ছিল অগোছালো
ওয়েব অ্যাপের প্রথম সময়ে, ব্রাউজার ও সার্ভারের মধ্যে ডেটা স্থানান্তরের জন্য দলগুলো অস্বস্তিকর অপশন নিয়ে ঝামেলা করছিলো। XML প্রচলিত ছিল কিন্তু verbose। কাস্টম ডেলিমিটার‑ভিত্তিক ফরম্যাটগুলো কম্প্যাক্ট ছিল কিন্তু ভঙ্গুর। JavaScript তাত্ত্বিকভাবে ডেটাকে কোড হিসাবে ইভ্যালু করতে পারত, কিন্তু সেটা “ডেটা” ও “এক্সিকিউটেবল স্ক্রিপ্ট”‑এর মধ্যে রেখা মুছে দিত, যা বাগ ও সিকিউরিটি সমস্যার কারণ হতো।
ক্রকফোর্ড একটি সহজ পথ দেখলেন: JavaScript literal সিনট্যাক্সের একটি ছোট সাবসেট ব্যবহার করা যা সাধারণ ডেটা নির্ভরযোগ্যভাবে প্রতিনিধিত্ব করতে পারে—অবজেক্ট, অ্যারে, স্ট্রিং, নাম্বার, বুলিয়ান, ও null—অতিরিক্ত ফিচার ছাড়া।
নামকরণ, ডকুমেন্টেশন, এবং “একটি পৃষ্ঠার” গুরুত্ব
ক্রকফোর্ডের সবচেয়ে বড় অবদানের একটি ছিল সামাজিক, প্রযুক্তিগত নয়: তিনি এটাকে JSON (JavaScript Object Notation) বললেন এবং json.org‑এ স্পষ্ট ডকুমেন্টেশন প্রকাশ করলেন। এতে দলগুলোকে একটি শেয়ারকৃত শব্দভাণ্ডার দিলো ("আমরা JSON পাঠাব"), এবং একটি রেফারেন্স যা ছোট বলে পড়তে সুবিধা হয় এবং বাস্তবায়নের জন্য যথেষ্ট কঠোর।
তিনি JSON‑কে JavaScript প্রোগ্রামিং ভাষার বাইরে একটি ডেটা ফরম্যাট হিসেবে প্রোমোটও করলেন: অনেক ভাষাই এটিকে পার্স ও জেনারেট করতে পারে, এবং এটি সাধারণ ডেটা স্ট্রাকচারের সাথে স্বাভাবিকভাবে মিলেছে।
স্ট্যান্ডার্ডাইজেশন মাইলস্টোনগুলো যা বিশ্বাসযোগ্যতা দিল
দলগুলো যখন একটা ফরম্যাটে দীর্ঘমেয়াদি বাজি ধরতে নিরাপদ বোধ করে, তখন গ্রহণযোগ্যতা দ্রুত বাড়ে। JSON ধীরে ধীরে সেই “নিরাপদ বাজি” অবস্থায় ওঠে নিচের মাইলস্টোনগুলোয়:
- RFC 4627 (2006): ইন্টারঅপারেবল ইমপ্লিমেন্টেশনের জন্য প্রাথমিক আনুষ্ঠানিক বর্ণনা
- ECMA-404: JSON সিনট্যাক্স সংজ্ঞায়িত একটি সংক্ষিপ্ত স্ট্যান্ডার্ড
- RFC 7159 এবং পরে RFC 8259 (2017): ইন্টারঅপারেবলিটির ক্ল্যারিফিকেশন এবং ইন্টারনেটে JSON‑এর অবস্থান শক্ত করা
ক্রকফোর্ডের প্রচার, এই স্ট্যান্ডার্ডগুলো, এবং দ্রুত বাড়তে থাকা পার্সার ইকোসিস্টেম মিলিয়ে JSON‑কে একটি সুবিধাজনক কনভেনশন থেকে ক্লায়েন্ট‑সার্ভার কথাবার্তার ডিফল্ট ভাষা করে তুললো—বিশেষ করে HTTP API‑গুলোর মাঝে (এ সম্পর্কে পরবর্তী অংশে /blog/json-and-apis)।
JSON আসার আগে: ওয়েব কোন ডেটা ফরম্যাটগুলো ব্যবহার করত
JSON ডিফল্ট হওয়ার আগে ওয়েব বিভিন্ন ফরম্যাটে নির্ভর করত যেগুলো হয় খুব ভারী, খুব অনিয়মিত, বা স্কেলের সাথে মিল রেখে কাজ করে না।
JSON এর আগে মানুষ কী ব্যবহার করত
XML ছিল বড় “স্ট্যান্ডার্ড” পছন্দ। এটা ভাষা-অধিভুক্ত কাজ করে, টুলিং ছিল, এবং নেস্টেড স্ট্রাকচার প্রকাশ করতে পারত। তবে এর সাথে অনেক আনুষ্ঠানিকতা এসেই যেত।
একই সময়ে, অনেক অ্যাপ কাস্টম কুয়ারি স্ট্রিং হিসেবে ডেটা পাঠাত (বিশেষ করে প্রারম্ভিক AJAX‑শৈলীর অনুরোধে): কী/ভ্যালু পেয়ার্স URL বা POST বডিতে ঢোকানো হতো। অন্যান্যরা কাস্টম টেক্সট ফরম্যাট উদ্ভাবন করত—কমা‑সেপারেটেড তালিকা, পাইপ‑ডেলিমিটেড ব্লব—প্রায়ই নিজস্ব এসকেপিং নিয়ম নিয়ে যেগুলো কেবল একটা ডেভেলপারই বুঝতো।
যে পেইন‑পয়েন্টগুলো দলগুলো বারবার ভোগ করেছিল
আম সমস্যা গুলো তাত্ত্বিক নয় ছিল:
- বহুলতা: XML ছোট পে‑লোডকেও বরা করে তুলত, বড় পে‑লোডগুলো খুবই বিশাল লাগে।
- পার্সিং জটিলতা: বাস্তবজগতের XML প্রায়ই ভারী পার্সার দাবি করে এবং নেমস্পেস, অ্যাট্রিবিউট বনাম এলিমেন্ট, এবং হোয়াইটস্পেস‑এর সাবধানতার দরকার পড়ত।
- অসামঞ্জস্য কনভেনশন: কাস্টম ফরম্যাটে প্রতিটি এন্ডপয়েন্ট নিজস্ব মিনি‑প্রোটোকল হয়ে যেত। ক্লায়েন্টদের টাইপ, এনকোডিং, এবং এজ‑কেসগুলো অনুমান করতে হতো।
কেন “ভালো পর্যাপ্ত এবং সহজ” জয় করে
অধিকাংশ অ্যাপের দরকার এমন ফরম্যাট নয় যা প্রতিটি সম্ভাব্য ডকুমেন্ট স্ট্রাকচার প্রকাশ করতে পারে। তাদের দরকার একটি পূর্বানুমেয় উপায় যাতে অবজেক্ট, অ্যারে, স্ট্রিং, নাম্বার, এবং বুলিয়ান দ্রুত ও ধারাবাহিকভাবে পাঠানো যায়—কম সিদ্ধান্ত, কম ভুল। সরল ফরম্যাটগুলো সেই সিদ্ধান্ত‑সংখ্যা কমায়।
দ্রুত তুলনা: XML বনাম JSON
<user>
<id>42</id>
<name>Ada</name>
<isActive>true</isActive>
</user>
{
"id": 42,
"name": "Ada",
"isActive": true
}
উভয় একই ধারণা প্রকাশ করে, কিন্তু JSON স্ক্যান করা সহজ, জেনারেট করা সহজ, এবং বেশিরভাগ অ্যাপ যেভাবে মেমরিতে ডেটা মডেল করে তার কাছাকাছি।
কেন JSON মনিমাল: কাজ করা ডিশাইন পছন্দগুলো
JSON‑এর টিকে থাকা দুর্ঘটনা নয়। এটি হয়েছেঁ ইচ্ছাকৃতভাবে ছোট: বাস্তব অ্যাপ ডেটা প্রকাশ করার জন্য যথেষ্ট স্ট্রাকচার আছে, কিন্তু অনন্ত ভ্যারিয়েশনের সুযোগ নেই।
দরকারি ন্যূনতম বিল্ডিং ব্লক
JSON আপনাকে এমন একটি ন্যূনতম টুলকিট দেয় যা বেশিরভাগ অ্যাপ ডেটা‑চিন্তার সাথে পরিষ্কারভাবে মিলেছে:
- Objects: নামাযুক্ত ফিল্ড (যেমন একটি কনট্যাক্ট যার
name,emailআছে) - Arrays: অর্ডার করা তালিকা (যেমন কার্টের আইটেম)
- Strings: টেক্সট
- Numbers: সংখ্যাগত মান (কিছু নোট– আছে)
- Booleans:
true/false - null: স্পষ্ট "কোনো মান নেই"
এটুকুই। কোনো তারিখ টাইপ নেই, কোনো মন্তব্য নেই, কোনো কাস্টম নাম্বার টাইপ নেই, কোনো রেফারেন্স নেই। এই সরলতা JSON‑কে ভাষা ও প্ল্যাটফর্ম জুড়ে সহজ করে তোলে।
মানুষের পড়ার যোগ্য, মেশিন‑বান্ধব—ডিজাইনের কারণে
JSON পর্যাপ্তভাবে মানব পাঠযোগ্য যাতে লগ ও API রেসপন্সে স্ক্যান করা যায়, পাশাপাশি মেশিন দ্রুত পার্স করতে পারে। এটা অতিরিক্ত আনুষ্ঠানিকতা এড়ায়, কিন্তু স্পষ্ট ডিলিমিটার রাখে ({}, [], :) যাতে পার্সার দ্রুত ও নির্ভরযোগ্য থাকে।
ট্রেড‑অফ: JSON এতই মনিমাল যে, দলগুলোকে টাইমস্ট্যাম্প, অর্থ, এবং আইডেন্টিফায়ারের মতো বিষয়গুলোর জন্য কনভেনশন নিয়ে একমত হতে হয় (উদাহরণ: তারিখের জন্য ISO‑8601 স্ট্রিং)।
কড়াইকে একটি ফিচার হিসেবে দেখুন
JSON‑এর কঠোর নিয়মগুলো (ডাবল‑কোটেড স্ট্রিং, ট্রেইলিং কমা নয়, ছোট টাইপ সেট) অনিশ্চয়তা কমায়। কম অনিশ্চয়তা মানে যখন ভিন্ন সিস্টেম একে অপরের সাথে ডেটা বিনিময় করে তখন কম "আমার মেশিনে কাজ করে" ধাঁচের ব্যর্থতা ঘটে।
একটি ভুল ধারণা পরিষ্কার করা প্রয়োজন
JSON দেখতে JavaScript অবজেক্ট সিনট্যাক্সের মতো, কিন্তু JSON JavaScript নয়। এটা একটি ভাষা‑নিরপেক্ষ ডেটা ফরম্যাট যার নিজস্ব নিয়ম আছে, Python, Java, Go, Ruby এবং অন্য যে কোনো জায়গায় ব্যবহারযোগ্য যেখানে ধারাবাহিক সিরিয়ালাইজেশন ও ইন্টারঅপারেবলিটি দরকার।
JSON কীভাবে ফ্রন্টএন্ড এবং ব্যাকএন্ডের ডিফল্ট হয়ে উঠল
JSON জিতলো কারণ এটা সবচেয়ে ফিচার‑সমৃদ্ধ ছিল না; জিতলো কারণ এটা সেইভাবে মিলত যেভাবে ওয়েব অ্যাপ নির্মিত হচ্ছিল: জাভাস্ক্রিপ্ট‑ভিত্তিক ব্রাউজার একটি সার্ভারের সাথে সহজ HTTP অনুরোধে কথা বলছে।
JavaScript ইতিমধ্যেই প্রতিটি পৃষ্ঠায় ছিল
যখন ব্রাউজারগুলো JavaScript‑এ স্ট্যান্ডার্ডাইজ়ড হলো, ক্লায়েন্ট সাইডের কাছে স্ট্রাকচার্ড ডেটা উপস্থাপনের একটি ইনবিল্ট উপায় ছিল: অবজেক্ট, অ্যারে, স্ট্রিং, নাম্বার, বুলিয়ান, এবং null। JSON সেই প্রিমিটিভগুলোর সাথে নিকটভাবে মিলে যায়, তাই "ব্রাউজার যা বুঝতে পারে" এবং "সার্ভার যা পাঠায়" এর মধ্যে ডেটা স্থানান্তর স্বাভাবিক লাগলো।
প্রারম্ভিক Ajax‑শৈলীর অ্যাপগুলো এটি ত্বরান্বিত করেছিল। সার্ভার পুরো HTML পেজ ফেরত দেওয়ার বদলে UI রেন্ডার করার জন্য একটি ছোট পে‑লোড ফেরত দিতে পারত। এমন একটি রেসপন্স দ্রুত কাজে লাগে:
{
"user": {"id": 42, "name": "Sam"},
"unreadCount": 3
}
কেবল ব্রাউজারই নয়, প্রতিটি ভাষায় সহজ পার্সিং
যদিও JSON‑এর সিনট্যাক্স JavaScript‑এর মত মনে হয়, এটি ভাষা‑নিরপেক্ষ। যত তাড়াতাড়ি সার্ভার ও ক্লায়েন্ট অন্যান্য ভাষায় ওয়েব ফ্রন্টএন্ডের সাথে ইন্টারঅ্যাক্ট করতে চাইলো, JSON লাইব্রেরি গুলো এগিয়ে এল—এবং দ্রুতই "স্ট্যান্ডার্ড সরঞ্জাম" হয়ে উঠল। একটি JSON স্ট্রিংকে নেটিভ ডেটা স্ট্রাকচারে পার্স করা সাধারণত এক কল ফাংশন, এবং জেনারেট করাও একই রকম সহজ।
টুলিং স্নোবল‑ইফেক্ট: ডিফল্ট পছন্দে পরিণত
একবার ফ্রেমওয়ার্ক, API ক্লায়েন্ট, ডিবাগগার, প্রক্সি, এবং ডকুমেন্টেশন টুলগুলো JSON ধরে নিলে অন্য কিছু বেছে নেওয়া ঘর্ষণ বাড়ায়। ডেভেলপাররা ব্রাউজার ডেভটুলসে পে‑লোড ইনস্পেক্ট করতে পারে, টেস্টে উদাহরণ কপি/পেস্ট করতে পারে, এবং এনকোডিং, ডিকোডিং, ও এরর‑হ্যান্ডলিংয়ের জন্য পরিপক্ক লাইব্রেরিতে নির্ভর করতে পারে।
এক পে‑লোড, অনেক কনজিউমার
একটি JSON রেসপন্স ওয়েব UI, মোবাইল অ্যাপ, একটি অভ্যন্তরীণ সার্ভিস, এবং তৃতীয়‑পার্টি ইন্টিগ্রেশনকে কম পরিবর্তনে সার্ভ করতে পারে। সেই ইন্টারঅপারেবিলিটি JSON‑কে একটি নিরাপদ বাজি করে তুললো দলগুলোর জন্য, বিশেষ করে "একটি ব্যাকএন্ড, অনেক ফ্রন্টএন্ড" স্থাপত্যে।
JSON এবং API: HTTP‑এর সাথে বাস্তবগত মেল
JSON জিতলো কারণ এটা ফ্যান্তাসি ছিল না—এটি ওয়েব কীভাবে কাজ করে তার সাথে সুন্দরভাবে মেলে। HTTP অনুরোধ পাঠানো এবং রেসপন্স পাওয়ার উপর নির্মিত, আর JSON সেই রেসপন্স (বা অনুরোধ)‑এর বডি হিসেবে স্ট্রাকচার্ড ডেটা উপস্থাপনের একটি সহজ, পূর্বানুমেয় উপায়।
HTTP + JSON এক মিনিটে
একটি API অনুরোধ সাধারণত একটি মেথড এবং একটি URL (উদাহরণ: GET /users?limit=20) থাকে। সার্ভার একটি স্ট্যাটাস কোড (যেমন 200 বা 404), হেডারস, এবং একটি ঐচ্ছিক বডি দিয়ে উত্তর দেয়।
বডি যদি JSON হয়, একটি গুরুত্বপূর্ণ হেডার হল:
Content-Type: application/json
এই হেডার ক্লায়েন্টকে বলে কিভাবে বাইটগুলো ব্যাখ্যা করতে হবে। ইনকামিং দিকে (ক্লায়েন্ট → সার্ভার) Content-Type: application/json পাঠানো মানে "আমি JSON পোস্ট করছি," এবং সার্ভার সেটি ধারাবাহিকভাবে পার্স করতে পারে।
সাধারণ API রেসপন্স প্যাটার্ন
JSON অনেক API‑তে সাধারণ যে প্যাটার্নগুলো দেখা যায় তাদের জন্য বিশেষভাবে ভাল কাজ করে।
Pagination প্রায়ই একটি তালিকাকে মেটাডেটা দিয়ে র্যাপ করে:
{
"data": [{"id": 1, "name": "A"}],
"pagination": {"limit": 20, "offset": 0, "total": 153}
}
Filtering এবং sorting সাধারণত URL কুয়ারি স্ট্রিং‑এ হয়, যখন ফলাফল JSON অ্যারে (বা একটি data ফিল্ড) হিসেবে থাকে। উদাহরণ: GET /orders?status=paid&sort=-created_at.
Error responses‑এর জন্য একটি স্ট্যান্ডার্ড শেপ থাকা ক্লায়েন্টকে মেসেজ দেখাতে এবং রিট্রাই হ্যান্ডল করতে সাহায্য করে:
{
"error": {
"code": "invalid_request",
"message": "limit must be between 1 and 100",
"details": {"field": "limit"}
}
}
বাস্তবগত ম্যাচ সহজ: HTTP ডেলিভারি ও অর্থ দেয় (ভের্বস, স্ট্যাটাস কোড, ক্যাশিং), আর JSON ডেটার জন্য একটি হালকা, মানুষের পড়ার মতো কাঠামো দেয়।
JSON বনাম XML: কেন অ্যাপ ডেটার জন্য JSON সাধারণত জয় করে
লোকেরা যখন JSON এবং XML তুলনা করে, তারা প্রায়ই "অ্যাপের জন্য ডেটা" বনাম "ডকুমেন্টের জন্য ডেটা" তুলনা করে থাকে। উভয় ফরম্যাট স্ট্রাকচার্ড ইনফরমেশন প্রকাশ করতে পারে, কিন্তু JSON সাধারণত সেইভাবে মিলে যেথায় প্রতিটি অ্যাপ বাস্তবতয় ডেটা চায়: সহজ অবজেক্ট, তালিকা, স্ট্রিং, নাম্বার, বুলিয়ান, ও null।
পড়ার যোগ্যতা ও সাইজ: কম ট্যাগ, কম গোলমাল
XML ডিফল্টভাবে verbose। খুলা ও বন্ধ ট্যাগ বারবার হওয়ায় পে‑লোড বড় হয় এবং লগ বা নেটওয়ার্ক ইনস্পেক্টরে স্ক্যান করা কঠিন হয়। JSON সাধারণত একই অর্থ কম কেবড়ি চরিত্র ও কম ভিজ্যুয়াল গোলমাল দিয়ে দেয়, যা ডিবাগিং‑এ সাহায্য করে এবং স্কেলে ব্যান্ডউইথ খরচও কমাতে পারে।
এটা শুধু নান্দনিক নয়: ছোট পে‑লোড দ্রুত ট্রান্সফার করে এবং পার্সার ও প্রক্সির কাজ কমায়।
ডেটা মডেল‑অ্যালাইনমেন্ট: ম্যাপ ও লিস্ট অ্যাপ ডেটার সাথে মেলে
অধিকাংশ অ্যাপ ডেটা স্বাভাবিকভাবে ডিকশনারি (কী/ভ্যালু ম্যাপ) ও অ্যারে (তালিকা) আকারে থাকে: একটি ব্যবহারকারী যার অ্যাট্রিবিউট আছে, একটি অর্ডার যার লাইন আইটেম আছে, একটি পেজ যার কম্পোনেন্ট আছে। JSON সেই মানসিক মডেলের সাথে সরাসরি মেলে, এবং এটি জাভাস্ক্রিপ্ট ও আধুনিক ভাষাগুলোর নেটিভ ডেটা স্ট্রাকচারের সাথে মিলে।
XML একই স্ট্রাকচার প্রকাশ করতে পারে, কিন্তু সাধারণত কনভেনশন লাগে: অ্যাট্রিবিউট বনাম এলিমেন্ট, তালিকার জন্য বারবার চাইল্ড এলিমেন্ট, এবং "কি সংখ্যা" সেটি নির্ধারণ করতে অতিরিক্ত typing‑এর দরকার থাকে (কারণ সবকিছু টেক্সট হিসেবে থাকে যদি না আপনি টাইপিং যোগ করেন)।
XML কোথায় শক্তিশালী থাকতে পারে
ডকুমেন্ট‑কেন্দ্রিক ইউজকেসে XML এখনও শক্ত: মিশ্রিত কনটেন্ট (টেক্সট ও মার্কআপ একসাথে), পাবলিশিং ওয়ার্কফ্লো, এবং এমন ইকোসিস্টেম যেখানে পরিপক্ক XML টুলিং আছে (উদাহরণস্বরূপ কিছু এন্টারপ্রাইজ ইন্টিগ্রেশন)। যদি আপনার পে‑লোড ডকুমেন্টের কাছাকাছি হয়, XML ভালো ফিট হতে পারে।
নির্দেশনা: ট্রেন্ড নয়, চাহিদা অনুযায়ী বেছে নিন
আপনার প্রধান উদ্দেশ্য যদি ফ্রন্টএন্ড, ব্যাকএন্ড, এবং API‑এর মধ্যে অ্যাপ ডেটা এক্সচেঞ্জ করা হয়, তাহলে JSON সাধারণত সরল ও প্রত্যক্ষ পছন্দ। যদি আপনার দরকার ডকুমেন্ট মার্কআপ, মিশ্রিত কনটেন্ট, বা একটি XML‑ভরসা ডোমেইনে ইন্টিগ্রেশন থাকে, তবে XML বেছে নিন।
JSON‑এর নিয়মগুলো যে দলগুলোকে এখনও অবাক করে দেয়
JSON দেখতে "JavaScript অবজেক্ট" তাই দলগুলো প্রায়ই ধরে নেয় তারা এটাকে JavaScript‑এর মতোই ব্যবহার করতে পারবে। এখানেই বাগ এসে যায়: JSON কঠোর, ছোট, এবং কম অনুকম্পী।
কঠোর সিনট্যাক্স নিয়মগুলো
কিছু "আমার মেশিনে চলে" ধরনের ইস্যু বারবার দেখা যায়:
- কী এবং স্ট্রিং ভ্যালুগুলোর জন্য ডাবল কোট আবশ্যক।
{name: "Ada"}JSON নয়;{ "name": "Ada" }JSON। - ট্রেইলিং কমা নেই।
{ "a": 1, }অনেক পার্সারে ফেল করবে। - কমেন্ট নেই।
//এবং/* ... */অবৈধ। যদি নোট দরকার হয়, ডকুমেন্টেশনে রাখুন বা ডেভেলপমেন্টে সাবধানে আলাদা ফিল্ড ব্যবহার করুন।
এই সীমাবদ্ধতাগুলো উদ্দেশ্যপ্রণোদিত: এগুলো পার্সারগুলোকে সহজ ও ধারাবাহিক রাখে।
নাম্বার, তারিখ, এবং ডেসিমাল: ইচ্ছে করে টাইপ নির্বাচন
JSON‑এ কেবল একটি সংখ্যাত্মক টাইপ আছে: number। বিল্ট‑ইন integer, decimal, বা date নেই।
- টাকা ও উচ্চ‑প্রেসিশন ডেসিমাল (মূল্য, এক্সচেঞ্জ রেট) সাধারণত স্ট্রিং হিসেবে পাঠানো নিরাপদ (যেমন
"19.99") যেন রাউন্ডিং ভিন্ন পরিবেশে সমস্যা না করে। - তারিখ ও সময় সাধারণত স্ট্রিং হওয়া উচিত, একটি স্ট্যান্ডার্ড ফরম্যাটে, সাধারণত ISO 8601 (উদাহরণ:
"2025-12-26T10:15:30Z")। কাস্টম তারিখ ফরম্যাট এড়িয়ে চলুন যা অনুমান করতে হয়। - খুব বড় ইন্টেজার নিয়ে সাবধান থাকুন: কিছু এনভায়রনমেন্ট সেগুলো নিখুঁতভাবে রেপ্রেজেন্ট করতে পারে না। সন্দেহ হলে স্ট্রিং হিসেবে পাঠান।
ইউনিকোড ও এসকেপিং বাস্তব সিস্টেমে
JSON ইউনিকোড সাবধানে সমর্থন করে, কিন্তু বাস্তব সিস্টেমগুলো এখনও এনকোডিং ও এসকেপিং নিয়ে সমস্যায় পড়ে:
- তারবিহীন সবকিছু UTF-8 হিসেবে ওভার‑দ্য‑ওয়্যার নিশ্চিত করুন।
- কিছু ক্যারেক্টার স্ট্রিংয়ের ভেতরে এসকেপ করতে হয় (যেমন কোট
"এবং ব্যাকস্ল্যাশ\\)। - ডকুমেন্ট থেকে কপি করা অদৃশ্য ক্যারেক্টার (নন‑ব্রেকিং স্পেস, স্মার্ট কোট) পার্সিং ভাঙাতে পারে—এগুলো লক্ষ্য করুন।
সিকিউরিটি: JSON সঠিকভাবে পার্স করুন
সদা‑সুন্দরভাবে একটি বাস্তব JSON পার্সার দিয়ে পার্স করুন (JSON.parse বা আপনার ভাষার সমতুল্য)। eval‑স্টাইল পদ্ধতি ব্যবহার করা এড়িয়ে চলুন, এমনকি যদি সেটি “দ্রুত” মনে হয়। এবং এজেসে ইনপুট ভ্যালিডেট করুন—বিশেষ করে পাবলিক API‑র জন্য—যেন অনাকাঙ্ক্ষিত ফিল্ড বা টাইপ ব্যবসায়িক লজিকে ঢুকে না পড়ে।
এমন JSON পে‑লোড ডিজাইন করা যেগুলো সময়ের সাথে ভালো থাকে
একটি JSON পে‑লোড কেবল "ট্রানজিটে ডেটা" নয়—এটি দলের, সিস্টেমের, এবং ভবিষ্যৎ আপনার মধ্যেকার দীর্ঘমেয়াদি ইন্টারফেস। একটি পে‑লোড যা স্থায়ী হয় এবং একটি যা প্রতি ত্রৈমাসিকে রিরাইট হওয়ার মধ্যে পার্থক্য সাধারণত কুঁচকানো ডিসিপ্লিন: ধারাবাহিকতা, সাবধানে চেঞ্জ ম্যানেজমেন্ট, ও পূর্বানুমেয় এজ‑কেস।
ধারাবাহিকতা ক্যালারিটি ছাড়ায়
নিয়ম বেছে নিয়ে সব জায়গায় টেনে আনুন:
- এক কেসিং স্টাইল বেছে নিন (সাধারণত
camelCaseবাsnake_case) এবং মিশ্র করবেন না। - কী‑গুলিকে স্থিতিশীল রাখুন।
userId‑কেidকরা একটি ব্রেকিং চেঞ্জ। - "ম্যাজিক" পলিমরফিজমের বদলে স্পষ্ট ফিল্ড পছন্দ করুন। একটি কী টাইপ বদলালে (
"count": 3বনাম"count": "3") বাগ অনুসন্ধান কঠিন হয়।
ড্রামা ছাড়া ভার্সনিং
আপনি বেশিরভাগ ভার্সন‑যুদ্ধ এড়াতে পারবেন অ্যাডিটিভ চেঞ্জের মাধ্যমে:
- পুরোনো ফিল্ড বদলে না করে নতুন ঐচ্ছিক ফিল্ড যোগ করুন।
- রিমুভালকে ডিপ্রিকেট হিসেবে বিবেচনা করুন: পুরোনো ফিল্ড রাখা, নতুন ক্লায়েন্টদের জন্য ডকুমেন্টেশনে বন্ধ করে দেওয়া, এবং রিমুভালের তারিখ ঘোষণা করা।
- যদি সত্যিই ব্রেকিং চেঞ্জ প্রয়োজন হয়, এন্ডপয়েন্ট ভার্সন করুন (
/v2/...) বা হেডারে একটি স্পষ্ট ভার্সন সংকেত রাখুন—সেন্সরলি সেমান্টিক পরিবর্তন করবেন না।
এররগুলোদের বোরিংভাবে পূর্বানুমেয় রাখুন
ক্লায়েন্টরা ব্যর্থতা সবচেয়ে ভালো হ্যান্ডল করে যখন এররগুলো একরকম শেপ শেয়ার করে:
{
"error": {
"code": "INVALID_ARGUMENT",
"message": "email must be a valid address",
"details": { "field": "email" }
}
}
বাস্তবতার সাথে মেলে এমন ডকুমেন্টেশন
চমৎকার JSON ডকুমেন্টেশনে বাস্তব উদাহরণ থাকে—সফল ও ব্যর্থ উভয় রেসপন্সসহ—সামগ্রিক ফিল্ডগুলোসহ। উদাহরণগুলো প্রোডাকশনের আচরণের সাথে সিঙ্ক রেখে দিন, এবং কোন ফিল্ড ঐচ্ছিক, নালযোগ্য, বা ডিপ্রিকেটেড তা স্পষ্টভাবে বলুন। যখন উদাহরণগুলো বাস্তব রেসপন্সের সাথে মেলে, ইন্টিগ্রেশন দ্রুত হয় এবং কম ভাঙে।
Koder.ai কোথায় ফিট করে (আপনি দ্রুত API তৈরি করলে)
যদি আপনি দ্রুত ফিচার স্পিন‑আপ করার জন্য vibe‑coding ওয়ার্কফ্লো ব্যবহার করেন, JSON কনট্র্যাক্টগুলো আরও গুরুত্বপূর্ণ হয়ে ওঠে: দ্রুত ইটারেশন ভালো, যতক্ষণ না ক্লায়েন্ট ও সার্ভিসরা ভিন্ন হয়ে যায়।
Koder.ai‑তে দলগুলো সাধারণত React ফ্রন্টএন্ড প্লাস Go + PostgreSQL ব্যাকএন্ড জেনারেট করে এবং পরে API শেপগুলোকে planning mode‑এ ইটারেট করে লক ইন করার আগে। snapshots ও rollback‑এর মত ফিচারগুলো সাহায্য করে যখন একটা ছোট JSON চেঞ্জ ব্রেকিং প্রমাণ হয়, এবং source code export কনট্র্যাক্টকে আপনার রিপোতে রাখতে ও টেস্ট দিয়ে জোরদার করতে সহজ করে।
ভ্যালিডেশন ও কনট্র্যাক্ট: JSON Schema এবং তার বাইরেও
JSON জেনারেট করা সহজ—এটাই শক্তি এবং এরই ফাঁদ। যদি এক সার্ভিস "age": "27" (স্ট্রিং) পাঠায় এবং অন্যটি 27 (নাম্বর) আশা করে, JSON‑এর ভেতরেই কিছুই এটা থামাবে না। ফলাফল সাধারণত সবচেয়ে খারাপ ধরণের বাগ: প্রোডাকশনে ক্লায়েন্ট ক্র্যাশ, বা সূক্ষ্ম UI গ্লিচ যা নির্দিষ্ট ডেটার সাথেই হয়।
কেন ভ্যালিডেশন গুরুত্বপূর্ণ (এমনকি “সরল” JSON-এর জন্য)
ভ্যালিডেশন মাত্রা হলো খারাপ বা অনাকাঙ্ক্ষিত ডেটাকে সেই পর্যায়ে আটকানো যেখানে তা সেই ডেটার উপর নির্ভরকারী মানুষ বা সিস্টেমগুলো পৌঁছায়—আপনার ফ্রন্টএন্ড, পার্টনার ইন্টিগ্রেশন, অ্যানালিটিক্স পাইপলাইন, বা মোবাইল অ্যাপ।
সাধারণ ফেইল পয়েন্টগুলো: অনুপস্থিত রিকোয়ায়ার্ড ফিল্ড, রিনেম করা কী, ভুল টাইপ, এবং “প্রায়‑ঠিক” মান (যেমন তারিখের অসংগত ফরম্যাট)। API বাউন্ডারিতে একটি ছোট ভ্যালিডেশন ধাপ এইগুলোকে আউটেজ থেকে পরিষ্কার এরর মেসেজে পরিণত করতে পারে।
JSON Schema: এটি কী এবং কখন ব্যবহার করবেন
JSON Schema হল একটি স্ট্যান্ডার্ড উপায় যা আপনার JSON কেমন হওয়া উচিত তা বর্ণনা করে: রিকোয়ার্ড প্রপার্টি, অনুমোদিত টাইপ, enum, প্যাটার্ন, ইত্যাদি। এটি সবচেয়ে উপকারী যখন:
- আপনার একাধিক ক্লায়েন্ট আছে (ওয়েব + মোবাইল + পার্টনার) একই API ব্যবহার করছে
- আপনি সময়ের সাথে ব্যাকওয়ার্ড‑কম্প্যাটিবল চেঞ্জ রাখতে চান
- আপনি CI/CD‑তে অটোমেটেড চেক চান, কেবল মানব রিভিউ নয়
একটি স্কিমা থাকলে আপনি সার্ভারে রিকোয়েস্ট ভ্যালিডেট করতে পারেন, টেস্টে রেসপন্স ভ্যালিডেট করতে পারেন, এবং ডকুমেন্টেশন জেনারেট করতে পারেন। অনেক দল এটিকে তাদের API ডকসের সাথে জুড়েন (অften OpenAPI দিয়ে), যাতে কনট্র্যাক্ট স্পষ্ট হয় কেবল "ট্রাইবাল নলেজ" নয়। যদি আপনি ইতিমধ্যেই ডেভেলপার ডক্স প্রকাশ করেন, /docs থেকে স্কিমা উদাহরণ লিংক করা কনসিস্টেন্সি বজায় রাখতে সাহায্য করবে।
লাইটওয়েট বিকল্পসমূহ (এবং পরিপূরক)
প্রতিটি দলকে দিন একে‑রকম পূর্ণ স্কিমা টুলিং লাগবে না প্রথম দিন। প্র্যাকটিক্যাল অপশনগুলো:
- রিপোতে রাখা শেয়ার্ড উদাহরণ পে‑লোড (golden files)
- কনট্র্যাক্ট টেস্ট যা রিয়েল রেসপন্স এক্সপেকটেশনের সাথে মিলেছে কিনা যাচাই করে
- কনজিউমার‑ড্রাইভেন কনট্র্যাক্ট (ক্লায়েন্টরা যা প্রয়োজন তা নির্ধারণ করে)
একটি সহায়ক নিয়ম: উদাহরণ ও কনট্র্যাক্ট টেস্ট দিয়ে শুরু করুন, এবং যখন চেঞ্জ ও ইন্টিগ্রেশন বাড়বে তখন JSON Schema যোগ করুন।
স্কেলে JSON‑এর পারফরম্যান্স ও নির্ভরযোগ্যতা
JSON কয়েকটা ফিল্ড পাঠানোর সময় “হালকা” মনে হয়। কিন্তু স্কেলে—শাকি মোবাইল ক্লায়েন্ট দুর্বল নেটওয়ার্কে, হাই‑ট্রাফিক API, অ্যানালিটিক্স‑ভারী পেজ—JSON পারফর্মেন্স সমস্যা বা নির্ভরযোগ্যতা ঝুঁকি হয়ে উঠতে পারে যদি আপনি সতর্ক না হন।
পে‑লোড ছোট রাখুন: পেজিং, ফিল্টার, ও ওভারফেচিং এড়ান
সবচেয়ে সাধারণ স্কেলিং সমস্যা পার্সিং নয়—একই কাণ্ডটা বেশি পাঠানো।
Pagination সহজ জয়: পূর্বানুমেয় অংশ ফেরত দিন (উদাহরণ: limit + cursor) যেন ক্লায়েন্ট হাজার হাজার রেকর্ড ডাউনলোড না করে। নেস্টেড অবজেক্ট ফেরত দেয় এমন এন্ডপয়েন্টে পার্শিয়াল রেসপন্স বিবেচনা করুন: ক্লায়েন্ট শুধু যা দরকার তা অনুরোধ করতে পারে (নির্বাচিত ফিল্ড বা “include” বিস্তৃতকরণ)। এটা ওভারফেচিং আটকায়, যেখানে একটি স্ক্রীন কেবল name ও status লাগে কিন্তু প্রতিটি ঐতিহাসিক ডিটেইল ও কনফিগারেশন ফিল্ড পায়।
প্রায়োগিক নিয়ম: রেসপন্সগুলো ডিজাইন করুন ব্যবহারকারীর ক্রিয়ার চারপাশে (একটি স্ক্রীন এখন কি চায়), না যে আপনার ডাটাবেস কীভাবে জয়েন করে।
কম্প্রেশন ও ক্যাশিং: কম বাইট, কম অনুরোধ
যদি আপনার API বড় JSON রেসপন্স সার্ভ করে, কম্প্রেশন ট্রান্সফার সাইজ উল্লেখযোগ্যভাবে কমাতে পারে। অনেক সার্ভার gzip বা brotli স্বয়ংক্রিয়ভাবে রেসপন্স কম্প্রেস করে, এবং বেশিরভাগ ক্লায়েন্ট এটি হ্যান্ডেল করে অতিরিক্ত কোড ছাড়া।
ক্যাশিং অন্য লিভার। উচ্চ স্তরে লক্ষ্য করুন:
- এমন ডেটার জন্য ক্যাশেবল রেসপন্স যেগুলো প্রতি সেকেন্ডে পরিবর্তিত হয় না
- স্পষ্ট ক্যাশ রুলস (উদাহরণ: ETag বা “last modified” প্যাটার্ন ব্যবহার)
এতে রিপিটেড ডাউনলোড কমে এবং ট্রাফিক স্পাইক মসৃণ হয়।
স্ট্রিমিং ও ইনক্রিমেন্টাল পার্সিং (যখন JSON বড় হয়ে যায়)
অত্যন্ত বড় আউটপুট—এক্সপোর্ট, ইভেন্ট ফিড, বাল্ক সিঙ্ক—এর জন্য স্ট্রিমিং রেসপন্স বা ইনক্রিমেন্টাল পার্সিং বিবেচনা করুন যাতে ক্লায়েন্ট পুরো ডকুমেন্ট মেমরিতে লোড করার আগেই কিছু কাজ করতে পারে। এটি বেশিরভাগ অ্যাপের জন্য প্রয়োজন নয়, কিন্তু যখন “একটি বড় JSON ব্লব” টাইমআউট করতে শুরু করে তখন এটি মূল্যবান অপশন।
অবজারভেবিলিটি: ডেটা ফাঁস না করে নিরাপদে লগ কর
JSON লগ করা সহজ—এটি সহায়ক ও বিপজ্জনক উভয়ই। লগগুলোকে একটি প্রোডাক্ট সার্ফেস হিসেবে বিবেচনা করুন:
- ডিফল্টভাবে পুরো রিকোয়েস্ট/রেসপন্স বডি লগ করা এড়ান
- সংবেদনশীল ফিল্ড (টোকেন, পাসওয়ার্ড, ব্যক্তিগত আইডেন্টিফায়ার) redact করুন
- কাঁচা পে‑লোডের উপর নির্ভর না করে ID, সময়, এবং এরর কোডগুলো ধরে রাখুন
ভালভাবে করলে আপনি দ্রুত ডিবাগ করবেন আর দুর্ঘটনবশত ডেটা‑এক্সপোজার রিস্কও কমবে।
JSON‑এর ভবিষ্যৎ এবং সহজ সেরা‑চর্চার চেকলিস্ট
JSON “শেষ” নয়—এটি স্থিতিশীল। এখন যা বদলায় তা হলো এর চারপাশের ইকোসিস্টেম: উন্নত এডিটর, ভাল ভ্যালিডেশন, নিরাপদ API কনট্র্যাক্ট, এবং এমন টুলিং যা দলগুলোকে দুর্ঘটনজনক ব্রেকিং চেঞ্জ এড়াতে সাহায্য করে।
JSON কোথায় যাচ্ছে
JSON সম্ভবত বেশিরভাগ ওয়েব ও মোবাইল অ্যাপের জন্য ডিফল্ট ওয়্যার ফরম্যাট থাকবে কারণ এটি বিস্তৃতভাবে সমর্থিত, ডিবাগ করা সহজ, এবং সাধারণ ডেটা স্ট্রাকচারের সাথে পরিষ্কারভাবে মেলে।
সর্ববৃহৎ পরিবর্তন হল টাইপড API‑র দিকে: দলগুলো এখনও JSON পাঠাবে, কিন্তু তারা সেটিকে আরও সূক্ষভাবে সংজ্ঞায়িত করবে JSON Schema, OpenAPI, ও কোড জেনারেটরের মত টুল দিয়ে। এর ফলে কম "আকৃতির গেসিং" মুহূর্ত, ভালো অটোকমপ্লিট, ও আগেভাগে ত্রুটি শনাক্তকরণ—JSON ত্যাগ না করেই।
সম্পর্কিত ফরম্যাট: JSON Lines / NDJSON
যখন আপনাকে অনেক রেকর্ড দক্ষতার সাথে পাঠাতে বা সংরক্ষণ করতে হয় (লগ, অ্যানালিটিক্স ইভেন্ট, এক্সপোর্ট), একটি একক বড় JSON অ্যারে অদক্ষ হতে পারে। JSON Lines (বা NDJSON) এটি সমাধান করে প্রতি লাইনে একটি JSON অবজেক্ট রেখে। এটা ভালভাবে স্ট্রিমিং করে, লাইনে‑লাইনে প্রসেস করা যায়, এবং কমান্ড‑লাইন টুলিংয়ের সাথে খাপ খায়।
একটি সরল সেরা‑চর্চার চেকলিস্ট
এটি একটি সংক্ষিপ্ত প্রি‑ফ্লাইট চেক আপনার পে‑লোডগুলোর জন্য যা একটি স্প্রিন্টের চেয়ে বেশি সময় বাঁচবে:
- কীগুলো ধারাবাহিক ও পূর্বানুমেয় রাখুন (একটি নামকরণ স্টাইল বেছে নিন)।
- স্থিতিশীল আইডেন্টিফায়ার ব্যবহার করুন (ক্লায়েন্টদের অ্যারে পজিশনের উপর নির্ভর না করতে বলুন)।
- ISO 8601 টাইমস্ট্যাম্প ব্যবহার করুন (উদাহরণ:
2025-12-26T10:15:00Z)। - “অনুপস্থিত” বনাম “খালি” বনাম
nullআলাদা করুন এবং আপনার পছন্দ ডকুমেন্ট করুন। - সাবধানে ভার্সন করুন (ফিল্ড যোগ করুন স্বাধীনভাবে; রিমুভ/রিনেম কেবল পরিকল্পনার সাথে)।
- এজেসে ভ্যালিডেট করুন (সার্ভার ইনপুট ভ্যালিডেশন; ক্লায়েন্ট‑সাইড স্যানিটি চেক)।
- সহায়ক এরর ফিরিয়ে দিন (মেশিন‑রিডেবল কোডসমেত মানব পাঠযোগ্য টেক্সট)।
শেখা চালিয়ে যান
আরও গভীরে যেতে চাইলে /blog এ সম্পর্কিত গাইডগুলো দেখুন—বিশেষ করে স্কিমা ভ্যালিডেশন, API ভার্সনিং, এবং দীর্ঘমেয়াদি সামঞ্জস্যপূর্ণ পে‑লোড ডিজাইনের মতো বিষয়গুলো।
সাধারণ প্রশ্ন
সহজভাবে বললে JSON কী?
JSON হলো গঠনবদ্ধ ডেটা পাঠানোর একটি সাধারণ টেক্সট ফরম্যাট। এতে নামযুক্ত ফিল্ডসহ অবজেক্ট, অ্যারে, স্ট্রিং, সংখ্যা, বুলিয়ান এবং null ব্যবহার করা হয়।
ডগলাস ক্রকফোর্ড JSON-এর জন্য কী করেছিলেন?
ডগলাস ক্রকফোর্ড JSON-এর নাম দেন, স্পষ্টভাবে নথিবদ্ধ করেন এবং এমন একটি ছোট ডেটা ফরম্যাট হিসেবে প্রচার করেন যা অনেক প্রোগ্রামিং ভাষা ব্যবহার করতে পারে। তিনি একটি কার্যকর প্রচলনকে সবার জন্য ভাগ করা মানদণ্ডে পরিণত করতে সাহায্য করেন।
JSON এত সাধারণ হয়ে উঠল কেন?
JSON জনপ্রিয় হয়েছিল কারণ এটি সংক্ষিপ্ত, পড়তে সহজ এবং ব্রাউজার ও সার্ভারের জন্য পার্স করা সহজ। এর গঠন অ্যাপ্লিকেশনগুলোতে আগে থেকেই ব্যবহৃত অবজেক্ট ও অ্যারের সঙ্গেও ঘনিষ্ঠভাবে মেলে।
API-এর সঙ্গে JSON কীভাবে কাজ করে?
একটি API সাধারণত অনুরোধ বা প্রতিক্রিয়ার বডিতে JSON পাঠায়। HTTP অনুরোধ, স্ট্যাটাস কোড ও হেডার সামলায়, আর JSON ডেটাকে বর্ণনা করে।
Content-Type application/json বলতে কী বোঝায়?
কোনো HTTP অনুরোধ বা প্রতিক্রিয়ার বডিতে JSON থাকলে Content-Type: application/json হেডার পাঠান। এটি গ্রহণকারী সিস্টেমকে বডি কীভাবে পার্স করতে হবে তা জানায়।
XML-এর বদলে কখন JSON ব্যবহার করা উচিত?
ব্যবহারকারী, অর্ডার, সেটিংস ও API প্রতিক্রিয়ার মতো বেশিরভাগ অ্যাপ্লিকেশন ডেটার জন্য JSON ব্যবহার করুন। ডকুমেন্টধর্মী মার্কআপ, লেখা ও ট্যাগের মিশ্রণ প্রয়োজন হলে বা XML-ভিত্তিক ইন্টিগ্রেশনের সঙ্গে কাজ করতে হলে XML বেছে নিন।
JSON কি JavaScript অবজেক্টের মতোই?
না। JSON-এ ফিল্ডের নাম ও টেক্সট মানের চারপাশে ডাবল কোটেশন বাধ্যতামূলক, মন্তব্য অনুমোদিত নয় এবং শেষে অতিরিক্ত কমা গ্রহণ করে না। JavaScript অবজেক্টে এমন সিনট্যাক্স ব্যবহার করা যায় যা বৈধ JSON-এ চলে না।
JSON-এ তারিখ ও টাকা কীভাবে সংরক্ষণ করা উচিত?
টাইমস্ট্যাম্পের জন্য স্ট্রিং ব্যবহার করুন, সাধারণত ISO 8601 ফরম্যাটে। নির্ভুলতা গুরুত্বপূর্ণ হলে টাকা ও খুব বড় পূর্ণসংখ্যার ID স্ট্রিং হিসেবে সংরক্ষণ করুন, কারণ JSON-এ মাত্র এক ধরনের সংখ্যা আছে।
পরে ক্লায়েন্ট নষ্ট না করে এমন JSON কীভাবে ডিজাইন করব?
একটি নামকরণের ধরন বেছে নিন, ফিল্ডের ধরন স্থিতিশীল রাখুন এবং বিদ্যমান ফিল্ডের নাম বদলানো বা সরানোর বদলে ঐচ্ছিক ফিল্ড যোগ করুন। ত্রুটির জন্য একটিই সামঞ্জস্যপূর্ণ কাঠামো রাখুন, যাতে সব ক্লায়েন্ট একইভাবে সেগুলো সামলাতে পারে।
JSON নিরাপদে কীভাবে সামলাব?
একটি JSON পার্সার ব্যবহার করুন এবং অ্যাপ্লিকেশন ব্যবহারের আগে আসা ডেটা যাচাই করুন। eval ব্যবহার করবেন না, আর পাসওয়ার্ড, টোকেন বা ব্যক্তিগত তথ্য থাকতে পারে এমন সম্পূর্ণ পেলোড লগ করা এড়িয়ে চলুন।