API কন্ট্রাক্ট চেকার
ব্রেকিং, সেফ, সিকিউরিটি ও allOf/oneOf পরিবর্তনের জন্য OpenAPI 3.x স্পেক তুলনা করুন, ফাইল আপলোড ও 3.1 সাপোর্টসহ - সম্পূর্ণ আপনার ব্রাউজারে, কিছুই আপলোড হয় না।
🔒 এই টুলটি সম্পূর্ণভাবে আপনার ব্রাউজারে চলে। আপনার ফাইল কখনও সার্ভারে আপলোড করা হয় না।
ব্রাউজার টুল
API কন্ট্রাক্ট চেকার
যেকোনো বক্স OpenAPI 3.x কে JSON বা YAML হিসেবে গ্রহণ করে — পেস্ট করুন, একটি ফাইল বক্সে টেনে আনুন, বা ফাইল আপলোড করুন ব্যবহার করুন। কোনো সার্ভারে কিছু আপলোড হয় না — তুলনা সম্পূর্ণভাবে আপনার ব্রাউজারে চলে। তাৎক্ষণিকভাবে তুলনা করতে Ctrl+Enter চাপুন।
এটি কীভাবে কাজ করে
- আপনার base (পুরনো) এবং revision (নতুন) OpenAPI 3.x স্পেক দুটি বক্সে পেস্ট করুন - অথবা যেকোনো একটিতে .json/.yaml/.yml ফাইল টেনে আনুন, অথবা এর Upload file বাটন ব্যবহার করুন। JSON বা YAML দুটোই কাজ করে, এবং ফরম্যাট মিলিয়ে দেওয়ার দরকার নেই।
- Compare চাপুন, টাইপ করতে থাকুন (একটি সংক্ষিপ্ত বিরতির পর এটি স্বয়ংক্রিয়ভাবে আবার চালু হয়), অথবা তাৎক্ষণিকভাবে তুলনা করতে Ctrl+Enter চাপুন।
- ফলাফলগুলো breaking changes, safe/additive changes এবং অন্যান্য পরিবর্তনে ভাগ করা হয় - যার মধ্যে রয়েছে security, deprecation, server ও allOf/oneOf/anyOf পরিবর্তন - প্রতিটির সংখ্যা উপরে দেখানো থাকে। কোনো গ্রুপ লুকাতে বা দেখাতে সংখ্যা ব্যাজে ক্লিক করুন।
- একটি রিপোর্ট ফরম্যাট বেছে নিন (Text, Markdown, বা JSON) এবং সম্পূর্ণ ডিফ সংরক্ষণ করতে Download report চাপুন।
FAQ
এই টুলটি আসলে কী যাচাই করে?
আপনি একটি base (পুরনো) এবং একটি revision (নতুন) OpenAPI 3.x স্পেসিফিকেশন পেস্ট (বা আপলোড) করেন, এবং এটি উভয়ের প্রতিটি path, parameter, request body, response, security requirement এবং schema পরীক্ষা করে, তারপর কী পরিবর্তন হয়েছে তা রিপোর্ট করে: যোগ বা মুছে ফেলা endpoint, parameter ও request-field প্রয়োজনীয়তার পরিবর্তন, সংকীর্ণ হওয়া type বা enum, হারিয়ে যাওয়া response field বা status code, security requirement পরিবর্তন, এবং allOf/oneOf/anyOf কম্পোজিশন পরিবর্তন।
কোনটি "breaking" পরিবর্তন হিসেবে গণ্য হয়?
যেকোনো কিছু যা একটি বিদ্যমান ক্লায়েন্টকে কাজ করা বন্ধ করে দিতে পারে: একটি মুছে ফেলা endpoint, একটি parameter বা request field যা required হয়ে গেছে, একটি মুছে ফেলা response field বা status code, একটি field যা আর response-এ নিশ্চিত নয়, অথবা একটি type/enum যা সংকীর্ণ হয়ে গেছে (OpenAPI 3.1-এর nullable type array সহ, যেমন `["string", "null"]` থেকে "null" সরিয়ে ফেলা)। নতুন endpoint, নতুন optional field, এবং নতুন response field additive এবং আলাদাভাবে safe হিসেবে দেখানো হয়।
এটি কি security scheme এবং deprecation পরিবর্তন যাচাই করে?
হ্যাঁ। যোগ/মুছে ফেলা security requirement (global এবং per-operation), security scheme সংজ্ঞার পরিবর্তন (যেমন একটি API key header থেকে query parameter-এ সরে যাওয়া), নতুন deprecated operation, এবং server URL পরিবর্তন - সবই রিপোর্ট করা হয় - breaking বা safe না হয়ে informational findings হিসেবে, কারণ (oasdiff নিজে এই চেকগুলোকে যে ডিফল্ট severity দেয় তার সাথে মিলিয়ে) কোনো দিকই সর্বজনীনভাবে ঠিক বা ভুল নয়; আপনার API-এর জন্য এটি গুরুত্বপূর্ণ কিনা তা আপনি সিদ্ধান্ত নেন।
এটি কি allOf, oneOf, এবং anyOf schema কম্পোজিশন হ্যান্ডেল করে?
হ্যাঁ। ডিফ করার আগে `allOf` সদস্যদের resolve ও merge করা হয়, তাই একটি কম্পোজড schema-এর গভীরে যোগ করা একটি required field ধরা পড়েই। `oneOf`/`anyOf` variant সেট তুলনা করা হয় এবং একটি variant যোগ বা মুছে ফেলা হলে informational হিসেবে চিহ্নিত করা হয়, কারণ সেই নির্দিষ্ট পরিবর্তনটি breaking কিনা তা নির্ভর করে আপনার ক্লায়েন্টরা variant-গুলোর মধ্যে কীভাবে পার্থক্য করে তার উপর।
এটি কি Swagger 2.0 সমর্থন করে?
না - এটি শুধুমাত্র OpenAPI 3.x স্পেক তুলনা করে। Swagger 2.0 (পুরনো ফরম্যাট) parameter এবং body ভিন্নভাবে সাজায়, তাই একই নিয়ম প্রয়োগ করলে ভুল ফলাফল পাওয়া যাবে। একটি Swagger 2.0 ডকুমেন্ট পেস্ট করলে নীরবে ভুল ডিফ দেওয়ার বদলে একটি স্পষ্ট error তৈরি হয়।
আমার স্পেক কি কোথাও পাঠানো হয়?
না। পার্সিং এবং তুলনা দুটোই আপনার ব্রাউজারে চলে - আপনার স্পেক কখনো আপনার ডিভাইস ছাড়ে না, যা বেশিরভাগ অন্যান্য OpenAPI diff টুলের বিপরীত, যারা তাদের নিজস্ব সার্ভারে আপলোড প্রসেস করে এমনকি তারা যখন বলে যে তারা এটি সংরক্ষণ করে না তখনও। ফাইল আপলোড/ড্র্যাগ-অ্যান্ড-ড্রপ অপশন ব্যবহার করার সময়ও এটি সত্য: ফাইলটি স্থানীয়ভাবে পড়া হয়, কখনো ট্রান্সমিট করা হয় না।
এটি কী যাচাই করে না?
এটি `application/json` request এবং response body তুলনা করে, যা অধিকাংশ REST API কভার করে, কিন্তু এটি অন্যান্য content type, response header, বিবরণ, বা উদাহরণ মূল্যায়ন করে না। ডকুমেন্টের বাইরে নির্দেশ করা একটি `$ref` (আলাদা ফাইল বা URL) নীরবে বাদ দেওয়ার বদলে unresolvable হিসেবে রিপোর্ট করা হয়।
আমি কি JSON-এর বদলে YAML পেস্ট করতে পারি, বা একটি ফাইল আপলোড করতে পারি?
দুটোই হ্যাঁ। প্রতিটি বক্স স্বাধীনভাবে JSON বা YAML গ্রহণ করে এবং আপনি কোনটি ব্যবহার করেছেন তা শনাক্ত করে, তাই আপনি একটি JSON base স্পেককে একটি YAML revision-এর সাথে তুলনা করতে পারেন বা উল্টোটাও। আপনি যেকোনো বক্সে একটি .json/.yaml/.yml ফাইল টেনে আনতেও পারেন, অথবা এর Upload file বাটন ব্যবহার করতে পারেন - ফাইলটি আপনার ব্রাউজারে পড়া হয় এবং কখনো কোথাও আপলোড করা হয় না।
এটি কি শুধু 3.0 নয়, OpenAPI 3.1 সমর্থন করে?
এটি যেকোনো ডকুমেন্টের সাথে কাজ করে যাতে একটি "openapi": "3.x" field এবং একটি "paths" object আছে, যা 3.0 এবং 3.1 উভয়কেই কভার করে - যার মধ্যে 3.1-এর array-form `type` (যেমন `["string", "null"]`) অন্তর্ভুক্ত - এবং এটি শুধুমাত্র সেই ডকুমেন্টগুলো প্রত্যাখ্যান করে যা Swagger 2.0-এর মতো দেখায়।
আমি কি ডিফ JSON, Markdown, বা HTML হিসেবে এক্সপোর্ট করতে পারি?
Text (.txt), Markdown (.md), এবং JSON (.json) সবগুলোই সমর্থিত - আপনি ডাউনলোড করার আগে Download report-এর পাশে ফরম্যাট ড্রপডাউন থেকে একটি বেছে নিন। JSON এক্সপোর্টে findings-এর সম্পূর্ণ তালিকার পাশাপাশি per-severity সংখ্যা অন্তর্ভুক্ত থাকে, তাই প্রয়োজনে এটি অন্য স্ক্রিপ্টে (যেমন একটি CI চেক) পাইপ করা যেতে পারে।
এটি কি আমি টাইপ করার সাথে সাথে আপডেট হয়, নাকি আমাকে Compare ক্লিক করতে হয়?
দুটোই কাজ করে: তাৎক্ষণিক রি-রানের জন্য Compare চাপুন, বা শুধু টাইপ করতে থাকুন - একটি সংক্ষিপ্ত বিরতির পর এটি স্বয়ংক্রিয়ভাবে আবার তুলনা করে। আপনি অপেক্ষা না করেই তাৎক্ষণিকভাবে তুলনা করতে যেকোনো বক্স থেকে Ctrl+Enter (Mac-এ Cmd+Enter) চাপতেও পারেন।
আমরা কীভাবে তুলনা করি
| ফিচার | Online Tool Store | oasdiff | SpecShield |
|---|---|---|---|
| আপনার স্পেক সম্পূর্ণভাবে আপনার ব্রাউজারে তুলনা করে | হ্যাঁ - আপলোড করা ফাইলসহ কিছুই আপনার ডিভাইস ছাড়ে না | না - তাদের সার্ভারে প্রসেস করা হয় | না - তাদের সার্ভারে প্রসেস করে, তারপর বাদ দেওয়া হয় |
| OpenAPI 3.x কে JSON বা YAML হিসেবে গ্রহণ করে, পেস্ট বা আপলোড করা | হ্যাঁ - পেস্ট, ড্র্যাগ-অ্যান্ড-ড্রপ, বা Upload file | পেস্ট বা আপলোড | পেস্ট বা আপলোড |
| ফলাফলগুলোকে breaking, safe এবং অন্যান্য পরিবর্তনে ভাগ করে | হ্যাঁ, ক্লিক-টু-ফিল্টার ব্যাজসহ | হ্যাঁ, একটি নিবেদিত Breaking Changes মোডের মাধ্যমে | হ্যাঁ, একই তিনটি গ্রুপ |
| allOf/oneOf/anyOf schema কম্পোজিশন হ্যান্ডেল করে | হ্যাঁ - ডিফ করার আগে allOf মার্জ করা হয়; oneOf/anyOf variant পরিবর্তন চিহ্নিত করা হয় | পাবলিক ডিফ পেজে ডকুমেন্টেড নয় | ডকুমেন্টেড নয় |
| security, deprecation, এবং server URL পরিবর্তন চিহ্নিত করে | হ্যাঁ, তিনটিই (informational হিসেবে দেখানো হয়, breaking/safe নয়) | oasdiff-এর মূল ইঞ্জিনের মাধ্যমে security এবং deprecation | ডকুমেন্টেড নয় |
| বিনামূল্যে, কোনো অ্যাকাউন্ট প্রয়োজন নেই | হ্যাঁ | হ্যাঁ, বেসিক ডিফের জন্য | হ্যাঁ, বেসিক ডিফের জন্য |
নতুন API ভার্সন রিলিজ করার আগে একটি দ্রুত, প্রাইভেট breaking-change চেকের জন্য ভালো - বিশেষত যখন স্পেকটি নিজেই সংবেদনশীল এবং আপনি এটি, বা একটি আপলোড করা ফাইল, একটি তৃতীয়-পক্ষ সার্ভারে পাঠাতে চান না।